1.cpu突然升高:
命令行排查:
top 查到各个进程使用cpu的情况
top -Hp 11345(java进程号码):输出java进程的各个线程的使用cpu情况
找到占用cpu最高的几个线程 ,记录下线程号并转换为16进制
执行命令 jstack 11345(java进程号)| grep 0x35bc(前面记录的线程号的16进制数)
找到可疑的线程栈进行排查
工具排查:
arthas安装(待学习)
2.GC频繁
dump文件的导出,VisualVM分析堆上对象的占用情况
可能的原因:
1.survivor区太小导致对象过早进入老年代
2.有大对象的分配直接进入老年代
3.有大量对象滞留在老年代一直无法回收
3.线程池异常排查:
死锁必要条件:
1. 互斥条件:一个资源每次只能被一个进程使用。
2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3. 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
4 线程状态:
新建(New)
运行(Runnable)Running和Ready
无限等待(Waiting):Object.wait(); Thread.join();LockSupport.park()
限期等待(Time Waiting):sleep(时间);wait(时间);Thread.join(时间);LockSupport.parkNanos();LockSupport.parkUntil();
阻塞(Blocked):等待获取排他锁
结束(Dead):线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期