Когда обновлять оперативную память на основе бесплатного вывода
У меня есть Java-приложение, которое работает на сервере Linux с физической памятью (ОЗУ), выделенной в размере 12 ГБ, где я вижу нормальное использование в течение определенного периода времени, как показано ниже.
sys> free -h
total used free shared buff/cache available
Mem: 11G 7.8G 1.6G 9.0M 2.2G 3.5G
Swap: 0B 0B 0B
Недавно, увеличив загрузку приложения, я увидел, что использование оперативной памяти почти полное, а доступного пространства очень мало, из-за чего я мог столкнуться с некоторой медлительностью, но приложение все равно продолжало работать нормально.
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 134M 17M 411M 240M
Swap: 0B 0B 0B
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 145M 25M 373M 204M
Swap: 0B 0B 0B
Я сослался на https://www.linuxatemyram.com/ , где предлагался пункт ниже.
Предупреждающие признаки действительной ситуации с нехваткой памяти, на которую вы можете обратить внимание:
- доступная память (или «свободная + буферы/кэш») близка к нулю
- Используемый своп увеличивается или колеблется.
- dmesg | grep oom-killer показывает убийцу OutOfMemory в работе
Судя по вышеизложенному, я не вижу никаких проблем с OOM на уровне приложения, и обмен также был отключен. поэтому пренебрегая этими двумя моментами. Меня беспокоит один момент: доступная память меньше нуля, и мне нужны разъяснения.
Вопросы:
- Если доступность близка к 0, приведет ли это к сбою системы?
- Означает ли это, что мне нужно обновить оперативную память, когда доступной памяти становится меньше?
- На каком основании следует выделять/увеличивать оперативную память?
- Есть ли у нас какие-либо официальные рекомендации/руководства, которым необходимо следовать при распределении оперативной памяти?
1 ответ
Возможность получить ответ на один мой вопрос
Если доступность близка к 0, приведет ли это к сбою системы?
При тестировании на одном из моих серверов, где я почти полностью загрузил память, как показано ниже.
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 135M 25M 187M 45M
Swap: 0B 0B 0B
Возможность видеть, что одно мое приложение (которое потребляло больше памяти) было убито убийцей нехватки памяти, о котором можно упомянуть в журналах ядра.
dmesg -e
[355623.918401] [21805] 553000 21805 69 21 2 0 0 rm
[355623.921381] Out of memory: Kill process 11465 (java) score 205 or sacrifice child
[355623.925379] Killed process 11465 (java), UID 553000, total-vm:6372028kB, anon-rss:2485580kB, file-rss:0kB, shmem-rss:0kB
https://www.kernel.org/doc/gorman/html/understand/understand016.html
Убийца нехватки памяти или OOM Killer — это процесс, который ядро Linux использует, когда в системе критически не хватает памяти. Эта ситуация возникает из-за того, что ядро Linux выделило слишком много памяти для своих процессов. ... Это означает, что запущенные процессы требуют больше памяти, чем доступно физически.