2012-02-21 13 views
4

У меня есть аппаратный сервер Linux, имеющий 16 ГБ физической памяти и работающий с некоторыми приложениями. Этот сервер работает и работает около 365 дней до сих пор, и я наблюдаю, что «free -m» показывает, что память работает на низком уровне.Где моя используемая память исчезла?

   total  used  free  shared buffers  cached 
Mem:   14966  13451  1515   0  234  237 
-/+ buffers/cache:  12979  1987 
Swap:   4094  367  3727 

Я понимаю, что 1987 г. - фактическая свободная память в системе, которая составляет менее 14%. Если я добавлю часть% MEM в выход «ps -A v» или «сверху», она не добавит до 100%.

Мне нужно понять, почему память ушла так низко?

Update (29/Февраль/2012):
Позвольте мне разделить эту проблему на две части:
1) Система, имеющий меньше свободной памяти.
2) Идентификация, куда исчезла используемая память.

Для 1), я понимаю; если система работает на свободной памяти, мы можем наблюдать постепенное ухудшение производительности. В какой-то момент пейджинг даст дополнительную свободную память системе, что приведет к восстановлению производительности системы. Поправьте меня, если я ошибаюсь.

Для 2). Теперь это то, что я хочу понять, где исчезла используемая память. Если я суммирую% MEM в выводе «ps -A v» или «top -n 1 -b», он достигает не более 50%. Итак, где учитывать оставшиеся 40% неисслеживаемой памяти. У нас есть собственные модули ядра на сервере. Если эти модули будут утечки памяти, они будут учитываться. Возможно ли узнать количество утечек в модулях ядра.

+0

Что работает на этом сервере, возможно, это сервер утечки памяти, или это просто тяжелая используемая база данных, которая нуждается в памяти, linux работает бесперебойно даже с 100 МБ памяти, вы не должны паниковать. попробуйте посмотреть результат верхней команды – Kiwy

+0

Я также наблюдаю вывод команды top. Но это не очень помогает.Существует процесс, который занимает около 1,9 Гб памяти; но это тот случай, когда система только что загружена. – Taroko

+0

'1)' абсолютно неверно и распространенное заблуждение. Чем ниже свободная память, тем более равны все остальные, тем выше используемая память. Использование большей памяти * улучшает производительность, поэтому мы добавляем память в системы, чтобы сделать их быстрее. –

ответ

4

Я был в состоянии идентифицировать и решить мою проблему. Но это было не без информации, представленной в http://linux-mm.org/Low_On_Memory.

Память на slabinfo для зубного протеза была около 5 ГБ. После выдачи команды «sync» грязные страницы синхронизировались с жестким диском, а команда «echo 3>/proc/sys/vm/drop_caches» освободила еще немного памяти, сбросив еще несколько кешей.

В дополнение к литературе, представленной на этом веб-сайте, память восстанавливается ядром со скоростью, зависящей от vfs_cache_pressure (/ proc/sys/vm/vfs_cache_pressure).

Спасибо всем за помощь.

+0

Этот трюк только что сделал меня такой счастливой. : p –

+0

От 250M бесплатно до 28GB бесплатно на сервере я использовал его. Кроме того, процессы становятся более гладкими, что удивительно. –

+0

@ w00te: Рад знать, что это сработало для вас. – Taroko

8

Это не работает низко. Свободная память работает низко. Но это прекрасно, поскольку свободная память совершенно бесполезна. (Свободная память - это память, которая обеспечивает нет. Свободная память - это память, которая была бы просто полезной сидящей на вашей полке, как на вашем компьютере.)

Свободная память плохая, она не имеет никакой цели. Низкая свободная память хороша, это означает, что ваша система нашла свое применение для большей части вашей памяти.

Итак, что плохого? Если ваша система slow, потому что у нее недостаточно памяти используется.

+0

Мы фактически отслеживаем свободную память системы. Если он идет ниже, скажем 10%, срабатывает тревога. Если ** free -m ** не может быть доверено, какой вывод команды будет показывать фактическую свободную память в системе linux. – Taroko

+2

@Taroko Нет разумной причины запуска тревоги при низкой свободной памяти. Низкая свободная память является нормальной и правильной. Возможно, имеет смысл вызвать тревогу при чрезмерном пейджинге. Возможно, имеет смысл вызвать тревогу, если кеш будет сжат. Это зависит от того, что вам действительно нужно. (Возможно, вам небезразлично, если процессы используют слишком высокий процент вашей памяти?) –

6
+1

Я читаю правильный номер как свободную память. Если вы видите мой вопрос, я интерпретирую 1987 как свободную память, о которой упоминает этот сайт. – Taroko

+0

К сожалению, эта страница очень вводит в заблуждение. Память, используемая для кешей и буферов, не является * бесплатной. Дело в том, что свободная память * плохой *, не лучше, чем память, сидящая на вашем столе. Сайт должен исправить непонимание, что свободная память хороша, а не пытается убедить людей в том, что у них больше. (Это приводит к путанице OP - думая, что у вас нет «достаточной» свободной памяти.) –