Когда следует обновлять оперативную память на основе свободного вывода

Когда следует обновлять оперативную память на основе свободного вывода

У меня есть 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-killer

Из вышеперечисленного я не вижу никаких проблем OOM на уровне приложения, и своп также был отключен. так что пренебрегаем двумя пунктами. Один момент, который меня беспокоит, это доступная память меньше нуля, где мне нужно разъяснение

Вопросы:

  1. Если доступное значение близко к 0, приведет ли это к сбою системы?
  2. Означает ли это, что мне нужно обновить оперативную память, если доступной памяти становится меньше?
  3. На каком основании следует выделять/увеличивать объем оперативной памяти?
  4. Есть ли у нас какие-либо официальные рекомендации/руководства, которым необходимо следовать при распределении оперативной памяти?

решение1

Удалось получить ответ на один мой вопрос

Если доступное значение близко к 0, приведет ли это к сбою системы?

При тестировании на одном из моих серверов, где я загрузил память почти полностью, как показано ниже

sys> free -h
              total        used        free      shared  buff/cache   available
Mem:            11G         11G        135M         25M        187M         45M
Swap:            0B          0B          0B

Видно, что только мое приложение (которое потребляло больше памяти) было завершено функцией Out of memory killer, на которую можно сослаться в журналах ядра.

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

Out Of Memory Killer или OOM Killer — это процесс, который ядро ​​Linux использует, когда в системе критически мало памяти. Такая ситуация возникает из-за того, что ядро ​​Linux выделяет своим процессам избыточную память. ... Это означает, что работающие процессы требуют больше памяти, чем физически доступно.

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