使用TLSv1.2运行tomcat时的GC问题

时间:2018-02-16 23:08:27

标签: java performance tomcat ssl garbage-collection

当我们在启用ssl的情况下运行它时,我们一直面临着tomcat7 / java8的性能问题。

我们看到频繁出现长时间的全GC并且我们观察到的另一个奇怪的行为是 - 第一个完整的GC无法从旧的收集很多,但在第二次后续运行中它收集了大量的垃圾,因为第一个完整GC无效,第二个在几分钟内触发。

  

2018-02-09T13:16:24.333-0800:4230.908:[全GC(人机工程学)[PSYoungGen:95848K-> 0K(1993216K)] [ParOldGen:6291073K-> 5837813K(6291456K)] 6386922K-&GT ; 5837813K(8284672K),[Metaspace:33316K-> 33313K(1079296K)],6.9081824 secs] [次:用户= 30.68 sys = 0.33,real = 6.91 secs]

     

2018-02-09T13:21:02.067-0800:4508.643:[全GC(人机工程学)[PSYoungGen:91268K-> 0K(2000384K)] [ParOldGen:6288350K-> 1355941K(6291456K)] 6379619K-&GT ; 1355941K(8291840K),[Metaspace:33313K-> 33225K(1079296K)],2.1279458 secs] [次:用户= 13.88 sys = 0.08,real = 2.12 secs]

     

2018-02-09T14:13:36.719-0800:7663.294:[全GC(人机工程学)[PSYoungGen:85011K-> 0K(2004480K)] [ParOldGen:6288173K-> 5361047K(6291456K)] 6373184K-&GT ; 5361047K(8295936K),[Metaspace:33251K-> 33251K(1079296K)],4.8433826 secs] [次:用户= 21.24 sys = 0.07,real = 4.84 secs]

     

2018-02-09T14:23:47.153-0800:8273.729:[全GC(人机工程学)[PSYoungGen:89494K-> 0K(1998336K)] [ParOldGen:6288199K-> 1789523K(6291456K)] 6377694K-&GT ; 1789523K(8289792K),[Metaspace:33271K-> 33271K(1079296K)],2.2011957 secs] [次:用户= 13.46 sys = 0.06,real = 2.20 secs]

     

2018-02-09T15:09:56.091-0800:11042.666:[全GC(人机工程学)[PSYoungGen:87639K-> 0K(1998848K)] [ParOldGen:6287278K-> 4822169K(6291456K)] 6374918K-&GT ; 4822169K(8290304K),[Metaspace:33285K-> 33285K(1079296K)],4.4801296 secs] [次:用户= 20.02 sys = 0.08,real = 4.48 secs]

     

2018-02-09T15:25:38.142-0800:11984.718:[全GC(人机工程学)[PSYoungGen:84340K-> 0K(1997824K)] [ParOldGen:6288212K-> 2259748K(6291456K)] 6372552K-&GT ; 2259748K(8289280K),[Metaspace:33304K-> 33304K(1079296K)],2.5007909 secs] [次:用户= 14.17 sys = 0.06,real = 2.50 secs]

在查看堆转储时,我们看到大多数最大的堆消费者byte[]sun.security包中都有一个直接支配者。

我们还有sessionCacheSize="1000"sessionTimeout="1",但sun.security.ssl.SSLSessionImpl的实例远远超过1K,如果我查看他们的lastUsedTime,那么应该有很多实例在上一次完整GC中收集的垃圾。我们运行缓存大小和超时的原因是因为我们的客户端为每个请求使用新的https请求。以下是我们的连接器设置:

  

     

    

connectionTimeout = “3600”     执行人= “tomcatThreadPool”     maxKeepAliveRequests =“15”maxHttpHeaderSize =“8192”     sslEnabledProtocols = “TLSv1.2工作”     port =“$ {nio.https.port}”sessionCacheSize =“1000”sessionTimeout =“1”     协议= “org.apache.coyote.http11.Http11Protocol”     scheme =“https”secure =“true”SSLEnabled =“true”     keystoreFile =“$ {user.home} /.keystore”keystorePass =“”     clientAuth =“false”sslProtocol =“TLS”redirectPort =“$ {nio.https.port}”/>

  

我应该为短期会话对象更新一些其他连接器设置吗?

感谢您的帮助!

0 个答案:

没有答案