问题现象
NC登录一直在转圈,最短需要30多分钟才能进去。
问题分析
通过nmc查看,发现线程被锁住
生成javacore分析,kill -3 <pid>失效。 所以用jstack -l <pid> 生成线程信息分析。
可以发现大部分线程都被0x00000000d013be30 锁住了
找到具体线程,发现为线程Thread-64
通过工具分析
Thread-64 一直有堆栈比较异常
at sun.security.provider.NativePRNG$RandomIO.access$300(NativePRNG.java:125)
at sun.security.provider.NativePRNG.engineGenerateSeed(NativePRNG.java:119)
通过查验资料发现为jdk的一个bug。
解决办法
Linux操作系统下SUNJDK1.7051有BUG,使用SUNJDK时需做如下修改:
修改文件$JAVA_HOME/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
替换为
securerandom.source=file:/dev/./urandom
重启整个中间件,最终登录时间从30min优化到2s。