Ubuntu

長 TCPDUMP 擷取緩慢但肯定會佔用 RAM 中的所有可用記憶體

  • August 14, 2019

當我在我的 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 執行幾天。

free確定可用記憶體時不要看該列;看available

Linux 將使用未使用的記憶體作為文件的緩衝區記憶體,以加快對這些文件的訪問。您正在將大量 tcpdump 數據包擷取數據寫入文件系統,因此這些數據也會緩沖在記憶體中。當您停止擷取過程並刪除文件時,用於該文件的緩衝區記憶體也會被釋放。

如果系統確實需要記憶體,例如用於處理數據,那麼緩衝區記憶體也將被釋放,這意味著訪問文件中的數據將導致從磁碟讀取文件而不是從緩衝區記憶體中讀取文件。

這就是該available列添加freebuff/cache列的原因available

引用自:https://serverfault.com/questions/979254