Java线程问题分析定位
Java线程问题分析定位
分析步骤:
1、使用top命令查看系统资源占用情况,发现Java进程占用大量CPU资源,PID为11572;
2、显示进程详细列表命令:ps -mp 11572 -o THREAD,tid,time
找到消耗资源多的TID,如TID:112052
3、将TID转换成16进制:printf "%x\n" 12052
4、打印堆栈信息:jstack 11572 |grep 2f14 -A 30
Thread dump信息如下:
|
"thread1" prio=6 tid=0x02de8400 nid=0x2688 runnable [0x0320f000] java.lang.Thread.State: RUNNABLE at DeadLock.callLongTime(DeadLock.java:63) at DeadLock$2.run(DeadLock.java:41) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Locked ownable synchronizers: - <0x22be1488> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "thread2" prio=6 tid=0x02de6c00 nid=0x218c waiting on condition [0x031bf000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x22be1488> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214) at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290) at DeadLock$2.run(DeadLock.java:40) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Locked ownable synchronizers: - <0x22be64e0> (a java.util.concurrent.ThreadPoolExecutor$Worker) |
线程“thread2”处于WAITING状态,- parking to wait for <0x22be1488>,等待给0x22be1488的地址,而0x22be1488地址正被“thread1”上锁,Dump日志中有大量线程等待给这个地址上锁,就会出现线程等待资源超时。
Java线程问题分析定位的更多相关文章
- Java问题定位之Java线程堆栈分析
采用Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子.系统运行遭遇问题(系统停止响应,运行越来越慢,或者性能低下,甚至系统宕掉),如何速度命中问题的根本原因 ...
- Java项目性能瓶颈分析及定位(八)——Java线程堆栈分析(五)
对于CPU而言,常见的瓶颈主要有两种:服务器的压力很小,但是CPU的利用率却很高,这样的性能瓶颈相对比较容易定位(好比我只是说了你一句,你就哭了,你的弱点立马就暴露出来了):给服务器施加的压力很大,但 ...
- java线程dump分析工具
jstack和线程dump分析 java程序性能分析之thread dump和heap dump 一.[内存dump] jmap –dump:live,format=b,file=heap.bin ...
- Java线程堆栈分析
不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面.老话说得好,机会是留给有准备的人的,因此,开始计划看一些Java底层一点的东西,尝试开始在学 ...
- java线程池分析和应用
比较 在前面的一些文章里,我们已经讨论了手工创建和管理线程.在实际应用中我们有的时候也会经常听到线程池这个概念.在这里,我们可以先针对手工创建管理线程和通过线程池来管理做一个比较.通常,我们如果手工创 ...
- 使用jstack和TDA进行java线程dump分析
转载:http://blog.csdn.net/everlasting_188/article/details/51943095 1.jstack重点关注 命令行:jstack [-l][F] pid ...
- Java线程Dump分析工具--jstack【转载】
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...
- Java线程Dump分析工具--jstack(转)
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...
- Java线程Dump分析工具--jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...
随机推荐
- <<测试驱动开发的艺术>>读书笔记
TDD通过边测试边编写代码,然后重构来防止重构所引起的错误 通过自动化测试和持续集成工具,随时保持可以发布 TDD第一步: 1. 需求分解 2. 将需求转化成测试 3. 写一个失败的测试 4. 逐步通 ...
- 【MySQL】SQL优化系列之 in与range 查询
首先我们来说下in()这种方式的查询 在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效率,因为在一条索引里面,range字段后面的部分是不生效的. ...
- RT-Thread下的串口驱动程序分析【转载】
编写本文稿的目的,在于通过分析stm32平台上的串口中断源码,学习 RTT中如何编写中断处理程序 如何编写RTT设备驱动接口代码 了解串行设备的常见处理机制 先以RTT官方源码中的STM32 BSP包 ...
- WM_MOUSELEAVE和WM_MOUSEHOVER使用
默认情况下,窗口是不响应 WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息的,所以要使用 _TrackMouseEvent 函数来激活这两个消息.调用这个函数后,当鼠标在指定窗口上 ...
- java解析命令行参数(common-cli)练习
package foo; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; i ...
- web应用虚拟目录的映射
1.新建一个web应用.在D盘新建一个news文件夹,文件夹下面新建一个html文件.如下图所示: 2.将web应用映射到服务器的虚拟目录 第一种方式: 2.1 用记事本打开tomcat目录下面的se ...
- .NET并行编程1 - 并行模式
设计模式——.net并行编程,清华大学出版的中译本. 相关资源地址主页面: http://parallelpatterns.codeplex.com/ 代码下载: http://parallelpat ...
- win10开机自动启动小键盘
打开注册表 展开到HKEY_USERS\.DEFAULT\Control Panel\Keyboard 再选择InitialKeyboardIndicators, 将其数值数据修改为2(Win7)/8 ...
- RMQ 训练 之 codevs 1690 开关灯 已经搞定
思路 懒标记法 记stop[rt] 表示 rt这个线段树节点的下方儿子们需要被更新几次 记住是下方 量纲不要乱 否则写的一堆渣代码 我的代码里面black是维护黑灯的数量 其实做烦了 如果是维 ...
- LogStash的Filter的使用
最近在项目中使用LogStash做日志的采集和过滤,感觉LogStash还是很强大的. input { file{ path => "/XXX/syslog.txt" sta ...