Java内存/ gc问题(JRE内存不足,堆空间和完整gc)

时间:2014-05-25 00:01:02

标签: java memory garbage-collection heap

我遇到了在具有2CPU和3.75GB内存(https://aws.amazon.com/ec2/instance-types/)的c3.large Amazon EC2 ubuntu机器上运行Java程序的各种问题。

现在我正在运行java -Xmx3750m标志。我已经为几个标志尝试了几个不同的值,包括PermSize,MaxPermSize,-Xmn,-Xmx,-Xms,NewRatio等,导致各种不同的问题。也许我忽视了一些显而易见的事情,或者c3.large实例可能没有足够的内存用于我的一些运行。

我的工作有时完成没有问题,有时会遇到以下问题之一:

1)线程中的异常" main" java.lang.OutOfMemoryError:Java堆空间

2)OpenJDK 64位服务器VM警告:INFO:os :: commit_memory(0x00000007e7a80000,122683392,0)失败;错误='无法分配内存' (错误= 12) Java Runtime Environment没有足够的内存来继续。  本机内存分配(malloc)无法为提交保留内存分配122683392字节。  包含更多信息的错误报告文件保存为:

我还尝试了一些详细的gc标志,并在其中一个运行中看到了以下内容:

<完全GC [PSYoungGen:6123K-> 0K(12288K)] [ParOldGen:2542552K-> 2546337K(2560000K)] 2548675K-> 2546337K(2572288K)[PSPermGen:5555K-> 5555K( 21504K)],5.1085130秒] [时间:用户= 10.06 sys = 0.04,实际= 5.10秒] [GC [PSYoungGen:6131K-> 6123K(191488K)] 2552469K-> 2552461K(2751488K),0.0144180秒] [时间:用户= 0.01 sys = 0.01,实际= 0.02秒] [Full GC [PSYoungGen:6123K-> 0K(191488K)] [ParOldGen:2546337K-> 2552429K(2560000K)] 2552461K-> 2552429K(2751488K)[PSPermGen:5555K-> 5555K (21504K)],6.4821310秒] [时间:用户= 12.72 sys = 0.07,实际= 6.48秒] [GC [PSYoungGen:7147K-> 7139K(14336K)] 2559577K-> 2559569K(2574336K),0.0135490 secs] [次:用户= 0.02 sys = 0.00,real = 0.02 secs] [Full GC [PSYoungGen:7139K-> 0K(14336K)] [ParOldGen:2552429K-> 2559569K(2560000K)] 2559569K-> 2559569K(2574336K)[PSPermGen:5555K-> 5555K( 21504K)],4.8677750秒] [时间:用户= 9.65 sys = 0.04,真实= 4.86秒] [Full GC [PSYoungGen:7147K-> 7139K(14336K)] [ParOldGen:2559569K-> 2559569K(2560000K)] 2566717K-> 2566709K(2574336K)[PSPermGen:5555K-> 555 5K(21504K)],4.8541370秒] [时间:用户= 9.63 sys = 0.03,实际= 4.85秒] [Full GC [PSYoungGen:7139K-> 7139K(14336K)] [ParOldGen:2559975K-> 2559975K(2560000K)] 2567115K-> 2567115K(2574336K)[PSPermGen:5555K-> 555 5K(21504K)],4.8919580秒] [时间:用户= 9.70 sys = 0.04,真实= 4.89秒] [Full GC [PSYoungGen:7139K-> 7139K(14336K)] [ParOldGen:2559975K-> 2559934K(2560000K)] 2567115K-> 2567074K(2574336K)[PSPermGen:5555K-> 555 5K(21504K)],6.4815400秒] [时间:用户= 12.72 sys = 0.06,真实= 6.49秒] [Full GC [PSYoungGen:7139K-> 7139K(14336K)] [ParOldGen:2559992K-> 2559992K(2560000K)] 2567132K-> 2567132K(2574336K)[PSPermGen:5555K-> 555 5K(21504K)],4.8964570秒] [时间:用户= 9.71 sys = 0.04,真实= 4.89秒] [Full GC [PSYoungGen:7139K-> 7139K(14336K)] [ParOldGen:2559992K-> 2559992K(2560000K)] 2567132K-> 2567132K(2574336K)[PSPermGen:5555K-> 555 5K(21504K)],4.8817790秒] [时间:用户= 9.69 sys = 0.03,真实= 4.89秒] 堆  PSYoungGen总计14336K,使用7168K [0x00000007b1e00000,0x00000007c9100000,0x0000000800000000)   伊甸园空间7168K,100%使用[0x00000007b1e00000,0x00000007b2500000,0x00000007b2500000)   来自space 7168K,0%使用[0x00000007b2500000,0x00000007b2500000,0x00000007b2c00000)   到空间185856K,使用0%[0x00000007bdb80000,0x00000007bdb80000,0x00000007c9100000)  ParOldGen总计2560000K,使用2559992K [0x0000000715a00000,0x00000007b1e00000,0x00000007b1e00000)   对象空间2560000K,99%使用[0x0000000715a00000,0x00000007b1dfe120,0x00000007b1e00000)  PSPermGen总计21504K,使用5590K [0x000000070b400000,0x000000070c900000,0x0000000715a00000)   对象空间21504K,25%使用[0x000000070b400000,0x000000070b9758b8,0x000000070c900000)

1 个答案:

答案 0 :(得分:0)

最好是64位操作系统和64位JVM;否则这永远不会奏效。

我建议使用像Visual VM这样的代码来分析您的代码,这样您就可以看到每个内存生成的内容。