Jconsole与Jmx 分析JVM状况(下)

来源:互联网 时间:1970-01-01

线程(ThreadMXBean)

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

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

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

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

代码中取得ThreadMXBean

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

常用一些API使用说明:

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

其中Jconsole也提供了该操作

getThreadInfo(Jconsole)MBean支持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使用:首先输入线程ID(9)及堆栈深度(10)

点getThreadInfo弹出如下对话框

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

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

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

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

ThreadInfo ti=threadBean.getThreadInfo(9, 10);StackTraceElement[] st=ti.getStackTrace();for(StackTraceElement el:st)System.out.println(el);输出:java.net.PlainSocketImpl.socketAccept(Native Method)java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)java.net.ServerSocket.implAccept(ServerSocket.java:450)java.net.ServerSocket.accept(ServerSocket.java:421)sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)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时间

大小: 5.1 KB

相关阅读:
Top