比较难查找的死循环(java)
程序员文章站
2022-03-07 08:13:53
...
项目的开发人员找到我说游戏挂掉了。
症状:1、客户端能跟服务器创建连接,但是服务器对收到的消息不进行业务逻辑处理
2、cpu和内存均正常。
本能的觉得出现了死锁。于是jstack查看堆栈信息,没发现死锁。
查看线程状态
于是挨个查看线程信息
发现很多线程都
于是找到问题,原来是在一个死循环中调用了sleep,所以虽然有死循环,但是系统资源占用也不高。
线程状态解释
http://doc.java.sun.com/DocWeb/api/java.lang.Thread.State?lang=en&mode=Read
症状:1、客户端能跟服务器创建连接,但是服务器对收到的消息不进行业务逻辑处理
2、cpu和内存均正常。
本能的觉得出现了死锁。于是jstack查看堆栈信息,没发现死锁。
查看线程状态
# grep "java.lang.Thread.State" 12432.txt | sort | uniq -c 22 java.lang.Thread.State: RUNNABLE 16 java.lang.Thread.State: TIMED_WAITING (on object monitor) 40 java.lang.Thread.State: TIMED_WAITING (parking) 158 java.lang.Thread.State: TIMED_WAITING (sleeping) 2 java.lang.Thread.State: WAITING (on object monitor) 114 java.lang.Thread.State: WAITING (parking)
于是挨个查看线程信息
grep "TIMED_WAITING (sleeping)" 12432.txt -B 1 | grep -v TIMED_WAITING | sort | uniq -c
发现很多线程都
java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method)
于是找到问题,原来是在一个死循环中调用了sleep,所以虽然有死循环,但是系统资源占用也不高。
线程状态解释
http://doc.java.sun.com/DocWeb/api/java.lang.Thread.State?lang=en&mode=Read