主机评测
重置Ifconfig计数器
每个Linux用户都可能熟悉ifconfig命令。这使我们能够看到系统上的当前网络设置,并对网络接口进行各种更改(更改IP,启动,关闭等)。没有任何参数的ifconfig(或ifconfig -a)的典型运行将显示所有网络接口的状态,而使用网络接口名称(如ifconfig eth0)将仅输出该接口的状态。
我们来看看一个示例输出如何:
ifconfig eth0
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet
addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4233700943 errors:2
dropped:0 overruns:3 frame:5 TX packets:1917219659 errors:1 dropped:0
overruns:0 carrier:348 collisions:5753 txqueuelen:3000 RX
bytes:1467520026 (1.3 GiB) TX bytes:2299240337 (2.1 GiB)
我们可以在这里看到ifconfig正在保留几个计数器(RX / TX数据包,RX / TX字节,错误,丢弃,超限,帧,载波冲突)。只要查看ifconfig计数器,我们就可以快速发现是否存在问题。这个帖子的范围不是如何解决这些问题的,但让我们考虑一下问题的解决,然后我们通常不想再看到错误了。当然,如果有新的错误显示相同的问题或一个新的可以看到它们。所以正常的想法是如何清除这些柜台,开始新鲜。如何重置?如果有人试图这样做,他们可能会告诉我们,重新启动网络接口将无济于事。这本来是最合乎逻辑的选择,这个想法是这些计数器由内核保存(更准确地说是网卡驱动程序)。顺便说一句,我们可以直接在proc系统上查看相同的计数器:
cat /proc/net/dev
考虑到这一点,我们有两个可能的选择:网卡驱动程序是作为一个内核模块构建的,或内置的静态内置。这些与我们这样的问题有关:
内核模块:在这种情况下,我们可以解决这个问题,并通过从内核中卸载模块并重新加载来重置计数器。这将清除计数器。假设我有一个使用e100模块的NIC,可以通过以下方式完成:
modprobe -r e100; modprobe e100; ifup eth0
或类似的东西使界面备份(取决于您的特定Linux发行版,脚本启动网络接口可能会有所不同)。
注意:这将降低网络接口,并且如果您通过ssh连接执行此操作,请特别小心(例如,可能会创建一个小脚本,添加一些额外的措施,以确保您不会将自己锁定在系统之外)。
模块内置内核:在这种情况下,如果特定网络模块驱动程序没有办法使用驱动程序中写入的代码重置它们,则无法重置计数器(当然不重新启动系统)。从我在使用的模块的源代码中看到的,没有一个这样的软件挂钩。但是可能还有其他模块提供此功能,只是我没有亲自看到我使用的通用NIC驱动程序。
通过一个快速的方式来找出使用网络接口的特定驱动程序是使用ethtool(一个非常优秀的工具,有很多好用处):
ethtool -i eth0
driver: e100 version: 3.4.14-k4-NAPI firmware-version: N/A bus-info:
0000:01:07.0