Linux环境使用Java分析工具

522 阅读2分钟

Linux环境使用Java分析工具

1.安装:

很多Linux环境服务器上只部署了jre运行环境,而没有JDK,这种情况要下载解压jdk到服务器上。

注意安装的JDK要与JRE版本一致。安装后最好重新配置环境变量

top -Hp 线程号

vi /etc/profile

export JAVA_HOME=/root/java/jdk1.8.0_272
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

jvm命令

Jinfo

查看jvm信息

修改jvm配置

jps

获取Java线程

jps -l -m

jstat

查看GC情况

jstat -gcutil 16361 1000

jstack

查看线程情况

jstack -F 24357

Jmap

查看内存情况

jmap -heap 27196

获取dump信息

jmap -F -dump:format=b,file=dump.hprof 27196

查看内存中的对象

 jmap -histo:live 21711 | more 

Jhat

配合jmap分析dump信息

jhat -port 9998 /tmp/dump.dat

常见问题及解决

尝试使用jinfo命令(21278是Java的进程号,可以使用ps命令找到)

这里报错是由于jdk和jre版本不一致,重新更换为一致的版本

2.jinfo,更换后重新执行

执行成功,可以看到Java进程的版本等信息

3.jstack

首先使用jps获取进程号:

可以配合top命令查看具体占用CPU高的任务pid

然后转换为16进制数:

printf '%x\n' 27196
6a3c

执行jstack

jMap

使用jmap获取dump日志

这种报错为找不到文件,需要注意需要使用进程所在的用户执行jmap命令,这里也就是27196

image-20201130212319159

更换命令,再次执行:

报错为找不到类库,尝试切换用户执行,报错su: /bin/ksh: No such file or directory (45946),修改该用户的kbash为bash即可。

sudo vipw

为用户赋权:

修改 /etc/sudoers 文件,找到下面一行,把前面的注释(#)去掉 
## Allows people in group wheel to run all commands 
%wheel    ALL=(ALL)    ALL 然后修改用户,使其属于root组(wheel),命令如下:
#usermod -g root work
使用chownchmod修改文件夹权限

执行命令报错:

修改 /etc/passwd 文件中,用户的执行命令为bash

监控报错:

注意需要使用启动服务的用户去启动arthas

su esdkuser

runuser -l esdkuser -c 'java -jar /root/arthas/arthas-boot.jar'

修改 /etc/sudoers 文件,找到下面一行,把前面的注释(#)去掉

## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL

然后修改用户,使其属于root组(wheel),命令如下:

#usermod -g root tommy

修改完毕,现在可以用tommy帐号登录,然后用命令 su – ,即可获得root权限进行操作。

t op 查看占用高的线程

top -Hp 123 查看具体线程