zoukankan      html  css  js  c++  java
  • JVM运行时信息收集

    Thread Dump/线程转储

    Thread Dump中包含下列信息:

    • 所有JVM中启动了但是未结束的Thread列表;
    • 每个Thread当前所处的状态及其调用栈(Stack Trace);
    • JVM内部是否出现死锁(Deadlock);

    基于Thread Dump信息可以确认JVM当前的执行状态,Thread Dump信息常见的收集方法包括:

    • 使用jvisualvm:在所有平台上,当可以通过jvisualvm监控JVM运行时,可以直接在jvisualvm中进行Thread Dump,请参见jvisualvm的说明;
    • Windows平台:在JVM Console(比如Tomcat启动时的后台窗口)下按下组合键Ctrl-Break,Console中将打印Thread Dump信息。当Console的缓冲区不够大时可能无法显示全部信息,需要增大Console的缓冲区;
    • Unix/Linux平台
    先找到对应的JVM进程号(pid):ps –ef|grep java
    
    kill -3 (JVM进程号):此时Thread Dump信息将输出到JVM Console中。此命令不会终止JVM运行,只是输出Thread Dump信息;

    Java Heap Dump/堆转储

    JVM Heap Dump的方法与JVM密切相关,Java 6+版本的SUN/Oracle HotSpot JVM支持下列方式生成Heap Dump:

    基于JVM事件:当JVM运行过程中出现OutOfMemoryError时自动Heap Dump,这也是生产系统中最可行的Heap Dump生成方法。涉及参数包括:

    -XX:+HeapDumpOnOutOfMemoryError:当内存溢出时进行Heap Dump,默认在Java进程的“当前目录”下生成类似于“java_pid1340.hprof”形式的文件。可以用-XX:HeapDumpPath控制生成文件的位置;

    -XX:HeapDumpPath=path:设置OutOfMemoryError时JVM生成Heap Dump文件的位置。此参数默认值为“./java_pid%p.hprof”,其中“%p”代表Java进程的PID(Process ID,进程标识),所以会在Java进程的当前目录下生成包含PID的.hprof文件;

    交互式Heap Dump:在JVM运行中,以交互式方式获取Heap Dump,通常用于开发调试阶段定位问题,生产环境还是建议基于JVM事件进行Heap Dump,方式包括:

    • 使用jvisualvm:在所有平台上,当可以通过jvisualvm监控JVM运行时,可以直接在jvisualvm中进行Heap Dump,请参见jvisualvm的说明;
    • 使用JDK中的jmap工具:jmap -dump[live,]format=b,file=filename pid
    • 使用OS功能:在Linux中,使用“无害”的 gcore 命令或破坏性的“kill -6”或“kill -11”命令来生成一个内核文件。然后,使用 jmap 从内核文件中提取一个堆转储文件:jmap -dump:format=b,file=heap.hprof path_to_java_executable_core;
    • 使用 Ctrl+Break:如果运行的应用程序设置了-XX:+HeapDumpOnCtrlBreak命令行选项,那么在通过控制台发出Ctrl+Break事件或SIGQUIT(通常通过kill -3生成),那么会生成一个HPROF格式的转储文件和一个线程Dump。有一些版本不支持这个选项,那么在遇到这些情况时可以尝试使用:-Xrunhprof:format=b,file=heapdump.hprof。并不推荐使用这种方式,一些HotSpot版本不支持此参数,建议使用上述其他交互式方式。

    GC信息

    GC参数在不同JVM的或不同JVM版本中均有不同,但一般能够支持下列参数,系统运行时可以设置GC日志文件以收集GC信息供后续分析:

    l -Xloggc:gc.log:指定将gc的信息输出到gc.log中;

    l -verbose:gc:输出详尽的GC信息,通常verbose都只能用于开发调试环境,而不应该用于生产环境;

    l -XX:+PrintGC:输出GC的简要信息;

    l -XX:+PrintGCDetails:GC的详细信息;

    l -XX:+PrintGCTimeStamps:GC的时间信息;

    l -XX:+PrintGCApplicationStoppedTime:GC造成的应用暂停的时间;

    l -XX:+PrintTenuringDistribution:

    GC信息可以提供简要的GC运行过程信息,但不太容易基于GC信息判断JVM有什么异常状态,因此GC信息收集方法仅供参考。

  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/xiongmaotailang/p/5249589.html
Copyright © 2011-2022 走看看