栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

怎么解决线上CPU100%的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

怎么解决线上CPU100%的问题

怎么解决线上CPU100%的问题 背景

Java服务,有时候会遇到CPU 100%的问题,对于这样的问题,我们如何快速定位并解决呢?一般会有如下几个步骤。

解决步骤
  1. 找到最耗CPU的进程
    top
  2. 找到这个进程中最耗CPU的线程
top -Hp ${进程的PID}
  1. 查看堆栈信息,定位线程的什么操作消耗了大量CPU,定位对应代码
printf "%xn" 2611 

jstack 2601 | grep a33 -A 20
  1. 生成异常进程的dump文件
    jmap -dump:live,format=b,file=./heapdump.hprof 32695
  2. 使用VisualVM查看

快速解决
wget --no-check-certificate https://raw.github.com/oldratlee/useful-scripts/release/show-busy-java-threads
chmod +x show-busy-java-threads

实例代码
public class CpuUseTest {
 
    public static void main(String[] args) {
        new Thread() { 
            public void run() {
                int result = 0;
                while (true) {
                    result++;
                    if (result > Integer.MAX_VALUE / 2) {
                        result = 0;
                    }
                }
            }
        }.start();
    }
}
编译

javac

执行

java 类名

打印堆栈信息

当然更常见的是我们对整个jstack文件进行分析,通常我们会比较关注WAITING和TIMED_WAITING的部分,BLOCKED就不用说了。我们可以使用命令cat jstack.log | grep “java.lang.Thread.State” | sort -nr | uniq -c来对jstack的状态有一个整体的把握,如果WAITING之类的特别多,那么多半是有问题啦。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/532278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号