Когда я 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
.