Назад | Перейти на главную страницу

Длительный захват 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 в течение нескольких дней.

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

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

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

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