Почему drop_caches увеличивает «доступную» память

Почему drop_caches увеличивает «доступную» память

Я столкнулся с проблемами нехватки памяти на узлах proxmox 7, которыми я управляю. Когда я читал о похожих проблемах, меня перенаправили на linuxatemyram.com, после прочтения этой страницы я начал отслеживать «доступную» память вместо «используемой». Но проблема осталась (доступная память уменьшается со временем безотказной работы).

Затем я обнаружил, что могу принудительно освободить кэши Linux, выполнив команду echo 3 > /proc/sys/vm/drop_caches. Я ожидал увидеть, как «используемая» память станет свободной, но я не ожидал, что «доступная» память увеличится, поскольку, насколько я понимаю, доступная память также считается используемой, поскольку она используется Linux для кэширования.

Но «доступная» память увеличилась после drop_caches, как вы можете видеть ниже:

root@proxmox13:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi        29Gi       1.1Gi        67Mi       258Mi       977Mi
Swap:             0B          0B          0B
root@proxmox13:~$ echo 2 > /proc/sys/vm/drop_caches
root@proxmox13:~$ free -h
               total        used        free      shared  buff/cache   available
Mem:            31Gi        26Gi       4.1Gi        67Mi       205Mi       3.9Gi
Swap:             0B          0B          0B

Почему увеличилось? Почему освобожденная память не считалась доступной раньше, если она использовалась для кэширования?

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

решение1

На высоком уровне, доступно бесплатноплюстайники и другие легко извлекаемые вещи для удобства людей.https://www.linuxatemyram.com/использует доступные в попытке объяснить, что происходит. Существуют и другие счетчики для различных кэшей, которые исключают бесплатные.

В реальности Linux VMM сложен и запутан. Редко когда использование памяти совпадает с простым учетом. Я думаюКэширование в /proc/meminfo означает кэширование страницно вы также сбросилидентри и иноды. Так что buff/cache в free не сильно изменились. Попробуйте slabtop, если вам когда-нибудь понадобится детально разобраться в объектах ядра.

Один доступный ГБ из 32 — это не так уж много с точки зрения планирования емкости. Рассмотрите возможность уменьшения количества гостей на хост виртуальной машины или увеличения физической памяти.

Не используйте /proc/sys/vm/drop_caches, так как это может повредить производительности из-за работы по удалению кэшей и повторному считыванию данных с диска. Это для тестирования производительности холодного хранилища, когда людям лень перезагружать хост.

Говоря о перезагрузках, программы не должны утекать память, чтобы доступная память медленно уменьшалась. Хосты виртуальных машин и гости внутри них, вероятно, выполняют тысячи задач, некоторые из которых остаются запущенными и сохраняют различные распределения памяти. Вам следует перезагружать систему каждые несколько месяцев для обновлений программного обеспечения, поэтому, пока «утечка» медленная, возможно, не стоит проводить подробное расследование.

Улучшите мониторинг своей памяти, обратив также внимание наинформация о срыве давления. Метрика, которая меня действительно волнует, — это зависание задач из-за нехватки памяти, и PSI отслеживает это.

Связанный контент