Полный сборщик мусора не выполняется (не хватает памяти) - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть 2 веб-сервера (4 ядра / 16 ГБ ОЗУ / Cent OS 7) за балансировщиком нагрузки с использованием алгоритма циклического перебора.

Приложения создаются с Java using Apache/Tomcat.

серверами, Apache, Tomcat и Webapps имеют одинаковую конфигурацию с heap size : -Xms12840m -Xmx12840m

Проблема в том, что 1-му серверу не хватает памяти.Ядро убивает процесс Java из-за нехватки памяти.Хотя второй сервер более стабилен.

Я пытался отслеживать и анализировать память дампа кучи с помощью VisualVM, а также GC с jstat.

О памяти дампа кучи я не нашеллюбая утечка памяти, которая не означает, что нет.Но с VisualJM / Monitor я могу наблюдать, что Full GC выполняется на 2-м сервере, когда старое поколение заполнено.Что не так на 1-м сервере.Фактически, кажется, что первый сервер постоянно более загружен, чем второй, несмотря на алгоритм циклического перебора, используемый балансировщиком нагрузки.Итак, на 1-м сервере кажется, что JVM не успевает перейти к полному сборщику мусора до нехватки памяти.

По умолчанию соотношение между молодым и старым поколением составляет 1: 2 * 1016.*

Незначительные GC на молодое поколение в порядке, когда Eden, если заполнен незначительный GC делается.Но когда рост старого поколения приближается к 100%, Full GC не появляется.

Итак, как я могу оптимизировать GC, чтобы избежать нехватки памяти?Почему полный сборщик мусора не выполняется на сервере 1?Это из-за пика запросов на сервере, а затем JVM не может выполнить полный GC вовремя?

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

...