我遇到了在具有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)答案 0 :(得分:0)
最好是64位操作系统和64位JVM;否则这永远不会奏效。
我建议使用像Visual VM这样的代码来分析您的代码,这样您就可以看到每个内存生成的内容。