у меня есть читать что Linux использует свободную память для кеширования, чтобы сделать систему быстрее. Однако система мониторинга PRTG Nagios и Paessler показывает мне, что использование моей памяти критически важно.
Я мог бы изменить сценарий Nagios mem_usage для суммирования свободной и кэшированной памяти, но будет ли это правильная информация? Я сомневаюсь, что они неправильно поняли использование памяти Linux.
Допустим, у меня 8 ГБ ОЗУ. Используется 5 ГБ, кешируется 2 ГБ, а свободной памяти у меня 1 ГБ. Реальная доступная память должна быть свободной + кешированной (3 ГБ)? Если какому-то новому приложению потребуются дополнительные 3 ГБ ОЗУ, может ли оно забрать все из кеша и освободить его без использования подкачки, или есть минимум, который должен быть в кеше?
Реальный пример:
$ cat /proc/meminfo
MemTotal: 5984256 kB
MemFree: 137052 kB
Buffers: 140484 kB
Cached: 3439616 kB
SwapCached: 244 kB
Active: 3148824 kB
Inactive: 2341768 kB
...
Мои инструменты мониторинга показывают, что у меня 137 МБ свободной оперативной памяти, но у меня ~ 3,5 ГБ в кеш-памяти.
Спасибо!
У меня был такой же опыт работы с Nagios, когда я использовал плагин check_mem.pl. Когда вы определяете удержание косы для критического, вам нужно использовать заглавную C вместо обычного c.
Как это:
command[check_mem]=/usr/lib/nagios/plugins/check_mem -w 10 -C 5 -f
Затем он принимает кешированную память в учетной записи и не будет отправлять предупреждения.
Freemem - это нераспределенная память, доступная немедленно. Это используется при запуске программ, и обычно у вас будут проблемы, если он станет слишком низким. Мониторинга, чтобы убедиться, что у вас есть несколько МБ свободного места, должно быть достаточно. Я отслеживаю 1 МБ на моем маршрутизаторе OpenWrt 32 МБ и 10 МБ на серверах Ubuntu. Я также отслеживаю использование свопа, поскольку оно будет уменьшаться по мере увеличения нагрузки на память.
При запуске программы обычно изначально не используется вся необходимая память. Обычно виртуальный размер программы намного больше резидентного (в памяти) размера. Оставшаяся память может быть выделена с диска (код из образа программы и библиотек, которые он использует) и подкачки (выделена, но не использована).
Скорее всего, вы столкнетесь со значительными проблемами с производительностью, если объем кэшированной памяти станет слишком низким. В зависимости от того, как закодирован и настроен обмен, неактивные страницы, скорее всего, будут заменены, чтобы освободить место для вашей программы. Обычно это приводит к гораздо меньшему количеству подкачки страниц, чем вы ожидаете.
Я бы следил за кешированной памятью, чтобы гарантировать производительность запущенных программ, а не для того, чтобы гарантировать, что память доступна для запуска огромных программ.
Похоже, у вас нет проблем с памятью. Я считаю, что нагрузка на обе системы одинакова, верно. Если это так, то при почти одинаковых обстоятельствах они будут потреблять такой же объем кэшированной памяти.
Вы, кажется, тоже хорошо справляетесь с частью commit_AS. Во второй системе кэшированной памяти не так много, потому что в этом нет необходимости. Будучи системой управления виртуальной памятью на основе спроса, Linux довольно хорошо работает с памятью. Кэшированная память увеличивается по мере увеличения нагрузки на систему.
Вы должны были поместить весь вывод meminfo. Грязные страницы хранятся на диске, но они считаются кешем страниц и должны сбрасываться на диск в соответствии с требованиями.
Короче говоря, то, что вы говорите, правильно. При вычислении свободной памяти учитывайте также кеш и буфер, но не включайте грязные страницы в расчет.
И чтобы гарантировать, что у вас никогда не закончится память, ведите учетную запись со значением Committed_AS. Основываясь на этом значении, вы должны определить, следует ли увеличить оперативную память или уменьшить рабочую нагрузку.
Linux использует доступную память для кеширования и очищает ее, когда это необходимо. Вы можете освободить кешированную память, когда захотите, запустив
синхронизация; эхо 3> / proc / sys / vm / drop_caches