在Amazon EC2 t2.micro实例上运行的Jar内存不足

时间:2016-02-29 17:32:16

标签: java amazon-web-services memory-management amazon-ec2 jvm

我正在从Java jar运行Amazon实例上的一些Web应用程序,但它在12小时左右后总是耗尽内存。以下是写入文件的错误消息:

There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (malloc) failed to allocate 12288 bytes for                              
committing reserved memory.
Possible reasons:
 The system is out of physical RAM or swap space
 In 32 bit mode, the process size limit was hit
Possible solutions:
 Reduce memory load on the system
 Increase physical memory or swap space
 Check if swap backi ng store is full
 Use 64 bit Java on a 64 bit OS
 Decrease Java heap size (-Xmx/-Xms)
 Decrease number of Java threads
 Decrease Java thread stack sizes (-Xss)
 Set larger code cache with -XX:ReservedCodeCacheSize=
 This output file may be truncated or incomplete.

Out of Memory Error (os_linux.cpp:2827), pid=5808, tid=140367928600320

JRE version: OpenJDK Runtime Environment (7.0_95) (build 1.7.0_95-b00)
Java VM: OpenJDK 64-Bit Server VM (24.95-b01 mixed mode linux-amd64 compressed oops)
Derivative: IcedTea 2.6.4
Distribution: Ubuntu 14.04.3 LTS, package 7u95-2.6.4-0ubuntu0.14.04.1
Failed to write core dump. Core dumps have been disabled. 
To enable core dumping, try "ulimit -c unlimited" before starting Java again

我如何从这里开始?遵循他们的建议,例如增加堆大小或交换空间是有道理的,还是我真的只需要将我的EC2实例升级到更大的尺寸?

2 个答案:

答案 0 :(得分:1)

您需要通过-Xmx选项增加最大JVM堆大小设置,以允许JVM使用更多内存。如果需要将其增加到t2.micro实例上的物理可用范围之外,那么还需要增加EC2实例大小。

请记住,您将无法将t2.micro实例上的完整1GB内存分配给Java应用程序,因为其中一些内存将由操作系统使用。如果可能的话,您还需要避免使用交换空间,因此请集中精力配置JVM以利用EC2实例上提供的RAM。

在不知道您当前的JVM设置是什么的情况下,很难提供更准确的建议。

答案 1 :(得分:1)

问题是你用完了虚拟内存或实际地址空间。

这意味着你应该

  • 增加交换空间
  • 减少堆大小

您需要减小堆大小的原因是为JVM和系统的其余部分留下更多内存