生产环境WAS产生javacore、dmp、dump文件分析

目录

一、分析工具

二、Java 转储(Java dump)

Java 转储内容(Java dump contents)

标题(TITLE)

GP信息(GPINFO)

环境信息(ENVINFO)

本地内存信息(NATIVEMEMINFO)

内存信息(MEMINFO)

锁(LOCKS)

线程(THREADS)

钩子(HOOKS)

共享类(SHARED CLASSES)

类(CLASSES)

场景(Scenarios)

一般保护故障(General Protection Fault)

Java 内存溢出错误(Java OutOfMemoryError)

本机 OutOfMemoryError(Native OutOfMemoryError)

死锁(Deadlock)

挂起(Hang)


一、分析工具

构件类型

问题类型

典型输入

可用的工具

Verbose Garbage Collection 日志 (verbosegGC)

内存泄漏、内存不足情况

诸如 native_stdout.log 等 JVM 日志文件中的 verbosegc 语句

1. IBM Monitoring and Diagnostic Tools for Java - Garbage Collection and Memory Visualizer (GCMV)

2. IBM Pattern Modeling and Analysis Tool for Java Garbage Collector (PMAT)

3. Diagnostic Tool for Java Garbage Collector

Java 转储javacore

崩溃、挂起、性能瓶颈、JVM 意外终止

javacore.*.txt

javacorePID.*.txt

4. IBM Thread and Monitor Dump Analyzer for Java (TMDA)

5. Thread Analyzer

线程

锁分析

运行的 JVM 的连接

6. IBM Lock Analyzer for Java

堆转储

内存泄漏、内存不足情况

IBM 可移植堆转储 (heapdump.phd)

IBM 文本堆转储 (heapdump.txt)

HPROF 堆转储格式 (hprof.txt)

7. Memory Dump Diagnostic For Java (MDD4J)

8. HeapAnalyzer

9. Heaproots

系统或核心转储

系统状况的一般分析;检测异常;系统状态的深入分析。

特殊情况:意外崩溃。

文件名:与操作系统相关(示例包括 core.dmp、user.dmp 或者只是“core”)。

在将该文件用作分析的输入之前,必须使用 jextract 工具处理该文件,从而产生 core.dmp.zip 文件(IBM JVM 5.0 及更高版本)或 core.sdff 文件 (IBM JVM 1.4.2)。

注意:仅适用于 IBM JVM。

IBM Monitoring and Diagnostic Tools for Java - Dump Analyzer及其在WebSphere Application Server modules for Dump Analyzer中的扩展

二、Java 转储(Java dump)

Java dumps(有时称为Java 核心)是在 VM 因操作系统信号或用户启动的按键组合而意外结束时生成的。您还可以通过从应用程序中以编程方式调用 Dump API 或在命令行上OutOfMemoryError指定选项来生成 Java 转储。-Xdump:java

如果您的 Java 应用程序崩溃或挂起,Java 转储可以提供有用的信息来帮助您诊断根本原因。

  • 如果您的应用程序崩溃,将针对以下类型的故障自动生成 Java 转储:
    • VM 收到意外信号或断言失败
    • VM 内存不足
  • kill -3如果您的应用程序挂起,您可以通过向 VM发送 SIGQUIT 信号 ( ) 来触发 Java 转储的生成。

注意:在 Windows® 上,如果您在控制台窗口中启动 VM,则可以强制 VM 响应 SIGBREAK 信号(Ctrl-Break 键盘组合)生成 Java 转储。如果您没有在控制台窗口中启动,则 Windows 上没有与 Linux 命令等效的用于发送信号的命令。这里唯一的选项是通过在 Windows 任务管理器的“进程”kill选项卡中找到 VM 进程并单击 “创建转储文件”来触发完整系统转储。

为了帮助您了解 Java 转储如何帮助您进行问题诊断,本主题包含了一些场景来帮助您解释数据:

Java 转储内容(Java dump contents)

Java dumps总结了事件发生时虚拟机的状态,其中大部分信息与虚拟机的组件有关。该文件由多个部分组成,提供不同类型的信息。

标题(TITLE)

Java dump file 的第一部分提供了有关触发转储生成的事件的信息。在下面的示例中,您可以看到某个vmstop事件在指定的日期和时间触发了转储。

