dumpcap 是 Wireshark 的抓包后端,内存占用高在 Debian 上通常不是 bug,而是抓包策略+系统配置导致的。下面按「原因 → 对应解决方案」来说明。
如果你用类似:
dumpcap -i eth0 -w capture.pcap
它会一直写内存 + 磁盘缓存,直到机器内存耗尽。
✅ 解决:
使用 环形缓冲(ring buffer)
dumpcap -i eth0 -w capture.pcap \
-b filesize:100000 \ # 每个文件 100MB
-b files:10 # 最多 10 个文件
默认情况下 dumpcap 会申请 大块内核/用户缓冲区。
✅ 检查:
ps -eo pid,comm,rss,vsz | grep dumpcap
✅ 解决:
限制抓包缓冲区大小
dumpcap -i eth0 -w capture.pcap --buffer-size=4
或(较老版本):
dumpcap -B 4 -i eth0 -w capture.pcap
(单位是 MiB)
即使不写文件,dumpcap 也会在内存里缓存包。
✅ 判断是否流量问题:
ip -s link
nload
✅ 解决:
dumpcap -i eth0 -f "tcp port 443" -w capture.pcap
ethtool -K eth0 gro off
ethtool -K eth0 lro off
某些系统(如 Wireshark + systemd)会 自动启动 dumpcap。
✅ 检查:
systemctl status wireshark
ps aux | grep dumpcap
✅ 解决:
systemctl stop wireshark
systemctl disable wireshark
或者:
killall dumpcap
Debian 用 setcap 给 dumpcap 抓包权限:
getcap /usr/bin/dumpcap
通常是:
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
✅ 如果内存异常飙升,可尝试:
sudo setcap -r /usr/bin/dumpcap
然后用 root 手动测试是否仍异常。
cat /proc/sys/net/core/rmem_max
cat /proc/sys/net/core/wmem_max
✅ 临时降低:
sysctl -w net.core.rmem_max=4194304
sysctl -w net.core.wmem_max=4194304
dumpcap \
-i eth0 \
-f "tcp port 80 or tcp port 443" \
-w /data/capture.pcap \
-b filesize:200000 \
-b files:20 \
--buffer-size=8
| 检查项 | 命令 |
|---|---|
| dumpcap 是否运行 | ps aux | grep dumpcap |
| 是否有无限写文件 | lsof -p <pid> |
| 是否 ring buffer | 看 -b 参数 |
| 内存占用 | top / htop |
| 抓包接口流量 | ip -s link |
| 是否 systemd 启动 | systemctl |
只要贴出:
ps aux | grep dumpcap
dumpcap -v