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

项目的开发人员找到我说游戏挂掉了。
症状: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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值