2017-02-13 182 views
0

这里是服务器1的堆内存信息为什么会抛出OOM?

Heap Configuration: 
    MinHeapFreeRatio = 40 
    MaxHeapFreeRatio = 70 
    MaxHeapSize  = 1073741824 (1024.0MB) 
    NewSize   = 1310720 (1.25MB) 
    MaxNewSize  = 17592186044415 MB 
    OldSize   = 5439488 (5.1875MB) 
    NewRatio   = 2 
    SurvivorRatio = 8 
    PermSize   = 157286400 (150.0MB) 
    MaxPermSize  = 157286400 (150.0MB) 

Heap Usage: 
PS Young Generation 
Eden Space: 
    capacity = 19922944 (19.0MB) 
    used  = 19911792 (18.989364624023438MB) 
    free  = 11152 (0.0106353759765625MB) 
    99.94402433696546% used 
From Space: 
    capacity = 12517376 (11.9375MB) 
    used  = 0 (0.0MB) 
    free  = 12517376 (11.9375MB) 
    0.0% used 
To Space: 
    capacity = 13303808 (12.6875MB) 
    used  = 0 (0.0MB) 
    free  = 13303808 (12.6875MB) 
    0.0% used 
PS Old Generation 
    capacity = 715849728 (682.6875MB) 
    used  = 715848480 (682.6863098144531MB) 
    free  = 1248 (0.001190185546875MB) 
    99.99982566173442% used 
PS Perm Generation 
    capacity = 157286400 (150.0MB) 
    used  = 79364440 (75.68782806396484MB) 
    free  = 77921960 (74.31217193603516MB) 
    50.45855204264323% used 

我分配1024M内存给JVM堆,但是当它OOM

我有另一台服务器的JVM不占用内存,接下来就是服务器的堆内存信息时,它是OOM

Heap Configuration: 
    MinHeapFreeRatio = 40 
    MaxHeapFreeRatio = 70 
    MaxHeapSize  = 1073741824 (1024.0MB) 
    NewSize   = 1310720 (1.25MB) 
    MaxNewSize  = 17592186044415 MB 
    OldSize   = 5439488 (5.1875MB) 
    NewRatio   = 2 
    SurvivorRatio = 8 
    PermSize   = 157286400 (150.0MB) 
    MaxPermSize  = 157286400 (150.0MB) 

Heap Usage: 
PS Young Generation 
Eden Space: 
    capacity = 119341056 (113.8125MB) 
    used  = 119253176 (113.72869110107422MB) 
    free  = 87880 (0.08380889892578125MB) 
    99.92636230736889% used 
From Space: 
    capacity = 111869952 (106.6875MB) 
    used  = 0 (0.0MB) 
    free  = 111869952 (106.6875MB) 
    0.0% used 
To Space: 
    capacity = 111149056 (106.0MB) 
    used  = 0 (0.0MB) 
    free  = 111149056 (106.0MB) 
    0.0% used 
PS Old Generation 
    capacity = 715849728 (682.6875MB) 
    used  = 715849720 (682.6874923706055MB) 
    free  = 8 (7.62939453125E-6MB) 
    99.99999888244702% used 
PS Perm Generation 
    capacity = 157286400 (150.0MB) 
    used  = 110605624 (105.48174285888672MB) 
    free  = 46680776 (44.51825714111328MB) 
    70.32116190592448% used 

此服务器看起来简单正常的,内存是真正的不够

谁可以提供服务器的明确解释1 OOM

+0

在这两种情况下,伊甸园和OldGen都满了,所以我猜这是OOM的原因。但是,第一台服务器的NewGen容量较少。服务器1使用什么JVM设置?你有没有试过玩NewRatio和SurvivorRatio? –

+0

我不更改NewRatio和SurvivorRatio,因为您看到两个服务器默认情况下具有相同的NewRatio和SurvivorRatio。 –

回答

1

正如弗拉基米尔所说 - 您的OldGen已满,您应该检查NewRatio和Survivor比率。您也可以开始你的GC日志应用,并分析它的外部工具,例如:http://gceasy.io(免费)或JClarity Censum(付费)

通过提供标志启用GC日志: -XX:+ PrintGCDetails -XX: + PrintGCDateStamps -Xloggc:gc.log

+0

谢谢,我这次不保存gc日志,所以无法分析。我会在下次尝试。 –

0

你有一个MinHeapFreeRatio = 40这意味着GC应该在这个时候踢。理想情况下,您的终身空间应低于此百分比。

旧的似乎是682 MB,这意味着它应该至少是682/0.4或1700 MB(这比你的总数要多),但是我怀疑如果应用程序被允许的话它确实需要高得多跑得更久。

如果这个数字令人惊讶,我建议你使用你的内存分析器来查看你是否有内存泄漏,或者你可以减少内存消耗。

相关问题