java - Java Runtime Environment 内存不足,无法在 Tomcat 中继续

标签 java tomcat jvm jvm-crash

我是一个tomcat/技术新手,所以如果我在问题描述中有任何错误,我很抱歉。

我正在尝试在我们的测试服务器上运行仪表板应用程序 DOMO。十年以来,我们一直在使用 tomcat 来运行该应用程序,通常一切正常。最近,当我尝试运行该应用程序时,它无法运行。我清除了工作目录并尝试再次运行 tomcat。没有任何效果,DOMO(仪表板工具)的应用程序日志出现以下错误:

Caused by: java.io.IOException: Insufficient system resources exist to complete the requested service
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.Win32FileSystem.canonicalize(Unknown Source)
at java.io.File.getCanonicalPath(Unknown Source)
at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:168)
at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:139)
at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:951)
... 14 more

系统错误日志如下所示:

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (allocation.cpp:211), pid=3828, tid=2012
#
# JRE version: 6.0_31-b05
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.6-b01 mixed mode windows-amd64 compressed oops)

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

Current thread (0x000000000db09000):  JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=2012, stack(0x000000000dc80000,0x000000000dcc0000)]

Stack: [0x000000000dc80000,0x000000000dcc0000]

Current CompileTask:
C2:   8590 207  !   org.apache.catalina.loader.WebappClassLoader.findResourceInternal(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/catalina/loader/ResourceEntry; (1260 bytes)


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

Java Threads: ( => current thread )
  0x000000000ddee800 JavaThread "Thread-5" daemon [_thread_in_native, id=1272, stack(0x000000000fba0000,0x000000000fbe0000)]
  0x000000000e843000 JavaThread "Thread-4" daemon [_thread_blocked, id=2396, stack(0x000000000fb60000,0x000000000fba0000)]
  0x000000000e5dd000 JavaThread "HSQLDB Timer @3af7345b" daemon [_thread_blocked, id=1904, stack(0x000000000fb20000,0x000000000fb60000)]
  0x000000000e980800 JavaThread "GC Daemon" daemon [_thread_blocked, id=1564, stack(0x000000000f990000,0x000000000f9d0000)]
  0x000000000db51800 JavaThread "Thread-2" [_thread_in_native, id=1232, stack(0x000000000dd40000,0x000000000dd80000)]
  0x000000000db15000 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1520, stack(0x000000000dcc0000,0x000000000dd00000)]
=>0x000000000db09000 JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=2012, stack(0x000000000dc80000,0x000000000dcc0000)]
  0x000000000daf1800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=4880, stack(0x000000000dc40000,0x000000000dc80000)]
  0x000000000daec000 JavaThread "Attach Listener" daemon [_thread_blocked, id=3120, stack(0x000000000d9e0000,0x000000000da20000)]
  0x000000000dae7000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=4668, stack(0x000000000d9a0000,0x000000000d9e0000)]
  0x000000000dae5000 JavaThread "Surrogate Locker Thread (Concurrent GC)" daemon [_thread_blocked, id=4304, stack(0x000000000d960000,0x000000000d9a0000)]
  0x000000000da92000 JavaThread "Finalizer" daemon [_thread_blocked, id=2856, stack(0x000000000d920000,0x000000000d960000)]
  0x000000000da8b800 JavaThread "Reference Handler" daemon [_thread_blocked, id=1628, stack(0x000000000d8e0000,0x000000000d920000)]
  0x00000000002bc800 JavaThread "main" [_thread_in_native, id=3176, stack(0x00000000003c0000,0x0000000000400000)]

Other Threads:
  0x000000000da83800 VMThread [stack: 0x000000000d8a0000,0x000000000d8e0000] [id=3136]
  0x000000000db1f000 WatcherThread [stack: 0x000000000dd00000,0x000000000dd40000] [id=5084]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 par new generation   total 19136K, used 16270K [0x000000069e400000, 0x000000069f8c0000, 0x00000006a0d90000)
  eden space 17024K,  83% used [0x000000069e400000, 0x000000069f1d3bf8, 0x000000069f4a0000)
  from space 2112K, 100% used [0x000000069f6b0000, 0x000000069f8c0000, 0x000000069f8c0000)
  to   space 2112K,   0% used [0x000000069f4a0000, 0x000000069f4a0000, 0x000000069f6b0000)
 concurrent mark-sweep generation total 2075904K, used 3163K [0x00000006a0d90000, 0x000000071f8d0000, 0x00000007f6000000)
 concurrent-mark-sweep perm gen total 21440K, used 21277K [0x00000007f6000000, 0x00000007f74f0000, 0x0000000800000000)

