java 程序cpu100%问题

摘要:
查找java应用程序进程ID,即java_ID查找java_ID。与消耗大量CPU_ID的线程ID对应的线程ID使用jdk的内置jstack工具打印与线程相关的堆栈信息[root@pvz-yrd-yirenbaonode-01~]#java_pid=`ps-ef|grepjava|grep'^tomcat'|awk'{print$2}'`[root@pvz-yrd-yirenbaonode-01 ~
  1. 找到java应用进程 ID即 java_id
  2. 找到该 java_id对应的CPU占用比较大的线程 ID即 thread_id
  3. 使用jdk自带jstack工具打印跟该线程相关的堆栈信息
[root@pvz-yrd-yirenbaonode-01 ~]# java_pid=`ps -ef|grep java|grep '^tomcat'|awk '{print $2}'`
[root@pvz-yrd-yirenbaonode-01 ~]# thread_pid=`ps -Leo pid,lwp,user,comm,pcpu --no-headers | grep "[ ]${java_pid}"|sort -rnk 5 |head -n 1|awk '{print $2}'`
[root@pvz-yrd-yirenbaonode-01 ~]# ox=`printf "%x" ${thread_pid}`  ##16进制,
[root@pvz-yrd-yirenbaonode-01 ~]# su - tomcat -s /opt/yrd_soft/java/bin/jstack ${java_pid}|grep ${ox} -C 10   ## 这里因为是以tomcat用户启动,并且tomcat没有解释器权限,所以使用 su - tomcat -s
	- parking to wait for  <0x0000000781f18788> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
	at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

"DubboServerHandler-xx.xx.xx.xx:20880-thread-1346" daemon prio=10 tid=0x00007f3291ae2800 nid=0x10d2 waiting on condition [0x00007f32269b0000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000781f18788> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
	at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
--
	- locked <0x0000000781990b18> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:505)

"ActiveMQ InactivityMonitor ReadCheckTimer" daemon prio=10 tid=0x00007f32b800e000 nid=0xae5 in Object.wait() [0x00007f328187e000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.util.TimerThread.mainLoop(Timer.java:552)
	- locked <0x00000007819eb550> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:505)

"Selector Worker: 0" daemon prio=10 tid=0x00007f32a8028800 nid=0xae2 runnable [0x00007f3281b81000]
   java.lang.Thread.State: RUNNABLE
	at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
	at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
	at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
	- locked <0x00000007819eb358> (a sun.nio.ch.Util$2)
	- locked <0x00000007819eb340> (a java.util.Collections$UnmodifiableSet)
	- locked <0x0000000781c6ea60> (a sun.nio.ch.EPollSelectorImpl)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
	at org.apache.activemq.transport.nio.SelectorWorker.run(SelectorWorker.java:93)
实际过程中如果确认是java导致cpu占用过高,其实最简单暴力的方法是:jstack $java_pid全部把堆栈打印出来,给开发看. 还有一种做法,是先把jstack打印出来,然后根据线程进行CPU占用排个序,比如打印cpu占用前十的线程的堆栈,等等.

免责声明:文章转载自《java 程序cpu100%问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IntelliJ IDEA 常用设置警告-SetPropertiesRule Server Service Engine Host Context下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

php访问url的四种方式

feof($fp)){$file.=fgets($fp)."";}fclose($fp);}return$file;}2.file_get_contents方式(打开远程文件的时候会造成CPU飙升。file_get_contents其实也可以post)$content=file_get_contents;//或者是:$str=file;//或者是:readf...

Element UI 弹窗(Dialog)改成自适应高度,仅body内容部分滚动

定义样式如下:.abow_dialog{display:flex;justify-content:center;align-items:Center;overflow:hidden;.el-dialog{margin:0auto!important;height:90%;overflow:hidden;.el-dialog__body{position:ab...

VSCode, 当今最流行的免费开源代码编辑器,微软出品,必属精品

Visual Studio代码是一个轻量级但功能强大的源代码编辑器,可以在桌面上运行,可以用于Windows、MacOS和Linux。直接在编辑器中检查差异,暂时保存文件并提交。Visual Studio代码产品在初始操作中的内部代码控制可以通过编辑器内的SCM支持(包括丰富的Git集成)加快发布周期。用户界面-介绍VSCode编辑器的基本UI、命令和功能。...

DB2锁表或超时解决方案

命令如下:db2"forceapplication"4、使用命令listapplication查看是否已经断开了哪些进行了死锁的进程。...

yml在线格式转换工具(properties)

目前springboot的配置文件已经同时支持properties和yaml格式。...

网易见外工作台(AI),语音转文字,快速制作字幕,中英翻译,在线修改字幕

网易可视工作台是网易人工智能事业部开发的AI智能语音转录平台,集视频收听、直播收听、语音转录、文档直接翻译功能于一体。虽然它目前只支持中文和英文,但足以满足大多数人的需求。使用网易外部工作台的视频翻译功能实际测量了一段8分钟的英语视频。翻译在不到1分钟内完成,支持在线修改听力和翻译内容。目前,它可以免费使用,体验非常好。...