信息:

信息:

信息:

VM 数量= 4,每个集群中都有一个 Tomcat 8.5.* 实例。应用程序 = 5 个 war 应用程序 - 2 个 UI 应用程序和 3 个 Web 服务。Java 版本 = java 1.8.* 配置 = 2 个 LTMS 和 2 个 Apache Web 服务器 - 1 个 LTM 位于 tomcat 集群之上,用于处理 Web 服务请求(工作日每天 200K+)。另一个 LTM 位于 Web 服务器之上,该服务器也位于 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"     

问题:我们每周必须回收一次 tomcat,而且是在周末进行。如果不回收,在正常运行的第 7 天或第 8 天,次要 GC 时间会延长到 5 秒到 30 秒,如果仍未重新启动,则每当发生主要 GC 时,至少需要一分钟的时间,从而导致多个事务失败。检查所有 4 个节点上的 VM 状态时,在此期间,我们看到发生了很多交换。内存利用率始终低于 55%,CPU 利用率也低于 25%。令人惊讶的是,这种情况发生在周末,当时几乎没有负载。我们从未见过任何 OOM 错误,到目前为止,堆调整似乎不是问题(我可能错了)。我们在生产模拟环境中也有相同的配置,其中负载不如生产服务器那么多,并且在该环境中没有这样的交换/GC 问题。任何关于此的见解或建议都将非常有帮助。如果需要任何其他信息,请告诉我。

答案1

交换是由于不活动的内存页面、暂时未使用但不受 GC 影响的对象,请尝试将系统交换率降低到 10%。

在回收 tomcat 之前还要检查代码缓存的利用率,因为这可能会导致速度随着时间的推移而变慢。

尝试将 GC 更改为 g1gc 并检查,它应该具有更少的 STW 暂停。

相关内容