首页 文章

JVM没有发布虚拟memroy

提问于
浏览
1

我的Web应用程序正在抛出OOM错误 . 它被给予25GB内存 . 应用程序已加载测试,我们看到内存正在增加 . 但我希望JVM在完全gc之后释放内存 . 为什么即使在使用应用程序之后JVM也没有释放虚拟内存 .

Here are the JVM settings:

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/logs/gcc.log 
-XX:MaxPermSize=96m -XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode -XX:+UseCompressedOops -XX:+UseCompressedStrings
-Xmx30g

Here is the "top" command output:

top - 02:09:42 up 117 days,  5:24,  4 users,  load average: 0.00, 0.01, 0.05
Tasks: 140 total,   1 running, 139 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  62167808k total, 60854992k used,  1312816k free,    73444k buffers
Swap:        0k total,        0k used,        0k free, 17789504k cached
PID   USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
17206 java     20   0 55.1g  40g  12m S  0.3 68.2 298:41.08 java

Here is the "free" command output:

total       used       free     shared    buffers     cached
Mem:      62167808   60855448    1312360          0      73592   17789532
-/+ buffers/cache:   42992324   19175484
Swap:            0          0          0

请欣赏任何线索来解决此问题 .

1 回答

  • 3

    并非所有HotSpot JVM中的垃圾收集算法都会在GC之后将虚拟内存释放到操作系统 .

    可以做到的两种算法是

    • serial -XX:+UseSerialGC

    • G1 -XX:+UseG1GC

    您正在使用CMS -XX:+UseConcMarkSweepGC ,它永远不会向OS释放内存 .

    Here您可以在HotSpot中找到所有GC算法的快速摘要 .

相关问题