现象一:CPU瞬间被占满
第一步: top -c 查看当前占用CPU比较高的进程
top指令的参数
- d:指定更新的间隔,以秒计算。
- q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
- c:显示进程完整的路径与名称。
- S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
- s:安全模式。
- i:不显示任何闲置(Idle)或无用(Zombie)的行程。
- n:显示更新的次数,完成后将会退出top。
第二步: top -Hp 进程号 获取该进程下,线程的占用的情况
这里的pid是10进制的,我们需要获取其16进制的
进制转换:7390 ——>1cde
第三步:jstack 导出进程快照
#在当前路径下导出进程快照
jstack -l 7390 > ./7390.stack
#获取占用线程比较高的线程的相关输出
cat 7390.stack |grep '1cde' -C 8
现象二:内存溢出(OOM)
通常对dump文件(进程的内存镜像)进行分析
获取dump文件的方式:
1.添加jar启动参数
-XX:+HeapDumpOnOutOfMemoryError(程序内存溢出自动转存dump)
-XX:HeapDumpPath=D:\sso\dump(转成dump文件路径)
2.使用jmap获取,如获取 32652的dump
jmap -dump:format=b,file=./32652.hprof 32652
3.使用专门的工具对dump文件进行分析
现象三:系统卡顿
jstat -gcutil 7378
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 2.66 77.68 91.77 91.59 82.62 949 6.188 288438 11884.693 11890.880
FGC:full gc的次数
FGCT:full gc的总时长
如果单次Full GC过长,可以通过修改提高新生代和老生代的比例、选择合适的GC方式等减少停顿时间。