您当前的位置: 首页 >  Java

衣舞晨风

暂无认证

  • 2浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

排查Java的CPU性能问题

衣舞晨风 发布时间:2018-05-13 10:21:32 ,浏览量:2

最近在github上看到了一个很实用一些脚本,github地址: https://github.com/jiankunking/useful-scripts

其中有一个(show-busy-java-threads)用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。

于是尝试了一把,具体案例:Java CPU 占用高 模拟及排查

1、下载脚本

git clone git://github.com/jiankunking/useful-scripts.git

cd useful-scripts

# 使用Release分支的内容
git checkout release

# 更新脚本
git pull

2、脚本位置移动 将useful-scripts中内容cp到$HOME/bin/下 这里写图片描述

3、查找最占资源的线程

// 从所有运行的Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈
show-busy-java-threads

结果如下:

jiankunking@ubuntu:/$ show-busy-java-threads
[1] Busy(96.6%) thread(2881/0xb41) stack of java process(2880) under user(jiankunking):
"main" #1 prio=5 os_prio=0 tid=0x00007f0afc009800 nid=0xb41 runnable [0x00007f0b0345e000]
   java.lang.Thread.State: RUNNABLE
    //问题原因
	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/466002798.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)
	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.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

[2] Busy(0.1%) thread(2886/0xb46) stack of java process(2880) under user(jiankunking):
"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007f0afc0d6000 nid=0xb46 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

[3] Busy(0.0%) thread(3498/0xdaa) stack of java process(2880) under user(jiankunking):
"Attach Listener" #11 daemon prio=9 os_prio=0 tid=0x00007f0adc001000 nid=0xdaa waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

[4] Busy(0.0%) thread(2889/0xb49) stack of java process(2880) under user(jiankunking):
"VM Periodic Task Thread" os_prio=0 tid=0x00007f0afc0e6800 nid=0xb49 waiting on condition 

[5] Busy(0.0%) thread(2888/0xb48) stack of java process(2880) under user(jiankunking):
"Service Thread" #7 daemon prio=9 os_prio=0 tid=0x00007f0afc0e3800 nid=0xb48 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

jiankunking@ubuntu:/$ 

4、show-busy-java-threads命令具体参数 这里写图片描述

更加详细的讲解:show-busy-java-threads

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

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

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

微信扫码登录

0.0372s