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

死锁问题如何定位?

接口响应时间过长

  • 数据库问题
    数据库数据量较大
    深度分页
    索引问题
    join过度使用
  • 特务代码
    循环调用
    代码逻辑冗余
  • jvm、线程池原因
    线程池过多或者过少
    jvm参数不合理
  • 机器问题
    磁盘io、cpu性能差,内存较少
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容