【发布时间】:2011-03-23 16:48:09
【问题描述】:
我们的服务器应用程序在某些客户中遇到了极其缓慢的问题。缓慢通过服务器重新启动解决,但它会在几周后恢复。
Java CPU 始终在 100% 左右(超出 200%),所有其他参数都很好。研究表明,大部分 CPU 被“HandshakeCompletedNotify-Thread”线程消耗。从 tcp dump 我们看到 SSL 握手需要 2-8 秒,时间很长,有时会抛出超时。
我们的 SSL 提供商是 BSAFE。服务器在 Linux(CentOS)、640 mb 堆、2 个内核上运行。 Hibernate、spring都用,Oracle本地db
出现这种行为的原因可能是什么?可以做些什么来找出它们?
附:我们无法将客户的流量切换到 HTTP。
更新:当java进程的传出连接被IP表阻塞时,系统完全释放。在这种情况下释放了哪些资源? 我们看到 SSL 握手经常卡在“更改密码规范”阶段。客户端(我的 java 进程)尝试重用 SSL 会话,但服务器完全无状态,每次都会生成新会话。
【问题讨论】:
-
您是否使用 jvisualvm 之类的工具对应用程序进行了概要分析?
-
向我们的客户(大型银行或公司)解释我们想要对他们进行分析有点困难,但我们朝着这个方向努力。我们通常使用 Yourkit 进行分析。 jvisualvm 比 Yourkit 好吗?
-
您有可以分析的测试系统吗?
-
不幸的是我没有。没有在QA中复制,但是有很多客户的抱怨
标签: java performance security ssl