有没有办法无需重新启动设备即可清除“netstat -s”的统计信息?
我正在尝试确定一段不确定的时间内的错误数量。
答案1
该netstat
工具从内核提供的各种来源收集统计数据:
/proc/net/snmp
/proc/net/netstat
/proc/net/sctp/snmp # if used
可能还有其他。由于这些内核数据没有重置,并且netstat
Linux 上的命令不保留状态文件,因此无法要求重置其统计信息。
幸运的是,替换工具来自iproute2
而不是弃用net-tools
,称为nstat
,虽然使用大致相同的数据源,但会保留一个状态文件(似乎是/tmp/.nstat.u$UID
),默认情况下将仅输出自上次使用以来的非零增量。它的语法不一样,所以你必须适应。如果担心破坏与其他 *nix 的兼容性,它已经完成了:除了单个命令参数之外的命令参数-s
通常具有其他含义,并且 FreeBSD 和 Linux 之间的统计输出完全不同。
有选项可以显示零增量(-z
/ --zero
)、忽略(-a
/ --ignore
)或不记住(-s
/ --noupdate
)上次运行,以表现得像netstat -s
。有一个守护进程模式(例如-d 10
),以避免竞争和计算平均值。
要显示错误计数器的增量,这些计数器似乎都以Errors
或结尾Errs
,可以是:
$ nstat -rn; sleep 50; nstat '*Errors' '*Errs'
#kernel
IpInHdrErrors 3 0.0
IcmpInErrors 4 0.0
IcmpInCsumErrors 4 0.0
IpExtInCsumErrors 3 0.0
tc qdisc add dev eth0 handle 1: root netem corrupt 10
由于这些错误是使用和发送的网络命名空间人为创建的ping
。要获得平均统计数据(最后一列),首先应在守护进程模式下运行一个实例,以便它可以继续收集统计数据。例如:
nstat -d 5 -t 60
当然,人们也可以实现自己的包装器来netstat
重新实现这一点:将最后的输出保存在某处,并且仅智能地显示上次运行的增量。
注意:配套命令rtacct
是关于领域路线统计通常用于高级路由(统计)。