卡死原因推测
初步推测应当出现了资源竞争,线程得不到资源遂无法继续进行
关注点在于,新线程需要什么资源,以及占了资源而不释放的线程
通过jdk自带jstack命令查看
jstack可以打印指定java进程的线程的栈轨迹
jstack -l 15664 > jstack.log
发现较多http请求的线程处于waiting状态,获取redis资源导致的问题,发现是redis关闭不完善导致
"http-nio-8080-exec-84" #196 daemon prio=5 os_prio=0 tid=0x00007ff394e7e800 nid=0x22e5 waiting on condition [0x00007ff36b213000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000008a5fec58> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:583)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:442)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
at redis.clients.util.Pool.getResource(Pool.java:49)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
其它
linux下临时配置环境变量
export JAVA_HOME=/usr/share/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar