Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS:内存不足,Java运行时环境无法继续_Java_Amazon Web Services_Amazon Elastic Beanstalk_Tomcat8 - Fatal编程技术网

AWS:内存不足,Java运行时环境无法继续

AWS:内存不足,Java运行时环境无法继续,java,amazon-web-services,amazon-elastic-beanstalk,tomcat8,Java,Amazon Web Services,Amazon Elastic Beanstalk,Tomcat8,我在AWS Elasticbeanstalk免费层上运行64位Amazon Linux 2016.09 v2.5.2运行Tomcat 8 Java 8环境(实例类型:t1.micro) 我有许多RESTful服务,当调用一个特定的服务时,它会执行一些工作,我总是会得到一个502错误,日志中有以下内容: OpenJDK 64位服务器虚拟机警告:信息: os::提交_内存(0x00000000E2220000130215936,0)失败; 错误=“无法分配内存”(errno=12) 内存不足,Jav

我在
AWS Elasticbeanstalk
免费层上运行64位Amazon Linux 2016.09 v2.5.2运行Tomcat 8 Java 8环境(实例类型:
t1.micro

我有许多RESTful服务,当调用一个特定的服务时,它会执行一些工作,我总是会得到一个
502错误
,日志中有以下内容:

OpenJDK 64位服务器虚拟机警告:信息: os::提交_内存(0x00000000E2220000130215936,0)失败; 错误=“无法分配内存”(errno=12)

内存不足,Java运行时环境无法继续。 本机内存分配(mmap)映射130215936字节以提交保留内存失败。 包含详细信息的错误报告文件另存为: /tmp/hs_err_pid31500.log OpenJDK 64位服务器VM警告:忽略选项MaxPermSize=64m;支持在8.0中被删除

问题

这是否意味着我需要升级到付费版本,即大于实例类型:
t1.micro

或者,是否有一种方法可以配置我的环境来处理此问题

我询问的原因是,上面的日志表明Java应用程序只需要
130mb
130215936字节
)内存,下面可以看到
JVM堆的大小要大得多。因此,我没有料到它会在
130mb
时崩溃

更多信息

我有以下配置设置:

谢谢

更新

我将
Max JVM
更改为
256mb
,但仍然得到错误:

OpenJDK 64位服务器VM警告:忽略选项MaxPermSize=256m; 已删除8.0 OpenJDK 64位服务器VM中的支持警告:信息: os::提交_内存(0x00000000c000000894566400,0)失败; 错误=“无法分配内存”(errno=12)

内存不足,Java运行时环境无法继续。 本机内存分配(mmap)映射89456640字节以提交保留内存失败。 包含详细信息的错误报告文件另存为: /tmp/hs_err_pid14014.log OpenJDK 64位服务器虚拟机警告:忽略选项MaxPermSize=256m;支持在8.0中被删除


但是在这里,它只占用了
89mb

根据更新中的错误消息,似乎您试图调整JVM永久生成大小。尝试将此设置保留为默认设置。相反,将初始堆大小和最大堆大小都设置为64mb


如果它仍在崩溃,那么一旦崩溃,您可以通过ssh连接到AWS实例,查看内存的使用情况。在beanstalk中,在环境的配置中,在“实例”下,可以选择要与实例一起使用的密钥对。与其他实例一样,您可以在EC2控制台中找到beanstalk启动的实例。

您确定实例中有足够的内存来处理您请求的堆大小吗?请尝试将最大jvm堆大小更改为较小的值,以便为我们提供内存统计的输出。请使用top或htop等。我不确定在AWS环境中如何做到这一点。据我所知,我没有访问命令行的权限。还是我?谢谢。我知道导致崩溃的代码。我正在做一些单词组块来从句子中提取名词。它在我的本地主机上运行良好,但在AWS Elastic Beanstalk上运行失败。但令我惊讶的是,它没有像日志文件(130mb)中报告的那样使用太多内存。我将初始和最大堆大小设置为64mb,然后看看会发生什么space@Richard好的,现在是您的java进程耗尽了内存。尝试逐步增加初始/最大内存。试试128mb和256mb。如果您返回到让计算机内存不足的状态,请登录到实例并查看剩余内存的使用情况。如果一旦达到256mb堆大小,您仍然会收到java OutOfMemoryError,那么我认为您将无法使用t2.micro。谢谢,是的,这就是我试图建立的,我是否需要升级AWS服务,或者我可以让它在我当前的“免费”(t1.micro)服务上工作。你知道t1.micro服务器有多少可用内存吗?我在这里读到,它是0.613GB,所以不知道为什么会下降到130mb。初始JVM堆大小为128m,最大JVM堆大小为256m,我得到ava.lang.OutOfMemoryError:Java堆空间。