В очередной раз сталкиваюсь с тем, что администраторы не понимают разницу между этими двумя показателями оперативной памяти в Linux.
Например, команда
free -m может дать нам такой вывод:
total used free shared buff/cache available
Mem: 60169 27996 9001 8472 23171 22576
На первый взгляд может показаться, что все хорошо, ведь доступно еще практически треть памяти. Но на самом деле не очень. Потому как свободно всего 9 ГБ.Почему так? Для этого нужно углубиться в принципы организации памяти в Linux. Кроме занятой процессами памяти –
used в системе присутствует еще буферы и кеш - buff/cache, которые содержат разделяемые библиотеки, буферы ввода-вывода и т.д. и т.п., что позволяет системе меньше обращаться к диску. Можем ли мы сбросить буферы и очистить кеш? Да, можем, но когда после этого приложению потребуется какие-то данные или вызов библиотеки – то все это снова будет подгружено с жесткого диска и вполне может оказаться, что сделали мы только хуже, так как производительность системы на некоторое время упрется в производительность дисков, пока снова не будет заполнен кеш.
Поэтому в данной ситуации рассчитывать на 22,5 ГБ доступной памяти будет крайне неосмотрительно. В лучшем случае система может посчитать, что ей выгоднее сбросить страницы приложений в своп, вместо очистки кеша.
А в худшем в вовсе может решить, что сохранить кеш важнее, нежели сохранить процесс и застрелит его при помощи OOM Killer.
Кстати, системы мониторинга, тот же Zabbix будут смотреть именно на свободную память и выдавать вам алерты при ее исчерпании, хотя доступной памяти может быть еще много.
Также рекомендуем прочесть следующие статьи:
🔹 Linux - начинающим. Что такое пространства подкачки и как они работают
🔹 Linux - начинающим. Что такое OOM Killer и как он работает
