JVM性能优化

两种途径,
1是通过dump文件,使用MAT或者IBM工具ISA进行分析;
2是使用jstack实时的对CPU占有过高的进程、线程、定位到代码进行分析;
这里介绍第二种定位方法:

一、定位cpu占用过高的进程

可以采用 : 'top -c' 'shift + M'
或者 'ps -ef | grep java' 或者 'ps -ef|grep openApi'
e.g 此处进程id,pid为 106499

[root@xxx ~]<20201026 10:45:54># top -c
top - 10:54:29 up 780 days, 18:38,  4 users,  load average: 1.38, 1.57, 1.59
Tasks: 586 total,   1 running, 558 sleeping,  27 stopped,   0 zombie
%Cpu(s):  3.7 us, 14.1 sy,  0.0 ni, 82.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16383296 total,   279780 free, 12655688 used,  3447828 buff/cache
KiB Swap:  8388604 total,  6511080 free,  1877524 used.  3166868 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                    
106499 root      20   0 6245760 3.421g  14040 S  51.7 21.9   3964:19 java -D[Standalone] -server -verbose:gc -Xloggc:/opt/jbshome/appserver/x8601Server6/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:Nu+
 65365 root      20   0 4323820 2.237g  14488 S   2.6 14.3 151:22.01 java -D[Standalone] -server -verbose:gc -Xloggc:/opt/jbshome/appserver/x8601Server8/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:Nu+
 74910 root      20   0 4232904 1.585g   6028 S   0.0 10.1   1400:03 java -D[Standalone] -server -verbose:gc -Xloggc:/opt/jbshome/appserver/x8601Server3/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:Nu+
 81984 root      20   0 4073584 1.422g   6272 S   0.7  9.1   1448:09 java -D[Standalone] -server -verbose:gc -Xloggc:/opt/jbshome/appserver/x8601Server2/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:Nu+
 98211 root      20   0 3983248 1.360g   4360 S   1.7  8.7 615:59.82 java -D[Standalone] -server -verbose:gc -Xloggc:/opt/jbshome/appserver/x8601Server4/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:Nu+
 27804 root      20   0 3889940 1.198g   4272 S   0.0  7.7 213:34.96 java -D[Standalone] -server -verbose:gc -Xloggc:/opt/jbshome/appserver/x8601Server9/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:Nu+
 23639 root      20   0 4814304 166412   5176 S   0.3  1.0 293:22.95 /opt/soft/jdk1.7.0_79/jre/bin/java -Dcom.urbancode.air.mw.common.Monitor.port=35948 -Djava.io.tmpdir=/opt/ibm-ucd-dev/agent/var/temp -Xmx256m -Dfile.encoding=UTF-8 -Dcons+
 61792 root      20   0  771704  43344   9120 S   0.0  0.3 152:57.57 /usr/local/cmbagent/data_space/plugin/cmbagent_metric_bee_linux_PLUGIN_42/bin/ca_metric_bee --config /usr/local/cmbagent/data_space/plugin/config/cmbagent_metric_bee_linu+
  3498 root      20   0 1535368  37852   2768 S   0.3  0.2   1683:20 /opt/opsware/agent/bin/python /opt/opsware/agent/pylibs/shadowbot/daemonbot.pyc --conf /etc/opt/opsware/agent/agent.args                                                   
   863 root      20   0   78176  37500  35208 S   0.0  0.2   1906:55 /usr/lib/systemd/systemd-journald                                                                                                                                          
 23618 root      20   0 5957796  34272    884 S   0.0  0.2 229:02.96 /opt/soft/jdk1.7.0_79/bin/java -Dfile.encoding=UTF-8 -jar /opt/ibm-ucd-dev/agent/monitor/air-monitor.jar /opt/ibm-ucd-dev/agent /opt/ibm-ucd-dev/agent/bin/worker-args.con+
  2953 root      20   0  548976  22976  20520 S   0.0  0.1 966:59.34 /usr/sbin/rsyslogd -n                                                                                                                                                      
 55474 root      20   0 1004020  16428    924 T   1.0  0.1   0:02.59 ./titanagent -d                                                                                                                                                            
