在 Debian 上使用的 dumpcap(Wireshark 抓包组件)是可能会丢包的,而且“丢包”通常不是 dumpcap 本身的 bug,而是由系统/内核/硬件瓶颈导致的。下面分点说明原因和应对方法。
dumpcap 通过 libpcap 从内核接收数据包,内核有固定大小的 ring buffer:
以下都会增加 CPU 压力:
dumpcap 来不及从缓冲区取数据也会丢。
如果直接写文件:
dumpcap -i eth0 -w test.pcap
结束时会看到类似:
Packets received/dropped on interface eth0: 123456/789
或:
Captured: 123456
Dropped: 789
cat /proc/net/dev
看 drop 列。
ethtool -S eth0 | grep -i drop
dumpcap -i eth0 -B 512 -w test.pcap
-B 单位 MBdumpcap -i eth0 -w out.pcap -C 100 -W 10
避免单文件过大导致 I/O 卡顿。
sudo nice -n -20 dumpcap -i eth0 -w test.pcap
ethtool -l eth0
ethtool -L eth0 combined 8
Debian 上 dumpcap 会丢包,通常不是 dumpcap 的问题,而是内核缓冲、CPU、磁盘或网卡瓶颈。
如果你愿意,可以告诉我:
我可以给你一套具体不丢包的参数配置。