我在具有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)线程“主”中的异常java.lang.OutOfMemoryError:Java堆空间

2)OpenJDK 64位服务器VM警告:INFO:os :: commit_memory(0x00000007e7a80000,122683392,0)失败;错误='无法分配内存'(errno = 12)
没有足够的内存,Java运行时环境无法继续。
 本机内存分配(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秒]
[完整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秒] [时间:用户= 0.02 sys = 0.00,实际= 0.02秒]
[完整GC [PSYoungGen:7139K-> 0K(14336K)] [ParOldGen:2552429K-> 2559569K(2560000K)] 2559569K-> 2559569K(2574336K)[PSPermGen:5555K-> 5555K(
21504K)],4.8677750秒] [时间:user = 9.65 sys = 0.04,real = 4.86秒]
[完整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秒]
[完整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秒]
[完整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秒]
[完整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秒]
[完整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)
  来自空间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)

最佳答案

最好是64位操作系统和64位JVM。否则,它将永远无法正常工作。

我建议使用诸如Visual VM之类的代码对代码进行概要分析,以便您可以了解每一代内存的情况。

10-08 12:33