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

У меня есть 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 на уровне приложения, и обмен также был отключен. поэтому пренебрегая этими двумя моментами. Меня беспокоит один момент: доступная память меньше нуля, и мне нужны разъяснения.

Вопросы:

  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

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

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 выделило слишком много памяти для своих процессов. ... Это означает, что запущенные процессы требуют больше памяти, чем доступно физически.

Другие вопросы по тегам