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
更换命令,再次执行:
报错为找不到类库,尝试切换用户执行,报错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
使用chown和chmod修改文件夹权限
执行命令报错:
修改 /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 查看具体线程