Как Linux использует оперативную память и как читать вывод Free
Если хорошо разбираетесь в английском и нужно много подробностей - http://www.linuxatemyram.com/
Что вообще происходит
Многим кажется что Linux “течёт” памятью в течение работы. Это не так, дело в “неправильной” визуализации. Убедиться можно на примере (картинка кликабельна):
Used-память не изменяется, а buffers и cached получают некоторый прирост. Free-памяти остаётся достаточно и если она начнёт расходоваться реальными приложениями - Linux начнёт освобождать Cached-память.
Зачем вообще нужна Cached-память? Чтобы не обращаться лишний раз к медленному дисковому I/O, например.
Разбираться в проблеме нужно если растёт именно used-память.
Как читать вывод Free
Для того чтобы понимать что происходит необходимо уметь читать вывод команды free
:
# free
total used free shared buffers cached
Mem: 165212416 3337076 161875340 480 159460 1720380
-/+ buffers/cache: 1457236 163755180
Swap: 4194300 0 4194300
Mem-total
- общий объём имеющейся оперативной памяти без учёта swapMem cached
- как правило закэшированное дисковое I/O. Очищать кэш - затратное дело (одно только принятие решения о каждой области памяти чего стоит) и просто так этим заниматься, когда свободной памяти достаточно - странное решение.Mem used
- память использованная приложениями, буферами, кэшамиMem free
- вообще никак не используемая в текущий момент память-/+ buffers/cache used
- память использованная приложениями-/+ buffers/cache free
- память, которая может быть использована приложениями при необходимостиSwap-total
- общий объём swap
Когда нужно беспокоиться, а когда нет
-/+ (buffers/cache )/Mem-total
< 4/5 - можно спать спокойноSwap used / Swap total
> 1/2 - вообще, ситуация так себе, система должна начать сильно тормозитьSwap used
> 2Gb (при объёмах памяти до 16Gb) и эта цифра РАСТЁТ НА ГЛАЗАХ - тоже ситуация не очень.
Чистить swap дело тоже довольно затратное, так что если не растёт и -/+ buffers cache free
довольно велика - то и фиг с ним.