zoukankan      html  css  js  c++  java
  • Jconsole与Jmx 分析JVM状况(下) 转

    出处: 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

    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(long id)

    • 返回指定 id 的线程的线程信息,并带有指定堆栈追踪元素数的堆栈追踪。 getThereadInfo(long id,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 标签下的 Operating System MBean ,你可以看到平台可以执行的所有属性和操作。你可以监控任何一个属性随时间的变化——如, CPU 时间

  • 相关阅读:
    linux tomcat 突然验证码出不来
    使用open live writer客户端写博客
    创建自己的maven模板
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    win10 操作配置备忘
    Maven使用
    ORA-12514: TNS:listener does not currently know of service …
    PlantUML——4.实例演示1
    C语言基础(一)
    Linux系统挂载FAT32的U盘
  • 原文地址:https://www.cnblogs.com/myseries/p/11778246.html
Copyright © 2011-2022 走看看