Подсистема VM ядра Linux является очень сложным зверем, ядро использует эвристику и алгоритмы для определения, в / каких страницах подкачать и когда сделать это. Я не думаю, что существует простая формула, которая может описать, как и когда страницы помещаются в диск. Возможно, эта статья LWN полезна для Вас:
Поскольку Вы, вероятно, знаете, использование ядра Linux как можно больше памяти к вещам кэша. Вот почему вывод бесплатных взглядов как я почти вне памяти, согласно верхней строке:
$ free -m
total used free shared buffers cached
Mem: 3168 2963 205 0 155 1263
-/+ buffers/cache: 1543 1624
Swap: 494 86 407
но важная часть является суммой RAM, которая буферизует, и кэш не используют
-/+ buffers/cache: 1543 1624
Однако, все кроме 205 МБ памяти используются в том примере, даже если это кэшем. Как это было объяснено мне (или по крайней мере, поскольку я понял это), если программа внезапно запрашивает> 205 МБ памяти, тот блок выходит из подкачки, так, чтобы процесс мог иметь блок памяти, затем это выходит из подкачки, после того как это получает шанс к свободной памяти, используемой кэшем.
Как pfo упомянутый, базовые механизмы сложны, и далеко вне моего понимания. Я спросил Ted Ts'o почти этот идентичный вопрос в классе, который он преподавал в LISA, и я дал Вам по существу тот же ответ, который он дал мне, или по крайней мере поскольку я понял это.
Кстати, я подозреваю, что память, "используемая" в подкачке, на самом деле не используется ничем в этой точке, но что она просто еще не была освобождена.
swapoff -a && swapon -a
должен использоваться для освобождения той области подкачки.
– pfo
8 January 2010 в 19:14
Столкнулся с этой самой проблемой о производстве серверы приложений JBoss на AWS.
Я был бы разность sysctl-a обе системы.
1) Для набора серверов vm.swappiness приблизительно к 0. Это предпочитает сохранять материал в памяти.
2) Включите небольшой файл подкачки на всех серверах, таким образом, можно контролировать фактическую загрузку в память. (Проверьте используемый % подкачки).
3) Контролируйте отсутствия страницы (nFLT) с Кактусами или подобный.
4) Проверьте ulimits.
5) Мелодия на основе измеримой производительности приложения.
Подробно останавливаясь на ответе pfo, поставщик может также предварительно настроить их развернутое ядро (ядра) для обработки swappiness определенным способом. В системе Red Hat можно настроить большую часть этого в/etc/sysctl.conf - Google настройки, такие как:
vm.swappiness
vm.vfs_cache_pressure
Путем тщательной настройки swappiness системы на определенные потребности приложения Вы можете уменьшать свое использование подкачки на той машине на 8 ГБ. У меня есть примечание в моих файлах, в котором говорится для vm.swappiness "использование памяти подкачки по умолчанию на Ядре 2.6.xx, установлен на 60%", но не сохранил ссылку, где я считал, что, поэтому возьмите его с мелкой частицей соли.:)