记一次openJDK下使用arthas排查问题

记一次openJDK下使用arthas排查问题

亦涵
2022-08-22 / 0 评论 / 665 阅读 / 正在检测是否收录...

快速安装arthas

curl -O https://alibaba.github.io/arthas/arthas-boot.jar

今天想把java的一个jar包放到linux上运行
把jar包上传上去后发现

-bash: java: command not found

找不到java命令?
看来linux上jdk有问题
1、检查一下是否安装了jdk,看来还没有安装jdk
2、下载java jdk,单独使用该java jdk 运行arthas(推荐)

下载上传到linux主机

把下载的jdk解压放在usr/webapp/目录下,建议创建jdk8安装目录

tar -zxvf jdk-8u152-linux-x64.tar.gz -C /home/webapp

编辑配置文件,配置环境变量

vim /etc/profile

在最后一行添加以下内容

export JAVA_HOME=(安装jdk的目录,可以先去该目录下使用 pwd 命令查看)

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

b5fadfb524855c7034324cda993cf14.jpg
刷新配置文件

source /etc/profile

将jdk下的bin目录下的文件设置成可执行文件

chmod -Rf  777   /home/webapp/jdk1.8.0_152/bin

最后检查JDK安装是否成功

java -version

启动Jar包

nohup java -jar demo-0.0.1-SNAPSHOT.jar &

查看java应用的pid

ps -ef |grep java

a84692ca4483743c252983b99115eff.jpg
arthas监控java进程
命令:java -jar arthas-boot.jar <pid>

java -jar arthas-boot.jar 12792

97cf7f7d158d464f93813e08e6a5f81.jpg

用arthas解决常见问题

内存泄漏
这个我们可以用dashboard命令来动态查看内存情况,ctrl+c可以停止刷新
常用命令
首先是我认为的“上帝视角”指令:Dashboard
通过这些,你可以对于整个程序进程有个直观的数据监控。
af4c5ada52be41ffa3e6fedc94ad36d9.png
c4806d4092fa0eb919857b2bbb6fd5d.jpg
如果内存使用率在不断上升,而且gc后也不下降,后面还发现gc越来越频繁,很可能就是内存泄漏了。

heapdump --live G:/jvm.hprof

这个时候我们可以直接用heapdump命令把内存快照dump出来,作用和jmap工具一样

然后把得到的dump文件导入eclipse,用MAT插件分析就行了。
所以这里介绍一个MAT的独立工具,它是独立于eclipse的应用,下载地址是https://www.eclipse.org/mat/downloads.php,可以根据自己的系统选择版本。

查看线程命令:thread

用thread命令列出线程信息
这个命令会把所有现成按照cpu占用率从高到低列出来,如果线程过多就用-n参数
查看最忙的n个线程
thread -n 3
然后再通过thread id输出该线程的栈信息
Arthas 有如下功能:
8700c33af13046149e46c16ff3aa022e.png

1

评论 (0)

取消