长时间的 TCPDUMP 捕获缓慢但肯定占用 RAM 中所有可用的内存

长时间的 TCPDUMP 捕获缓慢但肯定占用 RAM 中所有可用的内存

当我在我的 ubuntu 服务器上 tcpdump 网络流量时,我发现可用内存随着时间的推移而减少。

似乎捕获的内容存储在内存中。起初,我注意到这个问题是因为我将捕获的内容保存在 RAM 中的 /tmp 文件夹中。

然后我将捕获的内容存储在磁盘上,但看到了同样的问题;而且,一旦我删除磁盘上的捕获内容,RAM 内存就会被释放!

这是 tcpdump 命令

sudo tcpdump -i lo -W 300 -C 100 -s0 -w /home/user/file.pcap &
// BEFORE
free -m
              total        used        free      shared  buff/cache   available
Mem:          14683        3422        6709         153        4551       10745
Swap:             0           0           0
// DELETING THE CAPTURES
rm /home/user/file.pcap*
// AFTER
free -m
              total        used        free      shared  buff/cache   available
Mem:          14683        3399        8267         153        3016       10768

我如何确保捕获不会占用所有可用的内存?

目标是让 tcpdump 运行几天。

答案1

确定可用内存时不要看free列;看available

Linux 将使用未使用的内存作为文件的缓冲区缓存,以加快对这些文件的访问速度。您正在将大量 tcpdump 数据包捕获数据写入文件系统,因此这些数据也会被缓冲在内存中。当您停止捕获过程并删除文件时,用于该文件的缓冲区缓存也会被释放。

如果系统确实需要内存(例如用于处理数据),那么缓冲区缓存也将被释放,这意味着访问文件中的数据将导致从磁盘而不是从缓冲区缓存中读取文件。

这就是为什么该available列添加了freebuff/cache列以得到available

相关内容