线程(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请参考
当打开MBeans标签下的OperatingSystem MBean,你可以看到平台可以执行的所有属性和操作。你可以监控任何一个属性随时间的变化——如,CPU时间