重置 Netstat 统计信息

qz_*_*_99 3 networking linux netstat

有没有一种方法可以在不重新启动设备的情况下清除“netstat -s”的统计信息?

我试图确定不确定时间内的错误数量。

A.B*_*A.B 8

netstat工具从内核提供的各种来源收集统计信息:

/proc/net/snmp
/proc/net/netstat
/proc/net/sctp/snmp # if used
Run Code Online (Sandbox Code Playgroud)

可能还有其他。由于这些内核数据没有重置并且netstatLinux 上的命令不保留状态文件,因此不能要求重置其统计信息。

幸运的是,替代工具来自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
Run Code Online (Sandbox Code Playgroud)

tc qdisc add dev eth0 handle 1: root netem corrupt 10这些错误是使用和发送从网络命名空间人为创建的ping。要获得平均统计信息(最后一列),应首先在守护程序模式下运行实例,以便它可以继续收集统计信息。例如:

nstat -d 5 -t 60
Run Code Online (Sandbox Code Playgroud)

当然,人们也可以实现自己的包装器netstat来重新实现这一点:将最后的输出保留在某处,并且仅智能地显示上次运行的增量。

注意:companion 命令rtacct是关于领域路由统计的,通常用于高级路由(统计)。