Code Cache  [0x0000000000c90000, 0x0000000000f00000, 0x0000000003c90000)
 total_blobs=526 nmethods=224 adapters=255 free_code_cache=49072960 largest_free_block=16512

Dynamic libraries:
0x0000000000400000 - 0x0000000000416000     c:\Tomcat-6.0.26\bin\tomcat6.exe
0x0000000077080000 - 0x0000000077229000     C:\Windows\SYSTEM32\ntdll.dll
0x0000000076f60000 - 0x000000007707f000     C:\Windows\system32\kernel32.dll
0x000007fefcf30000 - 0x000007fefcf9b000     C:\Windows\system32\KERNELBASE.dll
0x0000000076e60000 - 0x0000000076f5a000     C:\Windows\system32\USER32.dll
0x000007fefe350000 - 0x000007fefe3b7000     C:\Windows\system32\GDI32.dll
0x000007fefd680000 - 0x000007fefd68e000     C:\Windows\system32\LPK.dll
0x000007fefd6f0000 - 0x000007fefd7b9000     C:\Windows\system32\USP10.dll
0x000007fefe2b0000 - 0x000007fefe34f000     C:\Windows\system32\msvcrt.dll
0x000007fefe520000 - 0x000007fefe5fb000     C:\Windows\system32\ADVAPI32.dll
0x000007fefe110000 - 0x000007fefe12f000     C:\Windows\SYSTEM32\sechost.dll
0x000007fefd7c0000 - 0x000007fefd8ed000     C:\Windows\system32\RPCRT4.dll
0x000007fefe600000 - 0x000007feff388000     C:\Windows\system32\SHELL32.dll
0x000007fefdfc0000 - 0x000007fefe031000     C:\Windows\system32\SHLWAPI.dll
0x000007fefdad0000 - 0x000007fefdafe000     C:\Windows\system32\IMM32.DLL
0x000007fefd330000 - 0x000007fefd439000     C:\Windows\system32\MSCTF.dll
0x000000006d800000 - 0x000000006dfb8000     C:\Program Files\Java\jre6\bin\server\jvm.dll
0x000007fef9f50000 - 0x000007fef9f8b000     C:\Windows\system32\WINMM.dll
0x000000006d770000 - 0x000000006d77e000     C:\Program Files\Java\jre6\bin\verify.dll
0x000000006d3b0000 - 0x000000006d3d7000     C:\Program Files\Java\jre6\bin\java.dll
0x000000006d7c0000 - 0x000000006d7d2000     C:\Program Files\Java\jre6\bin\zip.dll
0x000007fefdb20000 - 0x000007fefdd23000     C:\Windows\system32\ole32.dll
0x000000006d550000 - 0x000000006d55a000     C:\Program Files\Java\jre6\bin\management.dll
0x0000000010000000 - 0x0000000010124000     C:\Tomcat-6.0.26\bin\tcnative-1.dll
0x0000000077240000 - 0x0000000077247000     C:\Windows\system32\PSAPI.DLL
0x000007fefe0c0000 - 0x000007fefe10d000     C:\Windows\system32\WS2_32.dll
0x000007fefd440000 - 0x000007fefd448000     C:\Windows\system32\NSI.dll
0x000007fefc660000 - 0x000007fefc6b5000     C:\Windows\system32\MSWSOCK.dll
0x000007fefc7f0000 - 0x000007fefc807000     C:\Windows\system32\CRYPTSP.dll
0x000007fefc3d0000 - 0x000007fefc417000     C:\Windows\system32\rsaenh.dll
0x000007fefcd50000 - 0x000007fefcd5f000     C:\Windows\system32\CRYPTBASE.dll
0x000007fefc070000 - 0x000007fefc077000     C:\Windows\System32\wshtcpip.dll
0x000000006d610000 - 0x000000006d627000     C:\Program Files\Java\jre6\bin\net.dll
0x000007fefc7e0000 - 0x000007fefc7e7000     C:\Windows\System32\wship6.dll
0x000007fefbbd0000 - 0x000007fefbbe5000     C:\Windows\system32\NLAapi.dll
0x000007fef8a90000 - 0x000007fef8aa5000     C:\Windows\system32\napinsp.dll
0x000007fefc4f0000 - 0x000007fefc54b000     C:\Windows\system32\DNSAPI.dll
0x000007fef8a80000 - 0x000007fef8a8b000     C:\Windows\System32\winrnr.dll
0x000007fefb2e0000 - 0x000007fefb307000     C:\Windows\system32\IPHLPAPI.DLL
0x000007fefb2d0000 - 0x000007fefb2db000     C:\Windows\system32\WINNSI.DLL
0x000007fef8e60000 - 0x000007fef8e68000     C:\Windows\system32\rasadhlp.dll
0x000007fefb140000 - 0x000007fefb193000     C:\Windows\System32\fwpuclnt.dll
0x000007fefce60000 - 0x000007fefce6f000     C:\Windows\system32\profapi.dll

