虚拟机相关
CPU飙高
jstack配合top命令分析CPU飙高、程序死锁问题
- 现象
通过监控预警发现机器的CPU使用率居高不下
- 定位步骤
- 先查找出cpu使用率很高的线程
- top:查找当前cpu使用率较高的进程,得到进程id(PID)
- top -Hp 查找当前进程下,cpu使用较高的线程,得到线程id
- 或者使用jps,可以直接查看java的进程id
- jstack:打印线程快照
jstack
- jstat:虚拟机各种运行状态信息
线程长时间停顿
平时碰到系统CPU飙高和频繁GC,你会怎么排查?
- 死锁
- 死循环
- 请求外部资源导致等待
频繁fullgc
- gc触发的时机
- minor gc:
- 空间(eden+1 survivor)不足
- full gc:
- 老年代空间不足
- 配置不合理
- 内存泄露:JAVA内存泄露的原因及解决
- 手动执行System.gc(),建议系统执行gc,但可能不会立刻执行
- 执行了jmap -histo:live pid命令,这个会立即触发fullgc
- minor gc引发
- meta space空间不足
- 使用CMS垃圾收集器产生的问题和解决方案
高并发相关
线程池
存储相关
数据库连接池不够
慢SQL
Limit 20000问题
死锁问题