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信息收集方法仅供参考。

  • 相关阅读:
    Notification(一)系统通知的监听移除
    控制器的生命周期
    Foundation Framework
    View的生命周期方法:loadView、viewDidLoad、viewDidUnload的关系
    第一篇markdown博文
    0622.获取json文件的数据
    0622.发送邮件基本操作
    0622.设置tableView的背景图片(平铺的方式)
    0621.用WebView展示html数据
    iOS的Quartz2D篇——基本图形的绘制
  • 原文地址:https://www.cnblogs.com/xiongmaotailang/p/5249589.html
Copyright © 2011-2022 走看看