![tcpdump:无法在数据包套接字上创建 rx 环:无法分配内存](https://linux22.com/image/616918/tcpdump%EF%BC%9A%E6%97%A0%E6%B3%95%E5%9C%A8%E6%95%B0%E6%8D%AE%E5%8C%85%E5%A5%97%E6%8E%A5%E5%AD%97%E4%B8%8A%E5%88%9B%E5%BB%BA%20rx%20%E7%8E%AF%EF%BC%9A%E6%97%A0%E6%B3%95%E5%88%86%E9%85%8D%E5%86%85%E5%AD%98.png)
在出现此错误之前,我一直在使用 tcpdump,没有任何问题。一旦我的服务器受到攻击,我就会使用以下两个命令及其变体,这样如果数据包速率很高,数据包就会自动被转储。
tcpdump -i eth0 -p -nn -s0 -c 2000 -w $dumpdir/dump.`date +"%Y%m%d-%H%M%S"`.cap
tcpdump -nn -s0 -c 2000 -w $dumpdir/dump.`date +"%Y%m%d-%H%M%S"`.cap
当我受到攻击时,控制台中立即出现以下错误:
tcpdump: can't create rx ring on packet socket: Cannot allocate memory
手动使用命令是可行的,所以我猜测在发生攻击时某些东西会过载。不过这是我的 RAM 使用情况:
root@x:~# free -m
total used free shared buffers cached
Mem: 2004 1255 749 0 1 29
-/+ buffers/cache: 1225 779
Swap: 2047 1095 952
目前,这一数字比该命令生效时的水平要低得多。
那么有人能回答这个问题吗?
答案1
这可能是由于系统内存不足造成的。我注意到当内存量较大时,它可以正常工作。