1、常用命令
## 查看系统运行情况,找出进程id
top
## 打印全部堆栈信息到文件中,在文件中查看
jstack pid > jstack.log
## 导出整个进程堆栈日志
jmap -dump:format=b,file=dump.hprof pid
## 筛选处理时间比较久的线程
ps -mp pid -o THREAD,tid,time > thread.log
## 线程cpu消耗高的线程
top -Hp pid
jvm问题排查
## 1、第一步、top 用来查看资源情况和获取CPU资源
top
## 2、第二步、ps -mp pid -o THREAD,tid,time 用来筛选处理时间比较久的线程
ps -mp pid -o THREAD,tid,time
#### 导出到文件
ps -mp pid -o THREAD,tid,time > thread.log
## 3、第三步、jstack pid 根据第二步筛选出来的线程来定位程序中的代码片段
jstack pid
#### 导出到文件
jstack pid > jstack.log
## 4、第四步、导出整个进程堆栈日志针对内存泄露时,定位泄露的对象
jmap -dump:format=b,file=dump.hprof pid
CPU飙升问题排查
1、排查是否是GC造成的
# top查看pid
jstat -gc pid
2、找出线程cpu消耗高的线程
top -Hp pid
3、导出线程堆栈日志进行分析
jstack pid > jstack.log
其他命令
1、使用jstat -gcutil命令查看进程的内存情况
$ jstat -gcutil 14063 2000 10
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 100.00 99.99 26.31 42 21.917 218 1484.830 1506.747
0.00 0.00 100.00 99.99 26.31 42 21.917 218 1484.830 1506.747
0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484
0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484
0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484
0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484
0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484
0.00 0.00 100.00 99.99 26.31 42 21.917 220 1505.439 1527.355
0.00 0.00 100.00 99.99 26.31 42 21.917 220 1505.439 1527.355
0.00 0.00 100.00 99.99 26.31 42 21.917 220 1505.439 1527.355
从输出信息可以看出,Eden区内存占用100%,Old区内存占用99.99%,Full GC的次数高达220次,并且频繁Full GC,Full GC的持续时间也特别长,平均每次Full GC耗时6.8秒(1505.439/220)。根据这些信息,基本可以确定是程序代码上出现了问题,可能存在不合理创建对象的地方