Thread - JConsole
来源:互联网 发布:软件开发工程师有多累 编辑:程序博客网 时间:2024/06/10 04:45
多线程时有可能遇到:程序一直不停,也不报错,只是靠console不能获取到足够的信息,怀疑死锁或其它情况了,这时候我们就可以找jconsole帮忙(jconsole是JDK内置的小工具)。
连接
以eclipse为例,在工具栏 > run as(debug as) > runconfigurations 里加入以下三行参数:
-Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=falsee.g.
查看引擎ip (e.g. 本机)
如果JDK path等之类的已经配好,直接在cmd里拷jconsole来启动
首先程序要先启动了,然后就可以用jconsole来连了(远程进程:<ip>:9999)
jconsole中的一些选项,都很简单,标注一下,大家弄弄就知道怎么用了(如:最左下角可以filter线程名字,“检测死锁”则可以一键检测,可有用了~~)
应用例子
案例中有条语句一运行就无限等待了public void stopCheckStateTask() {<span style="white-space:pre"></span>logger.debug("stopCheckStateTask~~~:" + Thread.currentThread().getName());<span style="white-space:pre"></span>lock.lock(); // 无限等待<span style="white-space:pre"></span>try {...
首先按“检测死锁”,结果没有发现死锁。随之找出语句正在运行的线程,如图
注意:上图中的ReetrantLock$NonfairSync表明是用了ReetrantLock非公平锁机制
该线程进入Waiting状态,“拥有者”是它正在等待的对方线程,即pool-18-tread-2。不过这个case中的pool-18-tread-2是找不到的,证明此时没有运行,我们在eclipse的debug stack trace中找到这个thread,并在怀疑有问题的语句中加上断点,就出现了
通进分析,发现这个例子中的问题不是死锁,而是有线程出现无限等待了,原因就在于有一直有scheduler弄出来的线程排在了该线程前面运行,解决方法之一是使用公平锁。
protected Lock lock = new ReentrantLock(true); // 公平锁
0 0
- Thread - JConsole
- jconsole
- JConsole
- JConsole
- JConsole
- jconsole
- Jconsole
- jconsole使用方法
- JConsole reference
- jconsole设置
- Using jconsole
- Using jconsole
- jconsole+websphere
- JConsole手册
- Jconsole简介
- JConsole使用
- JConsole使用手册
- jconsole使用方法
- Java学习之反射机制
- Climbing Stairs
- 怎样读一篇论文
- js实现div弹框和关闭
- UML之状态图
- Thread - JConsole
- php导出excel
- Spring4.0使用websocke遇到的一些问题
- 孙鑫 VC++深入详解——学习笔记
- HDU4782——Beautiful Soup(模拟)
- 关于Cocos2d-x的一些认识(5)
- sleep和wait的区别
- 【C/C++学院】(12)C++标准模板库STL
- Cocos2d-x之getVisibleSize,getContentSize,boundingBox,getContentSizeInPixels,convertToGL,convertToUI