美文网首页
问题分析系列:cpu高之gc问题(htop - jstat -

问题分析系列:cpu高之gc问题(htop - jstat -

作者: 辛夷z | 来源:发表于2020-11-01 23:13 被阅读0次

当我们收到监控发出的报警时: (邮件 / 微信 / 电话 ), 被告知某台机器cpu使用过高,需要处理时
或者日常我们在dev环境,愉快的coding时,遇到此问题时

todo:

我们需要ssh到指定服务器,查看问题

思路是:

htop -> show-busy-java-threads -> jstat -> dump / gc 分析-> code review / curl & remote debug (fixme)

前置条件:

首先,javac & java 运行一段让cpu跑满的代码

vm参数:

java -Xms1g -Xmx2g -Xmn1g -XX:+HeapDumpBeforeFullGC -XX:HeapDumpPath=/tmp/dump -XX:+PrintGCDetails -Xloggc:/tmp/gc/demo_gc.log ArthasDemo

过程排查:

jps 看java 进程

jps -mlvV


image.png

取得pid: 70891

htop 看cpu mem 等参数

如果没有htop的,可以安装下

$ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ sudo dnf update
$ sudo dnf install htop

$ htop -p  70891
image.png

从图中,我们可以观察到,运行的java ArthasDemo进程70891, cpu会飙高,且内存占用大

我们可以通过pwdx查看进程路径: $ pwdx 70891,用来确认是什么服务
,比如xxweb

sh show-busy-java-threads

我们可以执行脚本,快速的排查下问题:

没有git的,可以安装下:sudo yum install git
感兴趣的,可以自行下载或者贡献脚本:https://github.com/oldratlee/useful-scripts/blob/dev-2.x/README.md
下载脚本:$ git clone git://github.com/oldratlee/useful-scripts.git
使用最新的release分支即可

$ sh show-busy-java-threads
image.png

从截图中,可以看到指示的ArthasDemo.java的代码执行情况

jstat 看gc情况

jstat -gc 70891 3000 > /tmp/gclog.log
image.png

从截图中,可以看出ygc的频率较高,fgc的耗时变长

dump分析 / code review / curl / remote debug -> fixme

根据vm配置中目录,将文件导入工具分析即可


image.png

文件上传下载 推荐使用lrzsz,常见linux系统都可以安装,以centos为例

$ sudo yum install lrzsz
$ sz xxx,从服务器下载文件
$ rz,在服务器执行会打开文件选择窗口,选定文件即可自动上传

注意,lrzsz依赖的是ZModem,windows环境下的xshell天然支持该模式进行文件上下传,mac需要自行调教(iterm2可行),linux的终端大多数包含该功能

dump分析 visualvm

image.png image.png

结合jstat 和 gc log ,我们可以查看cpu和堆dump,查看占用情况.

GC分析 gceasy.io

我们可以使用客户端工具或者在线的分析,这里举例:gceasy.io,将下载的gc log上传后,即可生成在线的report,按需查看即可


image.png
image.png
image.png

相关文章

网友评论

      本文标题:问题分析系列:cpu高之gc问题(htop - jstat -

      本文链接:https://www.haomeiwen.com/subject/tqaxvktx.html