线上cpu 内存占用高的排查

cpu占用高

1.查看进程

top 查看资源占用情况   (交互 M P分别是按照内存和cpu排序  q退出) 

top详解

  1. 查找线程 : 查看该进程所有线程信息,找到占用率最高的那个
top -H -p  

或者

ps -mp  -o THREAD,tid,time
  1. 将线程id转换成十六进制
 printf "%x\n" 
  1. 查找java的堆栈信息
jstack  | grep -a 线程id(十六进制)

内存占用高

 jstat:JVM统计监测工具
  1. jstat命令可以查看堆内存各部分的使用量,以及加载类的数量
    • 命令的格式如下:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] jstat详情参考

-gcutil : 总结垃圾回收统计

 [~]$ jstat -gcutil  
 S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
62.12   0.00  81.36  28.82  95.68    -     12    0.736     0    0.000    0.736
image
  1. 查看进程的堆栈情况
jstack  >>jstack.out

或者使用 jmap(Memory Map) 查看内存情况 , 如果运行在64位JVM上,可能需要指定-J-d64命令选项参数。

1.查看进程堆内存使用情况

jmap -heap 

2.查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象

jmap -histo[:live] 

3.用jmap把进程内存使用情况dump到文件中,再用jhat分析查看

jmap -dump:format=b,file= 

具体可查阅这个文章 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解

jps 主要用来输出JVM中运行的进程状态信息

visual vm使用

你可能感兴趣的:(线上cpu 内存占用高的排查)