MTA 会为其每个活动通道积累邮件通信流量计数器(基于邮件监视 MIB,RFC 1566)。通道计数器旨在帮助表明电子邮件系统的趋势和运行状况。通道计数器并不用于提供精确的邮件通信流量计数。要获得精确的计数,请查看 MTA 日志记录,如第 25 章,管理日志记录中所述。
MTA 通道计数器是使用可用的最轻量级的机制实现的,以尽可能减小它们对实际操作的影响。通道计数器并不尝试成为强硬功能:如果尝试映射某部分失败,则不会记录任何信息;如果几乎无法立即获得该部分中的其中一个锁定,也不会记录任何信息;当关闭系统时,内存中的部分所包含的信息将永远丢失。
imsimta counters -show 命令可以提供 MTA 通道邮件统计信息(请参见下文)。在一段时间过后需要检查这些计数器并记下所看到的最小值。对于某些通道,最小值实际上可能为负数。负值意味着在某个通道的计数器归零时该通道中有排队的邮件(例如,创建了计数器的群集范围的数据库)。当这些邮件取消排队时,与该通道相关联的计数器便会减少,从而导致出现负的最小值。如果计数器出现这种情况,用当前值减去自计数器初始化以来曾经具有的最小值便可得到正确的“绝对”值。
Channel Messages Recipients Blocks ------- -------- ---------- ------- tcp_local Received 29379 79714 982252 (1) Stored 61 113 -2004 (2) Delivered 29369 79723 983903 (29369 first time) (3) Submitted 13698 13699 18261 (4) Attempted 0 0 0 (5) Rejected 1 10 0 (6) Failed 104 104 4681 (7) Queue time/count 16425/29440 = 0.56 (8) Queue first time/count 16425/29440 = 0.56 (9) Total In Assocs 297637 Total Out Assocs 28306 |
1) Received 是加入到名为 tcp_local 的通道队列中的邮件数。即,由任何其他通道加入到 tcp_local 通道队列中的邮件(mail.log* 文件中的 E 记录)。
2) Stored 是存储在要被传送的通道队列中的邮件数。
3) Delivered 是已经由通道 tcp_local 处理(已取消排队)的邮件数。(即 mail.log* 文件中的 D 记录。)取消排队操作可能是由于传送成功(即,加入到另一个通道队列中),也可能是由于邮件被返回给发件人而进行的取消排队操作。通常此值等于 Received 值与 Stored 值之差。
MTA 还跟踪了首次尝试时被取消排队的邮件数,此数值显示在括号中。
4) Submitted 是由通道 tcp_local 加入到任何其他通道队列中的邮件数(mail.log 文件中的 E 记录)。
5) Attempted 是在排出队列过程中遇到临时问题的邮件数(即 mail.log* 文件中的 Q 记录或 Z 记录。
6) Rejected 是被拒绝的入队尝试次数(即 mail.log* 文件中的 J 记录)。
7) Failed 是失败的取消排队尝试次数(即 mail.log* 文件中的 R 记录)。
8) Queue time/count 是所传送的邮件在队列中花费的平均时间。这包括首次尝试时传送的邮件(请参见 [9])以及需要进行额外传送尝试的邮件(因而通常会在队列中花费很长的闲置等待时间)。
9) Queue first time/count 是首次尝试即传送成功的邮件在队列中所花费的平均时间。
请注意,提交的邮件数可能会大于传送的邮件数。这是一个很常见的情况,因为通道取消排队(传送)的每封邮件都将导致至少一封新邮件加入队列(提交),但可能会多于一封。例如,如果一封邮件具有两个分别经由不同通道到达的收件人,则将需要进行两次加入队列操作。或者,如果邮件退回,则一个副本将返回给发件人,同时另一个副本可能会发送给邮寄主管。通常将有两次提交(除非两者通过同一个通道到达)。
更常见的情况是,Submitted 和 Delivered 之间的连接会根据通道的类型而不同。例如,在转换通道中,邮件将由其他任意通道加入队列,然后,转换通道将处理该邮件并将其加入到第三个通道中的队列,并在该邮件的自身队列中将其标记为已取消排队。每封单独的邮件都将获取一个路径:
elsewhere -> conversion E record Received conversion -> elsewhere E record Submitted conversion D record Delivered
但是,对于 tcp_local 这样的通道(不是“直通式”通道,而是具有两个单独的部分 [从部分和主部分]),在 Submitted 和 Delivered 之间没有连接。Submitted 计数器必须使用 tcp_local 通道的 SMTP 服务器部分,而 Delivered 通道则必须使用 tcp_local 通道的 SMTP 客户端部分。它们是两个完全独立的程序,通过它们传送的邮件也可能是完全独立的。
提交给 SMTP 服务器的邮件:
tcp_local -> elsewhere E record Submitted
通过 SMTP 客户端发送给其他 SMTP 主机的邮件:
elsewhere -> tcp_local E record Received tcp_local D record Delivered
通道的取消排队(传送)操作将导致至少一封新邮件加入队列(提交),但可能会多于一封。例如,如果一封邮件具有两个分别经由不同通道到达的收件人,则将需要进行两次加入队列操作。或者,如果邮件退回,则一个副本将返回给发件人,同时另一个副本可能会发送给邮寄主管。通常将通过同一个通道到达。
由于性能原因,运行 MTA 的节点将使用共享的内存部分(在 UNIX 上)或共享的文件映射对象(在 NT 上)在内存中保留通道计数器的高速缓存。当该节点上的进程将邮件加入队列或取消排队时,将更新此内存中的高速缓存中的计数器。如果通道运行时该内存中的部分不存在,则会自动创建该部分。(如果内存中的部分不存在,imta start 命令也会创建该部分。)
可以使用命令 imta counters -clear 或 imta qm 命令 counters clear 将计数器重置为零。