我在64bit Amazon Linux 2016.09 v2.5.2 running Tomcat 8 Java 8
免费套餐上运行AWS Elasticbeanstalk
环境(实例类型:t1.micro
)。
我有许多RESTful服务,当一个特定的服务被调用时,它做了一些工作,我一直得到502 error
,以及日志中的以下内容:
OpenJDK 64位服务器VM警告:信息: os :: commit_memory(0x00000000e2220000,130215936,0)失败; error ='无法分配内存'(errno = 12)
Java Runtime Environment没有足够的内存来继续。 本机内存分配(mmap)无法映射130215936字节以提交保留内存。 包含更多信息的错误报告文件保存为: /tmp/hs_err_pid31500.log OpenJDK 64位服务器VM警告:忽略选项MaxPermSize = 64m;支持已在8.0中删除
问题
这是否意味着我需要升级到付费版本,即大于实例类型:t1.micro
?
或者,有没有办法可以配置我的环境来处理这个问题?
我问的原因是因为上面的日志表明Java App只需要130mb
(130215936 bytes
)内存,在下面你可以看到JVM heap
大小是更大。所以我不希望它在130mb
落空。
更多信息
我有以下配置设置:
由于
更新
我将Max JVM
更改为256mb
,但仍然收到错误:
OpenJDK 64位服务器VM警告:忽略选项MaxPermSize = 256m; 在8.0 OpenJDK 64位服务器VM警告中删除了支持:INFO: os :: commit_memory(0x00000000c0000000,89456640,0)失败; error ='无法分配内存'(errno = 12)
Java Runtime Environment没有足够的内存来继续。 本机内存分配(mmap)无法映射89456640字节以提交保留内存。 包含更多信息的错误报告文件保存为: /tmp/hs_err_pid14014.log OpenJDK 64位服务器VM警告:忽略选项MaxPermSize = 256m;支持已在8.0中删除
但这只是89mb
。
答案 0 :(得分:3)
根据更新中的错误消息,您似乎尝试调整JVM永久生成大小。尝试将此设置保留为默认值。相反,将初始和最大堆大小都设置为64mb。
如果它仍然崩溃,一旦崩溃,您可以ssh到AWS实例并查看正在使用内存的内容。在beanstalk中,在您的环境配置中,在" Instances"下,您可以选择要与实例一起使用的密钥对。您可以在EC2控制台中找到beanstalk启动的实例,就像任何其他实例一样。