我们的服务器应用程序在某些客户端上非常缓慢。重启服务器可以解决这个问题,但几周后问题会再次出现。
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。
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。