ser*_*erg 5 tomcat java permgen solr
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 16 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 2686976 (2.5625MB)
MaxNewSize = -65536 (-0.0625MB)
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 88080384 (84.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 566689792 (540.4375MB)
used = 13467648 (12.84375MB)
free = 553222144 (527.59375MB)
2.3765467792297907% used
From Space:
capacity = 327680 (0.3125MB)
used = 0 (0.0MB)
free = 327680 (0.3125MB)
0.0% used
To Space:
capacity = 327680 (0.3125MB)
used = 0 (0.0MB)
free = 327680 (0.3125MB)
0.0% used
PS Old Generation
capacity = 1431699456 (1365.375MB)
used = 86216248 (82.22222137451172MB)
free = 1345483208 (1283.1527786254883MB)
6.021951579200712% used
PS Perm Generation
capacity = 88080384 (84.0MB)
used = 88080080 (83.99971008300781MB)
free = 304 (2.899169921875E-4MB)
99.99965486072358% used
Run Code Online (Sandbox Code Playgroud)
我查看了内存转储文件,没有异常。尝试增加堆限制,没有区别。
任何想法可能是什么以及为什么转储文件如此之小,那么当应用程序继续抛出内存不足错误时内存使用情况如何?
PS Perm Generation
capacity = 88080384 (84.0MB)
used = 88080080 (83.99971008300781MB)
free = 304 (2.899169921875E-4MB)
99.99965486072358% used
Run Code Online (Sandbox Code Playgroud)
这就是你的罪魁祸首。PermGen 用于类定义,您似乎有很多!
尝试通过将其添加到 Tomcat 启动选项来增加 PermGen 的大小:
-XX:MaxPermSize=256M
Run Code Online (Sandbox Code Playgroud)
...但如果您的应用程序正在突破您当前的限制,则此更改只会为您提供一些额外的崩溃间隔时间。
监控它的行为方式以及使用量的增长速度,但准备好在您的应用程序代码中挖掘问题类定义。
| 归档时间: |
|
| 查看次数: |
4668 次 |
| 最近记录: |