【问题标题】:Tomcat crashes due to native code in JDK for malloc_consolidate由于 JDK 中用于 malloc_consolidate 的本机代码,Tomcat 崩溃
【发布时间】:2017-04-19 15:29:36
【问题描述】:

当 JavaThread "Finalizer" 在 JVM 中运行时,生产环境中的 tomcat 服务器经常崩溃,下面的 hs_err_pid。

此外,错误来自 libc.so 中 malloc_consolidate 的 Java 本机代码。

# Problematic frame:
# C  [libc.so.6+0x75f85]  malloc_consolidate+0xf5
#
---------------  T H R E A D  ---------------

Current thread (0x00007f2c6018f000):  JavaThread "Finalizer" daemon [_thread_in_native, id=11112, stack(0x00007f2c3f1f2000,0x00007f2c3f2f3000)]


Stack: [0x00007f2c3f1f2000,0x00007f2c3f2f3000],  sp=0x00007f2c3f2f13e0,  free space=1020k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libc.so.6+0x75f85]  malloc_consolidate+0xf5

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J 2177  java.util.zip.Inflater.end(J)V (0 bytes) @ 0x00007f2c50e3d301 [0x00007f2c50e3d2c0+0x41]
J 3502 C2 java.util.zip.ZipFile.close()V (223 bytes) @ 0x00007f2c514371c4 [0x00007f2c51436900+0x8c4]
J 7022 C2 java.util.zip.ZipFile.finalize()V (5 bytes) @ 0x00007f2c511b43e0 [0x00007f2c511b43a0+0x40]
J 11603% C2 java.lang.ref.Finalizer$FinalizerThread.run()V (55 bytes) @ 0x00007f2c528d6f78 [0x00007f2c528d6cc0+0x2b8]
v  ~StubRoutines::call_stub

Heap:
 PSYoungGen      total 2318848K, used 222178K [0x0000000720000000, 0x00000007c0000000, 0x00000007c0000000)
  eden space 2016256K, 5% used [0x0000000720000000,0x0000000726d4fbe0,0x000000079b100000)
  from space 302592K, 36% used [0x000000079b100000,0x00000007a1ca8fe0,0x00000007ad880000)
  to   space 289792K, 0% used [0x00000007ae500000,0x00000007ae500000,0x00000007c0000000)
 ParOldGen       total 2586624K, used 522596K [0x00000005e0000000, 0x000000067de00000, 0x0000000720000000)
  object space 2586624K, 20% used [0x00000005e0000000,0x00000005ffe59390,0x000000067de00000)
 Metaspace       used 148258K, capacity 154058K, committed 154200K, reserved 1183744K
  class space    used 18157K, capacity 19308K, committed 19328K, reserved 1048576K

Internal exceptions (10 events):
Event: 61.804 Thread 0x00007f2c2c0c6800 Exception <a 'java/io/IOException'> (0x0000000798129018) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 709]
Event: 61.816 Thread 0x00007f2c2c0c6800 Exception <a 'java/io/IOException'> (0x0000000798304680) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 709]
Event: 61.816 Thread 0x00007f2c2c0c6800 Exception <a 'java/io/IOException'> (0x0000000798305b90) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 709]
Event: 62.015 Thread 0x00007f2c2c0bb800 Exception <a 'java/io/IOException'> (0x0000000720db4188) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 709]
Event: 62.015 Thread 0x00007f2c2c0bb800 Exception <a 'java/io/IOException'> (0x0000000720db47e0) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 709]
Event: 62.046 Thread 0x00007f2c2c0bb800 Exception <a 'java/io/IOException'> (0x0000000720dbc2f0) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 709]
Event: 62.046 Thread 0x00007f2c2c0bb800 Exception <a 'java/io/IOException'> (0x0000000720dbd800) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 709]
Event: 62.082 Thread 0x00007f2c606f8800 Exception <a 'java/lang/InternalError'> (0x0000000721cfe9b8) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 735]
Event: 62.082 Thread 0x00007f2c606f8800 Exception <a 'java/lang/InternalError'> (0x0000000721cfeda8) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jni.cpp, line 735]
Event: 62.082 Thread 0x00007f2c606f8800 Exception <a 'java/lang/InternalError'> (0x0000000721cfeda8) thrown at [/HUDSON3/workspace/8-2-build-linux-amd64/jdk8u121/8372/hotspot/src/share/vm/prims/jvm.cpp, line 1394]

VM Arguments:
jvm_args: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap -Djava.util.Arrays.useLegacyMergeSort=true -Xms3072M -Xmx7680M -Dsun.zip.disableMemoryMapping=true 

【问题讨论】:

  • 请问您使用的是哪个版本的java和tomcat
  • Java:1.8。更新 121 和 Tomcat 8.15
  • Tomcat 8.0.15 还是 8.5.15 ?
  • 我可以知道您使用的是哪个 ide 吗?
  • Tomcat 是 8.0.15。 IDE 是 IntelliJ,但这有什么关系

标签: java tomcat


【解决方案1】:

-Dsun.zip.disableMemoryMapping=true 应该可以解决这个问题,JDK 9 中改进了 zip 实现,崩溃表明,在终结器尝试关闭文件句柄期间,它仍然没有释放。 升级 JDK9 应该可以避免这个问题 - https://jdk9.java.net/download/

【讨论】:

  • 谢谢@Fairoz。我已经实现了上述标志,但它没有帮助。另外,等待 JDK 9 准备好生产。
  • 7 月份会发生,同时你可以使用 9 个 ea 版本,在 jdk9.java.net/download 中可用
  • 请分享您的反馈..:.
  • 我尝试使用 1.9.ea138 更新并根据它移植代码。但是一段时间后版本升级到 152,并且自 138 以来它们在 JDK 中发生了很大变化。因此,我无法使用现有的 hibernate 和 spring 版本移植 158 版本。它需要的不仅仅是 jdk 更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多