CPU占用率高,用jstack定位代码位置

教你怎么用jstack定位CPU占用率高的代码

在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序

  • 编写死循环demo,提高CPU占用比例
    写一个简单的死循环demo,使得CPU占用率飙升
/**
 * @author erbon
 * @date 2018/8/16 上午11:25
 */
public class Demo {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("hello world");
                }
            }
        }).start();
        System.out.println();
    }

}
javac Demo.java
java Demo 1>log.out

会看到控制台不停的在打印”hello world

  • TOP命令定位占用CPU高的进程
    执行
top

这里写图片描述

  • TOP -H -p pid定位CPU占用率最高的线程pid
    执行top -H -p pid,查看该进程下占用CPU高的线程id,比如我们定位到我们的占用CPU比较高的进程id为99770
top -H -p 99770

各线程占用资源情况
我们会看pid为99803的线程占用CPU最高,将其转换为16进制数,为185db

  • 使用jstack定位线程
    执行
jstack 99770 > dump.out

将dump输出到dump.out日志文件中

vi dump.out

查看dump日志,查找关键字185db,刚才我们定位的线程pid的16进制表示
dump线程堆栈信息

这儿不将dump输出到文件,直接执行

jstack 99770 | grep -A 20 185db

也可,其中-A 20代表显示筛选的行及其后20行

接下来,我们就可以拿到具体业务代码进行分析占用CPU高的原因了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值