0SECTION       TITLE subcomponent dump routine
NULL           ===============================
1TICHARSET     UTF-8
1TISIGINFO     Dump Event "vmstop" (00000002) Detail "#0000000000000000" received
1TIDATETIMEUTC Date: 2021/04/23 at 18:02:44:017 (UTC)
1TIDATETIME    Date: 2021/04/23 at 14:02:44:017
1TITIMEZONE    Timezone: UTC-4 (EDT)
1TINANOTIME    System nanotime: 379202644260787
1TIFILENAME    Javacore filename:    /home/doc-javacore/javacore.20210423.140244.1175.0001.txt
1TIREQFLAGS    Request Flags: 0x81 (exclusive+preempt)
1TIPREPSTATE   Prep State: 0x106 (vm_access+exclusive_vm_access+trace_disabled)

GP信息(GPINFO)

GPINFO 部分提供了有关 VM 所运行系统的一般信息。以下示例取自在 Linux 系统上生成的 Java 转储。

NULL           ------------------------------------------------------------------------
0SECTION       GPINFO subcomponent dump routine
NULL           ================================
2XHOSLEVEL     OS Level         : Linux 3.10.0-862.11.6.el7.x86_64
2XHCPUS        Processors -
3XHCPUARCH       Architecture   : amd64
3XHNUMCPUS       How Many       : 4
3XHNUMASUP       NUMA is either not supported or has been disabled by user
NULL
1XHERROR2      Register dump section only produced for SIGSEGV, SIGILL or SIGFPE.
NULL

此部分的内容可能有所不同,具体取决于转储的原因。例如,如果转储是由一般保护故障 (gpf) 引起的,则还会记录发生崩溃的库以及显示为 的值VM flags。此值可以提供一些线索,说明可能涉及 VM 的哪个组件。在输出中查找以下行:

1XHFLAGS       VM flags:0000000000000000

记录的十六进制数VM flags以 MSSSS 结尾,其中 M 是 VM 组件,SSSS 是组件特定代码,如下表所示:

成分

代码值

翻译员

0x10000

气相色谱

0x20000

增长堆栈

0x30000

杰尼提

0x40000

代码生成

0x50000

BC验证

0x60000

实时验证

0x70000

共享类

0x80000

0000000000000000(0x00000) 表示崩溃发生在虚拟机外部。

环境信息(ENVINFO)