108949 root      20   0  794596  11952   4048 S   0.0  0.1   4:15.16 /usr/bin/cmbagent -mode=service                                                                                                                                            
  1330 root      20   0  370876   9892   1124 S   0.0  0.1 739:10.96 /usr/sbin/vmtoolsd                                                                                                                                                         
   367 root      2

二、根据进程id定位到消耗CPU最高的线程

根据进程id定位到消耗CPU最高的线程id: 'top -Hp 106499'
可以看到CPU占有最高的线程id为'106742'

[root@xxx ~]<20201026 10:46:18># top -Hp 106499
top - 10:46:40 up 780 days, 18:30,  4 users,  load average: 1.98, 1.52, 1.58
Threads: 134 total,   1 running, 133 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.7 us, 16.5 sy,  0.0 ni, 78.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16383296 total,   265632 free, 12678360 used,  3439304 buff/cache
KiB Swap:  8388604 total,  6511068 free,  1877536 used.  3152608 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                     
106742 root      20   0 6245760 3.421g  14040 R 99.9 21.9   3860:22 java                                                                                                                                                                        
106518 root      20   0 6245760 3.421g  14040 S  0.3 21.9   2:34.24 java                                                                                                                                                                        
106579 root      20   0 6245760 3.421g  14040 S  0.3 21.9   0:46.66 java                                                                                                                                                                        
106758 root      20   0 6245760 3.421g  14040 S  0.3 21.9   3:31.08 java                                                                                                                                                                        
106764 root      20   0 6245760 3.421g  14040 S  0.3 21.9  15:29.46 java                                                                                                                                                                        
106779 root      20   0 6245760 3.421g  14040 S  0.3 21.9   3:54.11 java                                                                                                                                                                        
106833 root      20   0 6245760 3.421g  14040 S  0.3 21.9   3:26.80 java    		

将线程id转为16进制:得到 '1a0f6'

[root@xxx ~]<20201026 10:47:51># printf "%x" 106742
1a0f6[root@xxx ~]<20201026 10:48:00># 

三、使用 jstack 根据线程id定位对应代码

'jstack processId | grep threadId'

[root@xxx ~]<20201026 10:48:00># jstack 106499 | grep 1a0f6	

此时可以定位到相应的java类及方法

或者使用 jmap,实时导出dump文件使用MAT工具分析

使用jmap命令,导出dump:	jmap -dump:format=b,file=jvmDump.bin PID

生成jmap生产dump文件

  jmap -dump:file=aabbcc.dump PID

使用jmap查看新生代、老年代内存占用:

jmap -heap PID

借助工具 JProfiler、Jstack、Jconsole

https://blog.csdn.net/vicky_pyh/article/details/88797514

3.1 统计进程下线程信息

jstack pid | grep etlJobExecutorThreadPool

jstack 45137 > 101_1216TS.log

21年处理的性能问题

一、遇到的问题

整个系统功能模块使用起来特别卡,响应缓慢。

二、定位思路

1. 查看进程的 CPU、内存使用情况

top -c    shift +m

top -c      shift + m        1 

查看CPU个数,内存大小,如下 为8核、32G(8C-32G)

2. 查看java进程启动配置参数

jinfo 97148

3. 查看java进程 堆栈使用信息

 jmap -heap 97148

4. 分析进程存活对象

jmap -histo:live 97148 > 239.log

5. 导出dump文件

jmap -dump:format=b,file=239.dump 97148

三、分析Dump文件 -MAT,定位内存泄露程序逻辑

最常用的两种报告

Top Components : 列出堆内存占比超过1%的对象

Leak Suspects : 内存泄露点分析报告


1. 分析占比最高的对象 Top Components

2. 内存泄露点排查 Leak Suspects

四、其他工具

1. JDK自带工具

jps  查看java进程
jmap  进程堆内存信息
jstack  进程栈信息、线程堆栈信息 
jvisualvm  Windows可视化的分析工具 
jinfo   查看java进程启动参数、属性 
jstat   查看GC、FullGC、YoungGC情况

2.市面上通用工具

Jprofile  
Arthas  (https://arthas.aliyun.com/doc/)

3. 硬件配置

内存:  free -m
磁盘:  du -lh * 
 
posted @ 2020-10-26 11:05  BigShen  阅读(6)  评论(0)    收藏  举报