Jconsole与Jmx 分析JVM状况(下)

线程(ThreadMXBean

Jconsole画面取得线程画面如下:

左下角列出了所以正在运行的线程。通过点击某个线程,右下脚可以看到这个线程的相关信息。

 

Mean中提供ThreadMXBean相关属性和操作如下

详细个属性说明请看http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/java/lang/management/ThreadMXBean.html

代码中取得ThreadMXBean

Java代码   收藏代码
  1. mport java.lang.management.ManagementFactory;  
  2. import java.lang.management.ThreadMXBean;  
  3. import javax.management.MBeanServerConnection;  
  4. import javax.management.*;  
  5. public class JmxRemote {  
  6.     public static void main(String[] args) {  
  7.         try {JMXServiceURL address =  new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi");  
  8.             JMXConnector connector = JMXConnectorFactory.connect(address);  
  9.             MBeanServerConnection mbs = connector.getMBeanServerConnection();  
  10. ThreadMXBean threadBean = ManagementFactory.newPlatformMXBeanProxy(mbs, ManagementFactory.THREAD_MXBEAN_NAME, ThreadMXBean.class);        
  11.             //---取得你需要的线程相关讯息 参照API 其中上图的这些属性和API都可以通过自己写代码操作  
  12.         } catch(Exception e){  
  13.             e.printStackTrace();  
  14.         }  
  15. }  
  16. }  

常用一些API使用说明:

 

findMonitorDeadlockedThreads查找死锁线程,返回的死锁线程list

其中Jconsole也提供了该操作

getThreadInfoJconsoleMBean支持getThreadInfo操作的两种形式,

  • 返回指定id的不具有堆栈跟踪的线程的线程信息。getThreadInfo(longid)

  • 返回指定id的线程的线程信息,并带有指定堆栈追踪元素数的堆栈追踪。getThereadInfo(longid,int MaxDepth)

实际代码中还提供另外三种取得线程讯息操作

  • 返回其ID在输入数组ids中的每个线程的线程信息,并带有指定堆栈追踪元素数的堆栈追踪。getThreadInfo(long[] ids,int maxDepth)

  •  返回每个线程的线程信息,线程ID位于输入数组ids中,带有堆栈跟踪和同步信息。getThreadInfo(long[] ids,boolean lockedMonitors, boolean lockedSynchronizers)

  • 返回其ID在输出数组ids中的每个线程的线程信息,这些线程不具有堆栈跟踪。getThreadInfo(long[] ids)

例如:Jconsole使用:首先输入线程ID9)及堆栈深度(10

getThreadInfo弹出如下对话框

如上你会看到这个线程stackTrace的深度是7。双击黑色部分如下图可以看到堆栈信息

 

 

点“<”或者“>”按钮可以查看每层讯息

 

通过查看stack我们可以找到死锁线程代码信息

当然在代码中也能取得相关讯息,如下代码:

Java代码   收藏代码
  1. ThreadInfo ti=threadBean.getThreadInfo(910);  
  2. StackTraceElement[] st=ti.getStackTrace();  
  3. for(StackTraceElement el:st)  
  4. System.out.println(el);  
  5. 输出:  
  6. java.net.PlainSocketImpl.socketAccept(Native Method)  
  7. java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)  
  8. java.net.ServerSocket.implAccept(ServerSocket.java:450)  
  9. java.net.ServerSocket.accept(ServerSocket.java:421)  
  10. sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)  
  11. sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)  
  12. java.lang.Thread.run(Thread.java:619)  

获取操作系统资源信息(MemoryManagerMXBean

MemoryManagerMXBean提供查看操作系统相关讯息,具体API请参考

http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/java/lang/management/OperatingSystemMXBean.html

当打开MBeans标签下的OperatingSystem MBean,你可以看到平台可以执行的所有属性和操作。你可以监控任何一个属性随时间的变化——如,CPU时间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值