VM Arguments:
jvm_args: -Dcatalina.base=c:\Tomcat-6.0.26 -Dcatalina.home=c:\Tomcat-6.0.26 -Djava.endorsed.dirs=c:\Tomcat-6.0.26\endorsed -Djava.io.tmpdir=c:\Tomcat-6.0.26\temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=c:\Tomcat-6.0.26\conf\logging.properties -Djava.security.auth.login.config=C:/adconf/bscLogin.conf -Djava.security.krb5.conf=C:/adconf/krb5.ini -XX:MaxPermSize=160m -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -Dsun.rmi.dgc.client.gcInterval=360000 -Dsun.rmi.dgc.server.gcInterval=360000 vfprintf -Xms2048m -Xmx5500m 
java_command: <unknown>
Launcher Type: generic

Environment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_31\bin
CLASSPATH=C:\Domo\CenterView5\Server\domo\WEB-INF\lib\sqljdbc4.jar
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\WindowsPowerShell\v1.0\;
USERNAME=BIDASH-DEV-APP$
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 23 Stepping 6, GenuineIntel



---------------  S Y S T E M  ---------------

OS: Windows NT 6.1 , 64 bit Build 7601 Service Pack 1

CPU:total 2 (1 cores per cpu, 1 threads per core) family 6 model 23 stepping 6, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1

Memory: 4k page, physical 8388152k(2153192k free), swap 33550744k(5136k free)

vm_info: Java HotSpot(TM) 64-Bit Server VM (20.6-b01) for windows-amd64 JRE (1.6.0_31-b05), built on Feb  3 2012 18:34:57 by "java_re" with MS VC++ 8.0 (VS2005)

time: Mon Jun 01 09:44:40 2015
elapsed time: 8 seconds

我已经阅读了很多关于相关主题的帖子,但是由于我有一个应用程序运行了十年,所以突然出现这个问题对我来说真的很奇怪。此外,这个环境就像一个测试服务器,目前我是唯一一个将它用于仪表板的人。因此,系统负载增加的可能性似乎不正确;也没有内存泄漏的可能性。

谁能指导我在这种情况下可能出了什么问题?

谢谢!

编辑:我认为我的问题是不同的,因为它不是要分配一些新的内存块,而是一个 ChuckPool::allocate 操作,它突然停止工作,即使服务器上没有引入新负载也是如此。

最佳答案

JVM 的最小和最大堆大小是多少?由于 JVM 堆内存不足而发生内存不足错误。什么操作系统有Tomcat?它是 32 位操作系统吗?另外,系统上的 RAM 内存是多少?

假设 4GB 或更高 RAM 的 32 位操作系统,最大 JVM 堆大小只能为 1.5GB。因此,将最大和最小堆内存大小调整为 1.5 GB 可以缓解该问题。由于您确定没有内存泄漏,您应该考虑为您的应用程序选择正确类型的 GC 收集器 - 基于吞吐量的 GC 或其他(并行等)并优化暂停时间和收集。这将使 JVM 有足够的空间来分配新的对象,而不会耗尽内存。

关于java - Java Runtime Environment 内存不足,无法在 Tomcat 中继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576452/

相关文章:

java - 哪个 JVM 具有完整的字节码执行跟踪?

java - 匹配器未找到匹配项

eclipse - 每当我们在路径中引用 "/"时,我们能否将 tomcat/servlet/java 配置为选择 windows 根驱动器

jsf - 如何在Tomcat上安装和使用CDI?

java - 什么可能导致Java返回后继续运行

java在for循环内提交

java - 如何在jsp中显示jasper报表

tomcat - Java servlet (tomcat) 跟踪到多个数据库的多个 jdbc 连接

java - JVM内存不足崩溃

java - Finalize() 何时执行?