zoukankan      html  css  js  c++  java
  • java堆栈信息查看,以及JVM性能查看工具-jconsole+jmap

    java-core  P487 P515

    chapter11,主要讲java的异常,里面很多内容收获良多,之前一直没注意过的。

    一,Throwable类获得StackTraceElement ,可进行堆栈跟踪,用法如下:

    Throwable t = new Throwable();
    StackTraceElement [] frames = t.getStackTrace();
    for(StackTraceElement frame :frames)
     analyze frame
    
    Map<Thread,StackTraceElement[] map>=Thread.getAllStackTraces();
    for(Thread t :map.keySet()){
      StackTraceElement[] frames k= map.get(t);
      analyze frames      
    }
    

    示例:

    public class TestHeap {
    public static void main(String[]args){
    Throwable t = new Throwable();
    StringWriter out = new StringWriter();
    t.printStackTrace(new PrintWriter(out));
    String description = out.toString();
    System.out.println(description);
    System.out.println("——————分割线——————");
    StackTraceElement[]frames = t.getStackTrace();
    for(StackTraceElement frame:frames){
    System.out.println(frame);
    }
    System.out.println("——————分割线——————");
    Map<Thread,StackTraceElement[]> map = Thread.getAllStackTraces();
    for(Thread t1:map.keySet()){
    StackTraceElement []fram=map.get(t1);
    for(StackTraceElement element :fram){
    System.out.println("--- "+element.getClassName()+"--- "
    +element.getClass().getName()+" ---"+element.getFileName()
    +",--- "+element.getMethodName()+",--- "+element.getLineNumber());
    }

    }
    }
    }

      

    输出结果:

    java.lang.Throwable
    	at enums.TestHeap.main(TestHeap.java:9)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
    
    ——————分割线——————
    enums.TestHeap.main(TestHeap.java:9)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
    ——————分割线——————
    --- java.lang.ClassLoader$NativeLibrary--- java.lang.StackTraceElement ---ClassLoader.java,--- load,--- -2
    --- java.lang.ClassLoader--- java.lang.StackTraceElement ---ClassLoader.java,--- loadLibrary0,--- 1941
    --- java.lang.ClassLoader--- java.lang.StackTraceElement ---ClassLoader.java,--- loadLibrary,--- 1845
    --- java.lang.Runtime--- java.lang.StackTraceElement ---Runtime.java,--- loadLibrary0,--- 870
    --- java.lang.System--- java.lang.StackTraceElement ---System.java,--- loadLibrary,--- 1122
    --- java.net.AbstractPlainSocketImpl$1--- java.lang.StackTraceElement ---AbstractPlainSocketImpl.java,--- run,--- 84
    --- java.net.AbstractPlainSocketImpl$1--- java.lang.StackTraceElement ---AbstractPlainSocketImpl.java,--- run,--- 82
    --- java.security.AccessController--- java.lang.StackTraceElement ---AccessController.java,--- doPrivileged,--- -2
    --- java.net.AbstractPlainSocketImpl--- java.lang.StackTraceElement ---AbstractPlainSocketImpl.java,--- <clinit>,--- 81
    --- java.net.ServerSocket--- java.lang.StackTraceElement ---ServerSocket.java,--- setImpl,--- 288
    --- java.net.ServerSocket--- java.lang.StackTraceElement ---ServerSocket.java,--- <init>,--- 230
    --- java.net.ServerSocket--- java.lang.StackTraceElement ---ServerSocket.java,--- <init>,--- 128
    --- com.intellij.rt.execution.application.AppMain$1--- java.lang.StackTraceElement ---AppMain.java,--- run,--- 77
    --- java.lang.Thread--- java.lang.StackTraceElement ---Thread.java,--- run,--- 748
    --- java.lang.Thread--- java.lang.StackTraceElement ---Thread.java,--- dumpThreads,--- -2
    --- java.lang.Thread--- java.lang.StackTraceElement ---Thread.java,--- getAllStackTraces,--- 1610
    --- enums.TestHeap--- java.lang.StackTraceElement ---TestHeap.java,--- main,--- 20
    --- sun.reflect.NativeMethodAccessorImpl--- java.lang.StackTraceElement ---NativeMethodAccessorImpl.java,--- invoke0,--- -2
    --- sun.reflect.NativeMethodAccessorImpl--- java.lang.StackTraceElement ---NativeMethodAccessorImpl.java,--- invoke,--- 62
    --- sun.reflect.DelegatingMethodAccessorImpl--- java.lang.StackTraceElement ---DelegatingMethodAccessorImpl.java,--- invoke,--- 43
    --- java.lang.reflect.Method--- java.lang.StackTraceElement ---Method.java,--- invoke,--- 498
    --- com.intellij.rt.execution.application.AppMain--- java.lang.StackTraceElement ---AppMain.java,--- main,--- 147
    --- java.lang.Object--- java.lang.StackTraceElement ---Object.java,--- wait,--- -2
    --- java.lang.ref.ReferenceQueue--- java.lang.StackTraceElement ---ReferenceQueue.java,--- remove,--- 143
    --- java.lang.ref.ReferenceQueue--- java.lang.StackTraceElement ---ReferenceQueue.java,--- remove,--- 164
    --- java.lang.ref.Finalizer$FinalizerThread--- java.lang.StackTraceElement ---Finalizer.java,--- run,--- 209
    --- java.lang.Object--- java.lang.StackTraceElement ---Object.java,--- wait,--- -2
    --- java.lang.Object--- java.lang.StackTraceElement ---Object.java,--- wait,--- 502
    --- java.lang.ref.Reference--- java.lang.StackTraceElement ---Reference.java,--- tryHandlePending,--- 191
    --- java.lang.ref.Reference$ReferenceHandler--- java.lang.StackTraceElement ---Reference.java,--- run,--- 153
    
    Process finished with exit code 0
    

      

    二,jconsole和jmap

    之前有了解过java的JVM性能监控工具,但是没有具体执行过,只是有个很模糊的概念。

      jconsole原理:

      java允许虚拟机中的代理装置跟踪内存消耗,线程使用,类加载等情况。jconsole就是一个展示这种功能的例子:用于显示虚拟机性能的统计结果。

      jconsole 用法

    >cmd
    >jconsole
    >jconsole pid

      jconsole页面

      jmap

      可以使用jmap获得一个堆的存储,其中显示了堆中的每个对象,使用如下:

    jmap pid
    

      

      结果如下

    C:Usersuser>jmap 3128
    Attaching to process ID 3128, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.144-b01
    0x0000000053040000      36K     C:Program FilesJavajdk1.8.0_144jreinattach.dll
    0x0000000053050000      840K    C:Program FilesJavajdk1.8.0_144inMSVCR100.dll
    0x0000000053130000      188K    C:Program FilesJavajdk1.8.0_144injli.dll
    0x0000000053160000      840K    C:Program FilesJavajdk1.8.0_144jreinmsvcr100.dll
    0x0000000053240000      168K    C:Program FilesJavajdk1.8.0_144jreindcpr.dll
    0x00000000532c0000      264K    C:Program FilesJavajdk1.8.0_144jrein	2k.dll
    0x0000000053390000      52K     C:Program FilesJavajdk1.8.0_144jreinmanagement.dll
    0x00000000533a0000      68K     C:Program FilesJavajdk1.8.0_144jrein
    io.dll
    0x00000000533c0000      104K    C:Program FilesJavajdk1.8.0_144jrein
    et.dll
    0x00000000533e0000      284K    C:Program FilesJavajdk1.8.0_144jreinfontmanager.dll
    0x0000000053430000      1632K   C:Program FilesJavajdk1.8.0_144jreinawt.dll
    0x00000000535d0000      88K     C:Program FilesJavajdk1.8.0_144jreinzip.dll
    0x0000000053620000      164K    C:Program FilesJavajdk1.8.0_144jreinjava.dll
    0x0000000053650000      60K     C:Program FilesJavajdk1.8.0_144jreinverify.dll
    0x0000000053740000      8820K   C:Program FilesJavajdk1.8.0_144jreinserverjvm.dll
    0x0000000180000000      804K    c:program files (x86)kingsoftkingsoft antiviruskwsui64.dll
    0x00007ff6c24d0000      28K     C:Program FilesJavajdk1.8.0_144injconsole.exe
    

      

    另外,还有一个收费的工具,比较有名也直接,叫jprofiler。

    可参考:

    https://www.cnblogs.com/AmilyWilly/p/7272160.html?utm_source=itdadao&utm_medium=referral

  • 相关阅读:
    JQuery hover鼠标变换
    装饰者模式
    principle04
    Method Injection
    观察者模式
    Java SPI
    Redis--学习01
    OO设计中5大原则
    knowledge
    策略模式
  • 原文地址:https://www.cnblogs.com/zhizhiyin/p/11113950.html
Copyright © 2011-2022 走看看