我有一个 Java Web 应用程序,当 JVM 进行 FGC 时,没有更多的内存剩余,然后将使用交换,并且负载正在快速增长。我无法理解为什么,有人可以帮助我吗?
问问题
159 次
3 回答
2
您似乎已将最大堆大小设置(-Xmx)
得足够高,以至于 JVM 没有任何内存可用于垃圾收集。因此,系统内存不足并开始交换到磁盘。
您可以从减少-Xmx
或添加一些 RAM 到您的系统开始,并弄清楚是什么让您的应用程序消耗了如此多的内存。
于 2013-05-31T05:09:23.967 回答
0
启用完整 GC 日志记录,以便您可以查看堆中发生的情况。
- 计算实时数据集、分配率和提升率。这将告诉您是否需要更大的堆或您的例如。Young Gen 太小,或者您的 Survivor 空间溢出等。
- 计算总 GC 时间,它应该小于总运行时间的 5%。
利用-XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
于 2013-05-31T17:29:18.710 回答