微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.频繁的线程上下文切换

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