java程序问题解决

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=, 
  • 一般利用可视化工具进行分析

死锁问题如何定位?

接口响应时间过长

  • 数据库问题
    数据库数据量较大
    深度分页
    索引问题
    join过度使用
  • 特务代码
    循环调用
    代码逻辑冗余
  • jvm、线程池原因
    线程池过多或者过少
    jvm参数不合理
  • 机器问题
    磁盘io、cpu性能差,内存较少

你可能感兴趣的:(java程序问题解决)