`

大对象导致JVM Crash (Jboss) 分析及解决 - JDK 已知bug

阅读更多

最近在一个项目中,web 应用跑一段时间后,  JBoss JVM crash ,web日志中没有任何异常。

存放日志的地方发现有 hs_err_pid25052.log,发现这个文件,就知道是JVM crash了。

 

打开这个文件然后分析:

---------------  T H R E A D  ---------------

Current thread (0x0000000050682000):  GCTaskThread [stack: 0x00000000413fb000,0x00000000414fc000] [id=25059]
siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000018
Registers:
此处省略.........
Top of Stack: (sp=0x00000000414fae70)
此处省略.........
Instructions: (pc=0x00002aaffd33163c)
此处省略.........
Stack: [0x00000000413fb000,0x00000000414fc000],  sp=0x00000000414fae70,  free space=3ff0000000000000018k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x62263c]
V  [libjvm.so+0x6230b0]
V  [libjvm.so+0x625672]
V  [libjvm.so+0x365dda]
V  [libjvm.so+0x5da2af]

 分析1:JVM crash时,执行的线程GCTaskThread;V  [libjvm.so+0x62263c]
代表执行的是VM代码,也就是说执行虚拟机的代码时JVM crash的。 
   

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x00000000517fe800 JavaThread "notifier[172.29.63.18:9090]104" daemon [_thread_blocked, id=27922, stack(0x000000004c36d000,0x000000004c46e000)]
  0x0000000050f35000 JavaThread "RpcClientIoHandlerImpl-processor-106" daemon [_thread_blocked, id=27921, stack(0x000000004db85000,0x000000004dc86000)]
此处省略.........

Other Threads:
  0x00000000506d2000 VMThread [stack: 0x0000000040b6a000,0x0000000040c6b000] [id=25062]
  0x0000000050713800 WatcherThread [stack: 0x000000004085f000,0x0000000040960000] [id=25069]

=>0x0000000050682000 (exited) GCTaskThread [stack: 0x00000000413fb000,0x00000000414fc000] [id=25059]

 

分析2:这里日志是当前所有的Thread的列表。exited标示说明这个是执行线程。  

VM state:at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread:  ([mutex/lock_event])
[0x0000000050663370] Threads_lock - owner thread: 0x00000000506d2000
[0x0000000050663870] Heap_lock - owner thread: 0x00000000517c4800

Heap
 PSYoungGen      total 43328K, used 43136K [0x00002aaacb760000, 0x00002aaace200000, 0x00002aaad6200000)
  eden space 43008K, 100% used [0x00002aaacb760000,0x00002aaace160000,0x00002aaace160000)
  from space 320K, 40% used [0x00002aaace1b0000,0x00002aaace1d0000,0x00002aaace200000)
  to   space 320K, 40% used [0x00002aaace160000,0x00002aaace180000,0x00002aaace1b0000)
 PSOldGen        total 349568K, used 119371K [0x00002aaab6200000, 0x00002aaacb760000, 0x00002aaacb760000)
  object space 349568K, 34% used [0x00002aaab6200000,0x00002aaabd692e50,0x00002aaacb760000)
 PSPermGen       total 131072K, used 62813K [0x00002aaaae200000, 0x00002aaab6200000, 0x00002aaab6200000)
  object space 131072K, 47% used [0x00002aaaae200000,0x00002aaab1f57670,0x00002aaab6200000)

 

 分析3上,从上面的日志可以肯定是Young GC的时候发生了异常,导致JVM crash。

 

 

在网上查询这个异常,发现很多人碰到了这个问题然后看到sun jdk 官网上,这个版本(1.6_18有已知的问题,其中一条讲的就是我们的问题:

 

Card-Marking Optimization Issue
•	A flaw in the implementation of a card-marking performance optimization in the JVM can cause heap corruption under some circumstances. This issue affects the CMS garbage collector prior to 6u18, and the CMS, G1 and Parallel Garbage Collectors in 6u18. The serial garbage collector is not affected. Applications most likely to be affected by this issue are those that allocate very large objects which would not normally fit in Eden, or those that make extensive use of JNI Critical Sections (JNI Get/Release*Critical).
This issue will be fixed in the next Java SE 6 update.
Meanwhile, as a workaround to the issue, users should disable this performance optimization by -XX:-ReduceInitialCardMarks. 

 

 

 

解决方案:通过jdk 增加这个 -XX:-ReduceInitialCardMarks 项,避免这个问题。

  

总结:

JVM crash时,充分分析JVM自动生成的hs_err_pid.log文件;如果确定是JVM的问题后,去网上google,并且上Sun的官网。

 

 

 

 

 

分享到:
评论

相关推荐

    bcprov-ext-jdk15on-1.54.jar、bcprov-jdk15on-1.54.jar和ssl-provider-jvm16-0.2.jar

    标题中的"bcprov-ext-jdk15on-1.54.jar"和"bcprov-jdk15on-1.54.jar"是Bouncy Castle提供的Java加密库,用于增强Java平台的安全性。Bouncy Castle是一个开源项目,提供强大的加密算法实现,包括SSL/TLS协议支持,...

    bcprov-ext-jdk15on-154.jar和bcprov-jdk15on-154.jar

    4. **JVM版本问题**:旧版JVM可能不支持某些加密算法,升级JVM或引入Bouncy Castle库可以解决。 解决此类问题的步骤通常包括: 1. **导入Bouncy Castle库**:将"bcprov-ext-jdk15on-154.jar"或"bcprov-jdk15on-154...

    jvm内存分析-jdk17-memoryAnalyer

    4. **大对象列表**:找出占用内存较大的对象,这些可能是导致内存泄漏的原因。 5. **相似对象报告**:找出大量重复的对象,可能存在不必要的资源消耗。 6. **Dominator Tree**:揭示了对象之间的支配关系,有助于找...

    jvm crash的崩溃日志详细分析及注意点

    总之,理解和分析JVM崩溃日志是诊断和解决Java应用程序性能问题的关键步骤。通过深入研究日志内容,我们可以找到可能导致崩溃的原因,从而采取相应的优化措施或修复代码,确保应用的稳定性和可靠性。

    graalvm-jdk-17.0.10-windows

    标题 "graalvm-jdk-17.0.10-windows" 指的是 GraalVM 的一个特定版本,适用于 Windows 操作系统的 Java 开发工具包。GraalVM 是一个高性能的运行时环境,它扩展了 Java 虚拟机(JVM),支持多种编程语言,包括 Java...

    json-lib-2.3-jdk15开发包和所有依赖包

    `json-lib-2.3-jdk15`是这个库的一个特定版本,兼容JDK 1.5,这意味着它可以在运行JDK 1.5或更高版本的Java环境中使用。 在Java开发中,`json-lib`库提供了以下关键功能: 1. **JSON对象的创建与解析**:通过`...

    openjdk-jdk8u-jdk8u

    openjdk-jdk8所有源码,供相关人员越多jvm底层细节!

    JVM crash 错误日志分析

    在Java开发过程中,JVM(Java Virtual Machine)的崩溃可能会导致应用程序无法正常运行,严重影响服务的稳定性和用户体验。当JVM出现崩溃时,系统会产生一个名为“hs_err_pid.log”的错误日志文件,这个文件包含了...

    graalvm-jdk-20-linux-aarch64-bin.tar.gz

    标题中的"graalvm-jdk-20-linux-aarch64-bin.tar.gz"是指一个针对Linux Arm架构的GraalVM JDK 20版本的压缩文件。GraalVM是一种高性能的运行时环境,它集成了Java虚拟机(JVM)、JavaScript引擎、Python解释器等多种...

    OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz

    OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz 是一个针对aarch64(也称为ARM64或AArch64)架构的Linux系统的OpenJDK(Open Java Development Kit)版本。这个压缩包包含的是OpenJDK 8 Update 252(8u252b09...

    bcprov-jdk15on-166.zip

    "jdk15on" 表示这些版本是为Java 1.5及更高版本设计的,意味着它们兼容从Java 1.5到最新Java版本的环境。 描述中提到的 "tls1.2 不支持tls1.2 bcprov-ext-jdk15" 是关于TLS(Transport Layer Security)协议的问题...

    Ubuntu下安装sun-java6-jdk和eclipse

    在深入探讨如何在Ubuntu下安装sun-java6-jdk和eclipse之前,我们先来了解一些基础知识,这将有助于更好地理解整个安装过程。 ### Java在Linux系统中的重要性 Java是一种广泛使用的编程语言,它以其“一次编写,...

    java-jdk1.8-jdk-8u191-linux-x64.zip

    JDK(Java Development Kit)是开发和运行Java应用程序的基础,它包括了Java编译器、Java虚拟机(JVM)、类库以及各种工具,使得开发者能够编写、测试和部署Java应用。 JDK 1.8是Java语言的一个重要里程碑,引入了...

    JRockit (jrockit-jdk1.6.0_45-R28.2.7-4.1.0-windows-x64.exe)

    Oracle JRockit是一款高性能、优化过的Java虚拟机(JVM),专为服务器端应用程序设计,尤其是在需要高吞吐量和低延迟的环境中表现卓越。它曾经是Oracle公司的一个重要产品,但现在已被Java HotSpot VM所取代,后者是...

    windows-jdk-hsdis-amd64.rar

    标题中的“windows-jdk-hsdis-amd64.rar”提到了Windows平台上的Java开发工具包(JDK)以及一个特定的组件“hsdis-amd64”。...正确配置和使用HSDis可以极大地提升开发者的洞察力和解决问题的能力。

    java-jdk1.8-jdk-8u171-linux-x64.zip

    Java JDK 1.8是Java开发工具包的一个重要版本,主要针对Linux x64平台设计。JDK(Java Development Kit)是开发和运行Java应用程序必不可少的软件包,它包含了Java编译器、类库、Java运行环境以及其他相关工具。在这...

    OpenJDK11U-jdk_x64_windows_openj9_11.0.10_9_openj9-0.24.0.zip

    OpenJDK 11U-jdk_x64_windows_openj9_11.0.10_9_openj9-0.24.0.zip 是一个针对Windows平台的64位OpenJDK 11更新版(Update)的压缩包,其中集成了OpenJ9虚拟机。这个版本的OpenJDK基于11.0.10,OpenJ9版本为0.24.0。...

    JRockit (jrockit-jdk1.6.0_45-R28.2.7-4.1.0-linux-x64.bin)

    1. **内存管理**:JRockit采用了先进的垃圾收集算法,如并发标记清除(Concurrent Mark Sweep, CMS)和大对象区(Large Object Area, LOA),旨在减少停顿时间并提高整体性能。 2. **动态编译**:JRockit的Just-In-...

    sun-java6-jdk

    JDK是Java程序员开发Java应用程序的基础,包括了Java编译器(javac)、Java虚拟机(JVM)、Java应用程序启动器(java命令)、Java文档生成器(javadoc)以及一系列用于调试、性能分析和其他用途的工具。 2. **Java ...

    graalvm-jdk-21.0.2-windows

    《GraalVM JDK 21.0.2在Windows平台的应用与详解》 GraalVM是一款高性能的运行时环境,集成了多种语言运行时,包括Java、JavaScript、Python等,同时也支持运行基于JVM的其他语言。GraalVM JDK 21.0.2是针对Java...

Global site tag (gtag.js) - Google Analytics