您当前的位置: 首页 >  Java

衣舞晨风

暂无认证

  • 2浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java CPU 占用高 模拟及排查

衣舞晨风 发布时间:2018-03-29 22:12:06 ,浏览量:2

模拟线上排查CPU占用高的问题 1、模拟代码如下

package com.jiankunking.cpu;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * Created by jiankunking on 2018/3/29.
 */
@Component
public class cpuReaper {
    @PostConstruct
    public void cpuReaper() {
        int num = 0;
        long start = System.currentTimeMillis() / 1000;
        while (true) {
            num = num + 1;

            if (num == Integer.MAX_VALUE) 
                System.out.println("reset");
                num = 0;
            }
            if ((System.currentTimeMillis() / 1000) - start > 1000) {
                return;
            }
        }
    }
}

2、打包

mvn clean package  -Dmaven.test.skip=true

3、部署运行

java -jar cpu-mem-occupy-simulate-0.0.1-SNAPSHOT.jar

4、查看系统资源占用情况 这里写图片描述

5、显示线程列表

#ps -mp pid -o THREAD,tid,time
ps -mp 4463 -o THREAD,tid,time

这里写图片描述 6、将需要的线程ID转换为16进制格式:

# printf "%x\n" tid
printf "%x\n" 4464

这里写图片描述 7、打印线程的堆栈信息

#jstack pid |grep tid -A 30

具体堆栈信息如下:

jiankunking@ubuntu:~$ jstack 4463 |grep 1170 -A 30
"main" #1 prio=5 os_prio=0 tid=0x00007f5ca0009800 nid=0x1170 runnable [0x00007f5ca7cf8000]
   java.lang.Thread.State: RUNNABLE
   //注意这里 CPU占用高的地方
    at com.jiankunking.cpu.cpuReaper.cpuReaper(cpuReaper.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:369)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:312)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:423)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1702)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
    at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$73/761960786.getObject(Unknown Source)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    - locked  (a java.util.concurrent.ConcurrentHashMap)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
    - locked  (a java.lang.Object)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234)
    at com.jiankunking.CpuMemOccupySimulateApplication.main(CpuMemOccupySimulateApplication.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

小注:执行jstack的用户要与执行java -jar的用户一致

8、原因明确 问题解决。

更加简便的方法 排查Java的CPU性能问题

本文参考: https://blog.csdn.net/mengxianhua/article/details/51727601

演示代码下载: https://download.csdn.net/download/xunzaosiyecao/10316715

在线预览: https://github.com/jiankunking/cpu-mem-occupy-simulate

个人微信公众号: 这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

关注
打赏
1647422595
查看更多评论
立即登录/注册

微信扫码登录

0.0398s