本节包含有关崩溃发生环境的有用信息,包括以下数据:

  • Java 版本 ( 1CIJAVAVERSION)
  • Eclipse OpenJ9™ VM 和子组件版本信息(1CIVMVERSION、、、、)1CIJ9VMVERSION1CIJITVERSION1CIOMRVERSION1CIJCLVERSION
  • VM 启动时间(1CISTARTTIME)和进程信息(1CIPROCESSID
  • Java 主目录 ( 1CIJAVAHOMEDIR) 和 DLL ( 1CIJAVADLLDIR) 目录
  • 命令行上传递的用户参数(1CIUSERARGS),标识那些被忽略的参数(1CIIGNOREDARGS
  • 系统对用户的限制(1CIUSERLIMITS
  • 环境变量已就位(1CIENVVARS
  • 系统信息(1CISYSINFO
  • CPU 信息(1CICPUINFO
  • 控制组 (Cgroup) 信息 ( 1CICGRPINFO)

为了清楚起见,以下示例显示了本节的缩短版本,其中...表示已删除的行:

NULL           ------------------------------------------------------------------------
0SECTION       ENVINFO subcomponent dump routine
NULL           =================================
1CIJAVAVERSION JRE 9 Linux amd64-64 (build 9.0.4-internal+0-adhoc..openj9-openjdk-jdk9)
1CIVMVERSION   20180830_000000
1CIJ9VMVERSION 8e7c6ec
1CIJITVERSION  8e7c6ec
1CIOMRVERSION  553811b_CMPRSS
1CIJCLVERSION  ec1d223 based on jdk-9.0.4+12
1CIJITMODES    JIT enabled, AOT enabled, FSD disabled, HCR enabled
1CIRUNNINGAS   Running as a standalone JVM
1CIVMIDLESTATE VM Idle State: ACTIVE
1CICONTINFO    Running in container : FALSE
1CICGRPINFO    JVM support for cgroups enabled : TRUE
1CISTARTTIME   JVM start time: 2018/08/30 at 21:55:47:387
1CISTARTNANO   JVM start nanotime: 22012135233549
1CIPROCESSID   Process ID: 30285 (0x764D)
1CICMDLINE     [not available]
1CIJAVAHOMEDIR Java Home Dir:   /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk
1CIJAVADLLDIR  Java DLL Dir:    /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/bin
1CISYSCP       Sys Classpath:
1CIUSERARGS    UserArgs:
2CIUSERARG               -Xoptionsfile=/home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/options.default
...
1CIIGNOREDARGS Ignored Args:
2CIIGNOREDARG            -XX:+UseCompressedOop
2CIIGNOREDARG            -XX:CompressedClassSpaceSize=528482304
NULL
1CIUSERLIMITS  User Limits (in bytes except for NOFILE and NPROC)
NULL           ------------------------------------------------------------------------
NULL           type                            soft limit           hard limit
2CIUSERLIMIT   RLIMIT_AS                        unlimited            unlimited
2CIUSERLIMIT   RLIMIT_CORE                              0            unlimited
2CIUSERLIMIT   RLIMIT_CPU                       unlimited            unlimited
2CIUSERLIMIT   RLIMIT_DATA                      unlimited            unlimited
2CIUSERLIMIT   RLIMIT_FSIZE                     unlimited            unlimited
2CIUSERLIMIT   RLIMIT_LOCKS                     unlimited            unlimited
2CIUSERLIMIT   RLIMIT_MEMLOCK                       65536                65536
2CIUSERLIMIT   RLIMIT_NOFILE                         4096                 4096
2CIUSERLIMIT   RLIMIT_NPROC                          4096                30592
2CIUSERLIMIT   RLIMIT_RSS                       unlimited            unlimited
2CIUSERLIMIT   RLIMIT_STACK                       8388608            unlimited
2CIUSERLIMIT   RLIMIT_MSGQUEUE                     819200               819200
2CIUSERLIMIT   RLIMIT_NICE                              0                    0
2CIUSERLIMIT   RLIMIT_RTPRIO                            0                    0
2CIUSERLIMIT   RLIMIT_SIGPENDING                    30592                30592
NULL
1CIENVVARS     Environment Variables
NULL           ------------------------------------------------------------------------
2CIENVVAR      XDG_VTNR=1
2CIENVVAR      SSH_AGENT_PID=2653
...
NULL
1CISYSINFO     System Information
NULL           ------------------------------------------------------------------------
2CISYSINFO     /proc/sys/kernel/core_pattern = core
2CISYSINFO     /proc/sys/kernel/core_uses_pid = 1
NULL
1CICPUINFO     CPU Information
NULL           ------------------------------------------------------------------------
2CIPHYSCPU     Physical CPUs: 8
2CIONLNCPU     Online CPUs: 8
2CIBOUNDCPU    Bound CPUs: 8
2CIACTIVECPU   Active CPUs: 0
2CITARGETCPU   Target CPUs: 8
2CIJITFEATURE  CPU features (JIT): fpu cx8 cmov mmx sse sse2 ssse3 fma sse4_1 popcnt aesni osxsave avx avx2 rdt_m
2CIAOTFEATURE  CPU features (AOT): fpu cx8 cmov mmx sse sse2 ssse3 fma sse4_1 popcnt aesni osxsave avx avx2 rdt_m
NULL
1CICGRPINFO    Cgroup Information
NULL           ------------------------------------------------------------------------
2CICGRPINFO    subsystem : cpu
2CICGRPINFO    cgroup name : /
3CICGRPINFO    CPU Period : 100000 microseconds
3CICGRPINFO    CPU Quota : Not Set
3CICGRPINFO    CPU Shares : 1024
3CICGRPINFO    Period intervals elapsed count : 0
3CICGRPINFO    Throttled count : 0
3CICGRPINFO    Total throttle time : 0 nanoseconds
2CICGRPINFO    subsystem : cpuset
2CICGRPINFO    cgroup name : /
3CICGRPINFO    CPU exclusive : 1
3CICGRPINFO    Mem exclusive : 1
3CICGRPINFO    CPUs : 0-7
3CICGRPINFO    Mems : 0
2CICGRPINFO    subsystem : memory
2CICGRPINFO    cgroup name : /
3CICGRPINFO    Memory Limit : Not Set
3CICGRPINFO    Memory + Swap Limit : Not Set
3CICGRPINFO    Memory Usage : 5363396608 bytes
3CICGRPINFO    Memory + Swap Usage : 5363396608 bytes
3CICGRPINFO    Memory Max Usage : 0 bytes
3CICGRPINFO    Memory + Swap Max Usage : 0 bytes
3CICGRPINFO    Memory limit exceeded count : 0
3CICGRPINFO    Memory + Swap limit exceeded count : 0
3CICGRPINFO    OOM Killer Disabled : 0
3CICGRPINFO    Under OOM : 0
NULL

本地内存信息(NATIVEMEMINFO)

malloc()此部分记录使用库函数(例如和)请求的本机内存的信息mmap()。值按组件细分提供,指示分配的总字节数和本机内存分配数。在以下示例中,为 VM 类分配了 4,682,840 字节的本机内存(但尚未释放),这对应于 141 个分配。

NULL           ------------------------------------------------------------------------
0SECTION       NATIVEMEMINFO subcomponent dump routine
NULL           =================================
0MEMUSER
1MEMUSER       JRE: 2,569,088,312 bytes / 4653 allocations
1MEMUSER       |
2MEMUSER       +--VM: 2,280,088,336 bytes / 2423 allocations
2MEMUSER       |  |
3MEMUSER       |  +--Classes: 4,682,840 bytes / 141 allocations
2MEMUSER       |  |
3MEMUSER       |  +--Memory Manager (GC): 2,054,966,784 bytes / 433 allocations
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Java Heap: 2,014,113,792 bytes / 1 allocation
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Other: 40,852,992 bytes / 432 allocations
2MEMUSER       |  |
3MEMUSER       |  +--Threads: 10,970,016 bytes / 156 allocations
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Java Stack: 197,760 bytes / 16 allocations
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Native Stack: 10,616,832 bytes / 17 allocations
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Other: 155,424 bytes / 123 allocations
2MEMUSER       |  |
3MEMUSER       |  +--Trace: 180,056 bytes / 263 allocations
2MEMUSER       |  |
3MEMUSER       |  +--JVMTI: 17,776 bytes / 13 allocations
2MEMUSER       |  |
3MEMUSER       |  +--JNI: 36,184 bytes / 52 allocations
2MEMUSER       |  |
3MEMUSER       |  +--Port Library: 208,179,632 bytes / 72 allocations
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Unused <32bit allocation regions: 208,168,752 bytes / 1 allocation
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Other: 10,880 bytes / 71 allocations
2MEMUSER       |  |
3MEMUSER       |  +--Other: 1,055,048 bytes / 1293 allocations
1MEMUSER       |
2MEMUSER       +--JIT: 288,472,816 bytes / 140 allocations
2MEMUSER       |  |
3MEMUSER       |  +--JIT Code Cache: 268,435,456 bytes / 1 allocation
2MEMUSER       |  |
3MEMUSER       |  +--JIT Data Cache: 2,097,216 bytes / 1 allocation
2MEMUSER       |  |
3MEMUSER       |  +--Other: 17,940,144 bytes / 138 allocations
1MEMUSER       |
2MEMUSER       +--Class Libraries: 13,432 bytes / 25 allocations
2MEMUSER       |  |
3MEMUSER       |  +--VM Class Libraries: 13,432 bytes / 25 allocations
3MEMUSER       |  |  |
4MEMUSER       |  |  +--sun.misc.Unsafe: 3,184 bytes / 13 allocations
4MEMUSER       |  |  |  |
5MEMUSER       |  |  |  +--Direct Byte Buffers: 1,056 bytes / 12 allocations
4MEMUSER       |  |  |  |
5MEMUSER       |  |  |  +--Other: 2,128 bytes / 1 allocation
3MEMUSER       |  |  |
4MEMUSER       |  |  +--Other: 10,248 bytes / 12 allocations
1MEMUSER       |
2MEMUSER       +--Unknown: 513,728 bytes / 2065 allocations
NULL

此部分不记录由应用程序或 JNI 代码分配的内存,并且通常比操作系统工具记录的值略小。

内存信息(MEMINFO)

本节涉及内存管理,以十进制和十六进制格式提供虚拟机中对象堆、内部内存、用于类的内存、JIT 代码缓存和 JIT 数据缓存的内存使用情况明细。您还可以在生成转储时找出正在使用的垃圾回收策略。

对象内存区域 ( 1STHEAPTYPE) 记录正在使用的每个内存区域、其起始和结束地址以及区域大小。还记录了用于内部内存、类内存、JIT 代码缓存和 JIT 数据缓存的内存段的更多信息 ( 1STSEGMENT)。此信息包括段控制数据结构的地址、本机内存段的起始和结束地址以及段大小。

为了清楚起见,以下示例显示了本节的缩短版本,其中...表示已删除的行:

NULL           ------------------------------------------------------------------------
0SECTION       MEMINFO subcomponent dump routine
NULL           =================================
NULL
1STHEAPTYPE    Object Memory
NULL           id                 start              end                size               space/region
1STHEAPSPACE   0x00007FF4F00744A0         --                 --                 --         Generational
1STHEAPREGION  0x00007FF4F0074CE0 0x0000000087F40000 0x0000000088540000 0x0000000000600000 Generational/Tenured Region
1STHEAPREGION  0x00007FF4F0074930 0x00000000FFE00000 0x00000000FFF00000 0x0000000000100000 Generational/Nursery Region
1STHEAPREGION  0x00007FF4F0074580 0x00000000FFF00000 0x0000000100000000 0x0000000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值