JBoss 中 PermGen OutOfMemoryError 的根本原因是什么?
我在我的开发环境中运行 JBoss AS 4.2.2,这是在多次重新部署我的 Web 应用程序后发生的。
Christian Vest Hansen 的博客给出的 JVM 选项很有帮助,但并没有完全解决问题:
-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:MaxPermSize=128m
Run Code Online (Sandbox Code Playgroud) Java 应用程序不时因 PermGen 空间错误而死亡,但是当我查看内存使用情况时,我所知道的似乎很低。
它是一个 Tomcat 应用程序,加上运行着 SOLR 服务器(在同一个 tomcat 下)。
JVM 参数catalina.sh:
-Xms1024m
-Xmx2048m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/logs
Run Code Online (Sandbox Code Playgroud)
错误catalina.out:
java.lang.OutOfMemoryError: PermGen space
Dumping heap to /path/to/logs/java_pid22335.hprof ...
Heap dump file created [107041478 bytes in 1.823 secs]
Exception in thread "pool-5-thread-1" java.lang.OutOfMemoryError: PermGen space
Run Code Online (Sandbox Code Playgroud)
现在第一个奇怪的是内存转储只有 100Mb,而堆限制是 2048Mb。当我曾经有“正确的”内存不足错误时,转储文件的大小接近堆限制。
第二件奇怪的事情是 显示的内存使用情况jmap -heap 22335似乎很正常(运行此命令时,java 应用程序仍处于关闭状态):
Attaching to process ID 22335, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.3-b02
using thread-local object allocation.
Parallel GC with …Run Code Online (Sandbox Code Playgroud) 我的 jmx 监控有问题。我们用 jmx 监控一些 jvm 的 perm gen。但有时 mbean 的名称会从“PS Perm Gen”更改为“Perm Gen”,反之亦然。它发生在 tomcat 服务器重新启动时,但不是每次重新启动时都会发生。
jvm 版本是 1.5.0_16。
有没有人遇到过这个问题,也许有解决方案?