项目的开发人员找到我说游戏挂掉了。
症状: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
分享到:
相关推荐
Java HashMap的死循环原因分析 HashMap是Java中一种常用的数据结构,它提供了快速的查找、插入和删除操作。然而,在多线程环境中使用HashMap可能会导致死循环的问题。下面我们来分析HashMap的死循环原因。 首先,...
while(low){ if(x==arr[mid]){ return mid; } else if(mid>0&&x[mid]){... else if(mid){//若前面没有判断,则当要查找数超过arr数组中最大值时出现死循环。 low=mid+1; mid=(low+high)/2; }
- 如果发现有死循环或者无限递归的情况,需要尽快修改代码逻辑; - 对于频繁调用的方法,可以考虑使用缓存机制减少重复计算; - 如果是由于锁竞争导致的问题,则需要调整锁策略或者使用更高效的并发控制机制。 #...
此时,线程B在链表中循环查找,可能永远找不到自己的位置,从而陷入死循环。 为了避免这种情况,Java文档建议在多线程环境下使用ConcurrentHashMap,它是线程安全的,能够保证并发访问的正确性。ConcurrentHashMap...
- 可以使用循环结构配合`tasklist`命令来查找并终止多个相同名称的进程。 - 示例代码: ```java String[] cmd = {"cmd.exe", "/C", "tasklist | findstr java-test.exe"}; Process p = Runtime.getRuntime()....
在while循环中,需要注意的是循环体至少需要有一个可以改变条件表达式取值的语句,否则可能导致无限循环,即所谓的“死循环”。例如,`while (1)`就是一个典型的死循环,因为条件始终为真,程序会无限制地执行循环体...
如果条件始终为真,那么就会形成一个无限循环,也称为死循环。 以下是一些while循环的实际应用案例: 4.1 谢添说“我爱你”100次的示例展示了如何使用循环来实现计数和输出。 4.2 打印1到100之间的所有数字,这...
本文将详细解析一个典型的线上问题:Java应用程序出现死循环导致CPU暴涨的过程及排查方法。 首先,问题的现象是打开一个特定页面时,CPU使用率瞬间飙升至100%,使得系统运行变得极其缓慢。在这种情况下,首要任务是...
在Java中,这涉及到变量的声明、数据类型(如整型、浮点型、字符型和布尔型)、运算符(算术、比较和逻辑)以及控制结构(如if语句、for循环和while循环)。例如,你可以声明一个整型变量`int num = 10;`,然后使用`...
Java HashMap的死循环是一个在多线程环境下容易出现的问题,主要由于其内部的迭代器实现方式和并发操作不当引起。本文将深入分析这个问题,并探讨如何避免这类错误。 首先,Java HashMap在非线程安全的环境下,如果...
HashMap是非线程安全的,而在多线程环境下可能会遇到并发问题,如死循环和数据不一致。 3. **hashMap、hashTable、treeMap的区别**:HashMap允许键为null且不保证顺序;HashTable不允许null键值,且线程安全,但...
- Java5引入了泛型和增强的for循环,使数组操作更加方便。 #### 三、面向对象(1) 1. **什么叫面向对象?** - 面向对象编程(OOP)是一种编程范式,通过使用“对象”来设计软件和实现其功能。 2. **类** - 类...
- **代码审查**:检查是否存在死循环、不必要的阻塞等待等代码问题。 6. **定期监控** - 设置定期获取Thread Dump,以便尽早发现并解决问题。 - 集成到监控系统中,当发现问题时,自动发送Thread Dump和相关信息...
在Java编程环境中,当遇到"Java程序CPU占用100%"的问题时,这通常意味着程序中存在性能瓶颈或者死循环,导致CPU资源被过度消耗。为了解决这个问题,我们需要进行一系列的诊断步骤来定位问题所在。以下是详细的排查...
在折半查找中,初始的边界设定不当导致了死循环,通过调试发现并修正了错误的边界更新语句。 总的来说,这个实验全面覆盖了Java编程的基础知识,从环境配置到代码编写、编译和运行,再到基本算法的实践,对于初学者...
7.8.2 查找,替换操作 287 7.8.3 同步控制 288 7.8.4 设置不可变集合 288 7.9 烦琐的接口:Enumeration 289 7.10 本章小结 290 本章练习 290 第8章 泛型 291 8.1 泛型入门 292 8.1.1 编译时不检查类型的异常...
- **解答**:这会导致链表结构被破坏,形成环状结构,从而可能造成死循环。 **习2.3:实验2.2由指定数组中的多个对象构造单链表** - **题目**:使用数组构建单链表。 - **解答**:遍历数组,依次创建节点,并链接...
`HashMap`是非线程安全的,意味着在多线程环境下,多个线程同时操作`HashMap`可能会导致数据不一致或者死循环。因此,如果需要在并发环境中使用,必须使用同步机制,如`synchronized`关键字或`Collections....