У меня есть веб-сервер Ubuntu 10.04 в облаке с 1 ГБ оперативной памяти. Вот таблица памяти Мунина:
но мне трудно это понять: с одной стороны, неиспользуемая память очень высока; но в то же время объем памяти подкачки очень велик, а объем «выделенной» памяти намного превышает реально доступную.
Разве своп не должен использоваться только в том случае, если реальной памяти не осталось? Это нормальный график использования памяти или здесь что-то не так?
Разве своп не должен использоваться только в том случае, если реальной памяти не осталось?
Это неверно. Когда ядро обнаруживает страницы памяти, которые долгое время не использовались, оно активно заменяет их (даже если есть много другой свободной оперативной памяти), делая это пространство оперативной памяти доступным для дискового кеша.
Наблюдая, как система медленно умирает из-за утечки памяти, я могу подтвердить, что всегда требуется свободная память. UNIX / Linux требует немного свободной памяти для загрузки программ. Unix, как правило, создает множество процессов и использует свободную память для загрузки этих программ. Если у вас нет свободной памяти, выполнение процесса будет очень медленным, так как перед перезагрузкой программы потребуется освободить память.
Общая память очень помогает, так как многие программы могут использовать одни и те же страницы памяти только для чтения. Однако доступные для записи страницы необходимо распределять для каждого процесса. Дисковые буферы также помогают, поскольку необходимый код может уже находиться в памяти.
Для долго работающих программ нормально, если код инициализации и выключения выгружен. Это предполагает, что страницы памяти для этого кода не используются совместно используемым кодом. Некоторые программы могли редко использовать код, который можно было заменить. Программы, которые запускаются редко, также могут заменяться с минимальным воздействием.
Как только вы начнете активно менять местами страницы в памяти и из памяти, производительность сильно упадет.