CPU使用率过高问题定位

Posted Awecoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU使用率过高问题定位相关的知识,希望对你有一定的参考价值。

1 CPU使用率过高问题定位

1.1 配合使用top+jstack定位(重要)

首先使用top找到CPU使用率最高的进程。

接着查看36032进程的线程情况。

top -Hp 36032

找到36044线程CPU占用率最高,然后将线程号转为16进制。

# printf %x 36044
8ccc

最后,使用jstack dump 36032进程的日志到1.txt文件。匹配8ccc之后打印后面30行,从而定位到问题代码行数。

# jstack 36032 > 1.txt
# cat 1.txt | grep -A 30 8ccc  

备注:top定位的线程号是十进制的,而jstack dump出来的是十六进制的。

1.2 使用JMC查看线程情况

利用JFR动态监控出线程情况。

1.3 CPU使用过高的场景

  1. 使用无限循环==>尽量避免
  2. 频繁GC,GC线程争用CPU资源==>降低GC频率
  3. 频繁创建新对象==>合理使用单例以及线程池
  4. 序列化和反序列化(例如解析操作)==>选用合理的API实现;选用好用的类库
  5. 不合理地使用正则表达式(正则表达式引擎在进行字符匹配时会发生回溯)==>尽量使正则匹配不回溯。
    1. blog.csdn.net/ityouknow/article/details/80851338
  6. 频繁的线程上下文切换。==>业务改造,减低频率。
版权声明:本文为博主原创文章,未经博主允许不得转载。

以上是关于CPU使用率过高问题定位的主要内容,如果未能解决你的问题,请参考以下文章

开发经验java服务生产环境CPU使用过高解决思路

生产环境CPU过高问题定位

JVM调优 快速定位服务CPU过高(理论+实战)

Linux 线程占用CPU过高定位分析

linux----CPU使用率过高问题定位过程

linux----CPU使用率过高问题定位过程