欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

比较难查找的死循环(java)

程序员文章站 2022-03-07 08:13:53
...
项目的开发人员找到我说游戏挂掉了。
症状: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