Длительный захват TCPDUMP медленно, но верно занимает всю доступную память в ОЗУ

Когда я tcpdump сетевой трафик на моем сервере ubuntu, я вижу, что свободная память уменьшается со временем.

Кажется, что захваченные данные хранятся в памяти. Сначала я заметил проблему, потому что я сохранял снимки в папке / tmp, которая хранится в ОЗУ.

Затем я сохранил снимок на диске, но вижу ту же проблему; И как только я удаляю записи на диске, оперативная память освобождается!

Вот команда 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
задан 14 August 2019 в 17:15
1 ответ

Не смотрите на столбец free при определении доступной памяти; смотрите на available.

Linux будет использовать неиспользованную память в качестве буферного кэша для файлов, чтобы ускорить доступ к этим файлам. Вы записываете много данных захвата пакетов tcpdump в файловую систему, так что они также буферизируются в памяти. Когда вы останавливаете процесс захвата и удаляете файл, буферный кэш, используемый для этого файла, также освобождается.

Если системе действительно нужна память, например, для данных процесса, то буферный кэш также освобождается, что будет означать, что доступ к данным в файле приведет к тому, что файл будет читаться с диска, а не из буферного кэша.

Поэтому столбец available добавляет столбцы free и buff/cache, чтобы дать столбцу available.

.
3
ответ дан 3 December 2019 в 18:23

Теги

Похожие вопросы