java程序CPU占用过高(100%)解决思路和解决方案

2023-10-25 18:53:31 浏览数 (1)

找到占用CPU最高的进程

代码语言:javascript复制
top  //查询进程 

找到进程对应线程

代码语言:javascript复制
top -Hp  14327 //pid(进程)

打印堆栈信息

代码语言:javascript复制
printf '%xn' 14328 //获取线程的16进制
代码语言:javascript复制
jstack 14327(进程号,不是线程id) | grep  37f8  //堆栈线程是16进制,直接过滤需要的线程

直接定位到代码所在的类,以及行号,再去分析代码

常用排查问题命令

查看内存结构,如新生代,老年代,持久代等

代码语言:javascript复制
jmap -heap 14327

导出java堆的快照,可以用Jconsole等工具分析的日志

代码语言:javascript复制
jmap -dump:format=b,file=./heap.hprof  14327 

资源和性能进行实时命令行监控,堆大小和垃圾回收

代码语言:javascript复制
jstat -gcutil 14327 10000 3  每个10000毫秒打印一次,打印3次 堆大小情况,垃圾回收

环境变量和虚拟机参数

代码语言:javascript复制
jinfo 14327  

其他命令

  • jps,用于查找java进程,通常使用ps命令代替
  • jhat,用于分析内存堆的快照文件
  • javah,生产java类中本地方法的C头文件,一般用于开发JNI库
  • jdb,远程调式,用于线上定位问题
  • 图形界面工具常用于Jconsole,JMAT,JProfiler,JvisualVM

0 人点赞