cpu过高如何定位?
方法一:
- 首先找到进程ip
top
- 根据进程id找到进程内占用过高的线程
top -H -p [pid]
- 线程id转换成16进制
因为jstack输出的线程id是16进制
printf "%x" 10
- jstack找到对应的线程信息
jstack [pid] |grep [tid的16进制数] -A 30
方法二:
arthas工具查看实时占用cpu的情况,命令为“dashboard -i 1000 >> /root/cpu.txt”
内存过高如何定位?
- 打印出内存堆栈
jmap -dump:live,format=b,file=<filepath>, <pid>
- 一般利用可视化工具进行分析
死锁问题如何定位?
接口响应时间过长
- 数据库问题
数据库数据量较大
深度分页
索引问题
join过度使用 - 特务代码
循环调用
代码逻辑冗余 - jvm、线程池原因
线程池过多或者过少
jvm参数不合理 - 机器问题
磁盘io、cpu性能差,内存较少