Сваливается куча JVM, что приводит к тому, что GC теряет популярность - Tomcat
Информация:
Количество виртуальных машин = 4, каждая с экземпляром Tomcat 8.5.* в кластерных приложениях = 5 военных приложений - 2 приложения пользовательского интерфейса и 3 веб-сервиса. Версия Java = java 1.8.* Configuratin = 2 LTMS и 2 веб-сервера Apache - 1 LTM поверх кластеров tomcat, которые обрабатывают запросы веб-служб (200 КБ + день в будние дни). Другой LTM поверх Webserver, который также находится сверху на экземплярах Tomcat, который обрабатывает запросы приложений UI (10K+ запросов в день). Параметры JVM: все по умолчанию с -Xms3072m -Xmx3072
Конфигурация Tomcat:
Connector port="xxxx"
protocol="HTTP/1.1"
connectionTimeout="3000"
enableLookups="false"
redirectPort="yyyy"
maxThreads="80"
Connector port="yyyy"
protocol="org.apache.coyote.http11.Http11NioProtocol"
redirectPort="yyyy"
secure="true"
scheme="https"
clientAuth="false"
sslProtocol="TLS"
sslEnabledProtocols="SSLv2Hello,TLSv1,TLSv1.1,TLSv1.2"
SSLEnabled="true"
maxThreads="70"
maxKeepAliveRequests="100"
keepAliveTimeout="5000"
connectionTimeout="10000"
keystoreFile="....."
keyPass="..."
keystorePass="..."
keyAlias="....."
truststoreFile="..."
truststorePass="..."
ciphers="......."
Connector port="zzzz"
scheme="https"
protocol="AJP/1.3"
redirectPort="yyyy"
Проблема: нам приходится перерабатывать кота один раз в неделю, и мы делаем это в выходные дни. Если не утилизировать, на 7-й или 8-й день безотказной работы незначительное время GC возрастает до 5 - 30 секунд, если его еще не перезапустить, то всякий раз, когда происходит основной GC, требуется по меньшей мере минута, вызывающая несколько неудачных транзакций. На проверке статуса виртуальной машины на всех 4 узлах, в течение этого времени мы видим, что происходит много перестановок. Использование памяти менее 55% за все время, также загрузка процессора ниже 25%. Удивительно, но это происходит в выходные дни, когда практически нет нагрузки. Мы никогда не видели никаких ошибок OOM, пока кажется, что настройка кучи не является проблемой (я могу ошибаться). У нас также есть такая же конфигурация в среде производственного моделирования, где нагрузка не так велика, как у производственных серверов, и в этой среде таких проблем с подкачкой / сборкой мусора нет. Любое понимание или любой совет по этому вопросу было бы очень полезно. Пожалуйста, дайте мне знать, если нужна какая-либо другая информация.
1 ответ
Перестановка происходит из-за неактивных страниц памяти, объектов, которые некоторое время не используются, но не подлежат GC, попробуйте уменьшить системную подкачку до 10%.
Также проверьте использование кэша кода перед повторным использованием tomcat, это может привести к замедлению со временем.
Попробуйте изменить GC на g1gc и проверьте, что он должен иметь меньше пауз STW.