当我们收到监控发出的报警时: (邮件 / 微信 / 电话 ), 被告知某台机器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

从截图中,可以看到指示的ArthasDemo.java的代码执行情况
jstat 看gc情况
jstat -gc 70891 3000 > /tmp/gclog.log

从截图中,可以看出ygc的频率较高,fgc的耗时变长
dump分析 / code review / curl / remote debug -> fixme
根据vm配置中目录,将文件导入工具分析即可

文件上传下载 推荐使用lrzsz,常见linux系统都可以安装,以centos为例
$ sudo yum install lrzsz
$ sz xxx,从服务器下载文件
$ rz,在服务器执行会打开文件选择窗口,选定文件即可自动上传
注意,lrzsz依赖的是ZModem,windows环境下的xshell天然支持该模式进行文件上下传,mac需要自行调教(iterm2可行),linux的终端大多数包含该功能
dump分析 visualvm


结合jstat 和 gc log ,我们可以查看cpu和堆dump,查看占用情况.
GC分析 gceasy.io
我们可以使用客户端工具或者在线的分析,这里举例:gceasy.io,将下载的gc log上传后,即可生成在线的report,按需查看即可



网友评论