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