【发布时间】:2013-10-24 14:44:24
【问题描述】:
最近生产环境变得非常缓慢。进程的cpu占用了200%。然而,它一直在工作。在我重新启动服务后,它再次正常运行。我有几个症状: Parsurvivor 空间堆长时间空着,垃圾回收占用了大约 20% 的 cpu 时间。
JVM 选项:
X:+CMSParallelRemarkEnabled, -XX:+HeapDumpOnOutOfMemoryError, -XX:+UseConcMarkSweepGC, - XX:+UseParNewGC, -XX:HeapDumpPath=heapdump.hprof, -XX:MaxNewSize=700m, -XX:MaxPermSize=786m, -XX:NewSize=700m, -XX:ParallelGCThreads=8, -XX:SurvivorRatio=25, -Xms2048m, -Xmx2048m
Arch amd64
Dispatcher Apache Tomcat
Dispatcher Version 7.0.27
Framework java
Heap initial (MB) 2048.0
Heap max (MB) 2022.125
Java version 1.6.0_35
Log path /opt/newrelic/logs/newrelic_agent.log
OS Linux
Processors 8
System Memory 8177.964, 8178.0
更多信息见附图 当问题发生在非堆上时,使用的代码缓存和使用的 cms perm gen 下降到一半。
我从newrelic.获取信息
问题是为什么服务器开始工作这么慢。
有时服务器完全停止,但我们发现 PDFBox 存在问题,当上传一些 pdf 并包含一些字体时,它会导致 JVM 崩溃。
更多信息:我观察到老一代每天都在装满。现在我每天都重新启动服务器。重启后一切都很好,但老一代一直到第二天都满了,服务器变慢了,直到需要重启。
【问题讨论】:
-
那么,问题是什么?
-
如果你的烫发空间已经用完了,而你的新空间几乎是空的,那么减小新空间的大小并为烫发代分配更多空间不是有意义吗?如果您这样做并最终遇到同样的问题,则可能存在内存泄漏。
-
烫发包含已编译的类和其他一些东西。我看到的问题是老一代正在建立。我必须每天重新启动服务器才能恢复正常。当 perm gen 图形(和其余部分)关闭时,tomcat 会重新启动。
标签: java garbage-collection jvm