jvm性能调优-cpu过高问题定位

一、top+jstack命令

top查看当前系统运行的情况,cpu占用率,内存使用率等等

[root@centos20 ~]# top     #查看进程
top - 14:42:39 up 46 days, 21:19,  7 users,  load average: 0.00, 0.04, 0.10
Tasks: 645 total,   1 running, 644 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 13184587+total, 12338808 free, 36164808 used, 83342256 buff/cache
KiB Swap:  8257532 total,  8190196 free,    67336 used. 94830576 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                    
  2486 mysql_r+  20   0 4092536   1.9g  18888 S   0.7  1.5 655:20.34 mysqld                                                                                                                                                                     
  3424 root      20   0  645024  26320   9336 S   0.7  0.0 166:23.73 gsd-color                                                                                                                                                                  
 68005 root      20   0  162664   2852   1600 S   0.7  0.0  16:53.86 top                                                                                                                                                                        
  3509 root      20   0  566808  25636  18832 S   0.3  0.0  45:40.79 vmtoolsd                                                                                                                                                                   
 21542 root      20   0   54.9g  14.6g  23324 S   0.3 11.6 179:32.58 java                                                                                                                                                                       
 37260 root      20   0  162660   2880   1584 R   0.3  0.0   0:13.40 top                                                                                                                                                                        
............


[root@centos20 ~]# top -Hp 21542   #查看cpu占用率高的进程的线程信息
top - 14:45:38 up 46 days, 21:22,  7 users,  load average: 0.16, 0.15, 0.14
Threads: 332 total,   0 running, 332 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 13184587+total, 12538272 free, 35962944 used, 83344656 buff/cache
KiB Swap:  8257532 total,  8190196 free,    67336 used. 95032904 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                     
 21613 root      20   0   54.9g  14.6g  23324 S  0.3 11.6   5:19.99 java                                                                                                                                                                        
 21765 root      20   0   54.9g  14.6g  23324 S  0.3 11.6   0:28.48 java                                                                                                                                                                        
 21542 root      20   0   54.9g  14.6g  23324 S  0.0 11.6   0:00.00 java                                                                                                                                                                        
.............

二、使用JMC可视化工具

三、可能导致CPU占用率过高的场景与解决方案-1

1.无限while循环

   尽量取消无限循环的场景

   必要无限循环的情况,让循环执行的速度放慢

2.频繁GC

   意味着垃圾收集线程频繁执行,CPU升高,解决方案:降低GC频率

3.频繁创建对象

   合理使用单例,频繁创建对象,浪费内存,还导致cpu过高

4.序列化和反序列化

   选择合理的API实现功能

5.正则表达式

   使用的引擎在进行字符串匹配时会发生回溯,会产生cpu过高

6.频繁的线程上下文切换

   降低切换的频率(结合业务和代码进行代码改造)

上一篇:css样式中的水平垂直居中


下一篇:嵌套块元素塌陷处理