JVM 内存分析 常用Linux命令
top命令,P:CPU排序,M:内存排序
查询项目进程ID
ps -ef | grep target
[lhadmin@BJTVMYTEAM-2 logs]$ jstack 13359 13359: well-known file /tmp/.java_pid13359 is not secure: file should be owned by the current user (which is 1001) but is owned by 1002 [lhadmin@BJTVMYTEAM-2 logs]$ sudo -i [root@BJTVMYTEAM-2 ~]# jstack 13359 13359: well-known file /tmp/.java_pid13359 is not secure: file should be owned by the current user (which is 0) but is owned by 1002 [root@BJTVMYTEAM-2 ~]# sudo -u appuser jstack 13359
导出线程堆栈信息到文件中/tmp/20210329test.txt,并下载
[root@BJTVMYTEAM-2 tmp]#sudo -u appuser jstack 13359 >/tmp/20210329test.txt [root@BJTVMYTEAM-2 tmp]# ll | grep test -rw-r--r-- 1 root root 72151 Mar 29 19:02 20210329test.txt [root@BJTVMYTEAM-2 tmp]# sz 20210329test.txt
使用IBM Java线程和监视器转储分析器(TMDA)进行线程分析
下载地址:https://public.dhe.ibm.com/software/websphere/appserv/support/tools/jca/jca469.jar
在IBM Thread and Monitor Dump Analyzer for Java工具中,请求线程可分为以下几种状态:
1.死锁,Deadlock(重点关注)
2.执行中,Runnable(重点关注)
3.等待资源,Waiting on condition(重点关注)
4.等待监控器检查资源,Waiting on monitor
5.暂停,Suspended
6.对象等待中,Object.wait()
7.阻塞,Blocked(重点关注)
8.停止,Parked
Deadlock:死锁线程:一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。
Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递SQL到数据
库执行,有可能在对某个文件操作,有可能进行数据类型等转换。
Waiting on condition:等待资源,如果堆栈信息明确是应用代码,则证明该线程正在等待资源,一般是大
量读取某资源,且该资源采用了资源锁的情况下,线程进入等待状态,等待资源的读取。又或者,
正在等待其他线程的执行等。
Blocked:线程阻塞,是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管
查看堆内存中对象信息
sudo -u appuser jmap -histo 13359 | head -n20