Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/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
限制Java进程的总内存消耗(在Cloud Foundry中)_Java_Memory_Jvm_Out Of Memory_Cloud Foundry - Fatal编程技术网

限制Java进程的总内存消耗(在Cloud Foundry中)

限制Java进程的总内存消耗(在Cloud Foundry中),java,memory,jvm,out-of-memory,cloud-foundry,Java,Memory,Jvm,Out Of Memory,Cloud Foundry,关于这两个问题: 我在CloudFoundry上运行了一个Java应用程序,需要确保没有超出分配的内存。否则,这就是当前的问题,该进程将被CloudFoundry监视机制(LinuxCGroup)终止 Java Buildpack会自动为-Xmx和-Xss设置sane值。通过调整参数和配置预期线程的(最大)数量,我非常确定Java进程消耗的内存应该小于我分配给Cloud Foundry应用程序的上限 但是,我仍然遇到CloudFoundry“内存不足”错误(不是Java OOM错误!):

关于这两个问题:

我在CloudFoundry上运行了一个Java应用程序,需要确保没有超出分配的内存。否则,这就是当前的问题,该进程将被CloudFoundry监视机制(LinuxCGroup)终止

Java Buildpack会自动为
-Xmx
-Xss
设置sane值。通过调整参数和配置预期线程的(最大)数量,我非常确定Java进程消耗的内存应该小于我分配给Cloud Foundry应用程序的上限

但是,我仍然遇到CloudFoundry“内存不足”错误(不是Java OOM错误!):
索引:3,原因:崩溃,退出描述:内存不足,退出状态:255

我尝试了
MALLOC\u ARENA\u MAX
设置。将该值设置为1或2会导致启动缓慢。使用
MALLOC\u ARENA\u MAX=4
时,我仍然看到如上所述的错误,因此这并不能解决我的问题

目前,我使用非常紧凑的内存设置进行测试,以便更容易重现问题。但是,即使这样,我也必须等待大约20-25分钟才能发生错误

我必须指定哪些参数和/或环境变量,以确保我的Java进程永远不会超过某个内存限制?如果应用程序实际需要更多内存,那么使用Java OOM错误崩溃是可以接受的

有关MALLOC_ARENA_MAX的更多信息:


编辑:可能的解释如下:。正如我目前在执行大量传出HTTP/REST请求时看到的OOM问题,可能是这些缓冲区造成的。

不幸的是,没有办法在JVM上强制执行内存限制。大多数内存区域都是可配置的(
-Xmx
-Xss
-XX:MaxPermSize
-XX:MaxMetaspaceSize
,等等),但您无法控制的是本机内存。本机内存包含从内存映射文件到本机库再到JNI代码的所有内容。您所能做的最好的事情就是分析您的应用程序,找出内存增长的地方,要么解决内存增长问题,要么给自己足够的喘息空间来生存


当然不令人满意,但最终与其他对内存占用没有控制的语言和运行时没有太大区别。

有多紧?我们已经看到JVM
native
内存消耗在启动时不断膨胀(对于发生的事情,这是非常不透明的),但随着启动的进行,最终会将所有本机内存返回给操作系统。你可能会遇到这种情况。虽然在不到10兆字节的可用空间内,但我想我还是设法使它不到1兆字节。那乘气球需要多长时间?秒?分钟?秒,但通常足够长,足以触发容器的防御。如果您看到容器在之后介入,那么很可能您看到的是
native
memory growth.OK。非常感谢。我的服务在大约20分钟后崩溃。“使用-Djdk.nio.maxCachedBufferSize=262144运行服务以避免此问题。”Evan Jones的博客文章中解释了这一点,这是一个有用的提示。该功能已后端口至8u102,请参阅