Сваливается куча 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.

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