基于场景的JVM调优

现象一: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方式等减少停顿时间。

猜你喜欢

转载自blog.csdn.net/weixin_40990818/article/details/107151885
今日推荐