阅读更多
https://www.cnblogs.com/wyb628/p/8567610.html (分析工具使用说明)
https://blog.csdn.net/namesliu/article/details/7018086 (JavaDump文件说明)
https://www.oschina.net/question/129540_23220 (生成javadump、heapdump、systemdump文件的方法)
http://www.codeweblog.com/websphere-was-generated-javacore/
https://www-01.ibm.com/support/docview.wss?uid=swg21384926 (was下生成heapdump文件的方法)
http://wpcertification.blogspot.com/2009/07/manually-generating-heap-dump.html (was下生成heapdump文件的方法[写成脚本了])
https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.api.80.doc/com.ibm.jvm.ras/index.html
https://docs.oracle.com/javase/8/docs/jdk/api/attach/spec/index.html (VirtualMachine API说明, 这个VirtualMachine类只在1.6以上的版本才有)
https://www.cnblogs.com/pengineer/p/5086428.html (Hotspot JVM的常用选项)
https://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean.html (com.sun.management.HotSpotDiagnosticMXBean的API文档)
https://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/package-summary.html (com.sun.management这个包的API[包括所有类])
com.sun.managementOperatingSystemMXBean可以获取操作系统信息
操作系统的转储文件可用于IBM和HotSpot JVM。对于IBM JVM,您可以使用jextract工具(JDK 自带)来创建转储文件,并
将它们直接加载到Memory Analyzer中;对于HotSpot JVM,您可以使用jmap工具从内核转储文件中提取堆Dump。
(我们将在文章后面内容中讨论这两种技术。)然而,在一些操作系统上,您必须保证这个进程在创建内核转储文件之前
具有足够的
ulimit。如果
ulimit不正确,那么您必须修改它们,并重新启动这个进程,才能够收集一个转储文件。
ibm jdk manual generate heapdump
static com.ibm.jvm.Dump.JavaDump()
static com.ibm.jvm.Dump.HeapDump()
static com.ibm.jvm.Dump.SystemDump()
static com.ibm.jvm.Dump.javaDumpToFile()
static com.ibm.jvm.Dump.heapDumpToFile()
static com.ibm.jvm.Dump.systemDumpToFile()
static com.ibm.jvm.Dump.javaDumpToFile(java.lang.String fileNamePattern)
static com.ibm.jvm.Dump.heapDumpToFile(java.lang.String fileNamePattern)
static com.ibm.jvm.Dump.systemDumpToFile(java.lang.String fileNamePattern)
static com.ibm.jvm.Dump.triggerDump(java.lang.String dumpOptions)
【
注】static类型的方法不用初始化,在类里直接写com.ibm.jvm.Dump.HeapDump()就可以被执行,在需要生成HeapDump文件的时候手动触发。这个com.ibm.jvm.Dump.HeapDump()接口要借助Java Attach API来执行,因为这个接口没有类似pid这样的参数,Java Attach API中VirtualMachine类有attach()方法,这个attach可以接收pid参数,然后再调用VirtualMachine类的loadAgent方法把你自己写的jar加载到jvm里并运行,你自己写的类必须是main方法的类。
类似set PRE_CLASSPATH=%DOMAIN_HOME%/lib/antlr-2.7.6.jar
java -cp %DOMAIN_HOME%/lib/mydump.jar com.shihuan.dump.genete.MyHeapDump
AIX: gencore 这个命令必须有dbx组件支持。
Linux: gcore 这个命令必须有gdb组件支持。
上面的命令跟kill -6 pid是一样的作用,但kill -6 pid是系统级别的信号,不需要组件支持。
tcpdump不是IBM JDK的内容,但需要关注。