SSL握手问题

5
我们的服务器应用程序在某些客户端上非常缓慢。重启服务器可以解决这个问题,但几周后问题会再次出现。
Java CPU 总是在100%左右(共200%),其他参数都正常。研究表明,“HandshakeCompletedNotify-Thread”线程消耗了大部分CPU。从tcp dump中我们可以看到SSL握手需要2-8秒,这非常长,有时会超时。
我们的SSL提供商是BSAFE。服务器运行在Linux(CentOS)上,堆大小为640 MB,有两个核心。使用了Hibernate、Spring和Oracle本地数据库。
这种行为可能的原因是什么?如何找到它们?
更新:当阻止Java进程的出站连接时,系统完全释放。这种情况下会释放哪些资源?
我们发现SSL握手经常卡在“change Cipher Spec”阶段。客户端(我的Java进程)尝试重用SSL会话,但服务器是完全无状态的,每次都生成新会话。
P.S.我们不能将流量切换到HTTP。

你是否使用像jvisualvm这样的工具对应用程序进行了分析? - David Weiser
向我们的客户(大型银行或企业)解释我们想要对他们进行分析是有点困难的,但我们正在朝这个方向努力。我们通常使用Yourkit进行分析。jvisualvm比Yourkit更好吗? - Artiom Gourevitch
你有可以进行性能分析的测试系统吗? - David Weiser
很遗憾,我没有。它在质量保证测试中没有被复现,但是有很多客户投诉。 - Artiom Gourevitch
4个回答

3

这是一个已知的bug,在Sun推出6u10中的Next Generation Java插件时引入。Oracle最终在Java 7u2中修复了它,但至少在6u33中他们没有将其回溯到Java 6。

有关错误#7060523的详细信息,请单击此处


1

你可能想看一下针对 JBoss 报告的这个问题(不确定你是否在使用它)。该问题表明 HandshakeCompletedNotify-Thread 可能会抛出 ConcurrentModificationException,这是竞态条件的一个可能结果。其他结果包括代码陷入无限循环并占用 CPU,这听起来像是你的症状。如果你正在使用 JBoss 或与引起问题的库,请考虑升级它。这可能会解决你的问题。


症状看起来与您描述的相似,但我们使用的是Tomcat。 - Artiom Gourevitch

0

这可能是我们与分析一起执行的下一步。感谢提及 javax.net.debug 属性,它可能会很有用。 - Artiom Gourevitch

0
你分析过DNS查询吗?当DNS查询缓慢时,SSL握手可能需要更长的时间,因为它需要进行正向和反向查询以提高效率。

是的,我们已经考虑过这个问题了。DNS正常工作。谢谢。 - Artiom Gourevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接