Java/Spring应用程序无法在cloudfoundry上启动:OutOfMemoryError压缩类空间

Java/Spring应用程序无法在cloudfoundry上启动:OutOfMemoryError压缩类空间,java,out-of-memory,cloud-foundry,buildpack,swisscomdev,Java,Out Of Memory,Cloud Foundry,Buildpack,Swisscomdev,在CloudFoundry上运行的Swisscom Developer Cloud上部署了Java/Spring启动软件的新版本后,启动突然失败,出现以下错误:OutOfMemoryError:Compressed class space。因此,我们决定部署该软件的前一个版本,即之前实际运行的版本:发生了相同的错误。我们没有从Java7切换到Java8,也没有更改任何配置。这就引出了一个问题:这真的是我们的错误,还是服务器的错误 然后,我们尝试通过将变量JBP\u CONFIG\u OPEN\

在CloudFoundry上运行的Swisscom Developer Cloud上部署了Java/Spring启动软件的新版本后,启动突然失败,出现以下错误:
OutOfMemoryError:Compressed class space
。因此,我们决定部署该软件的前一个版本,即之前实际运行的版本:发生了相同的错误。我们没有从Java7切换到Java8,也没有更改任何配置。这就引出了一个问题:这真的是我们的错误,还是服务器的错误


然后,我们尝试通过将变量
JBP\u CONFIG\u OPEN\u JDK\u JRE
设置为以下行之一来增加
MaxMetaspaceSize

[jre: {version: 1.8.0_+}, memory_calculator: {memory_sizes: {metaspace: 128m}}]
{memory_calculator: {memory_sizes: {metaspace: 128m}}}
{memory_sizes: {metaspace: 128m}}
应用程序始终警告
内存大小的值无效。此YAML变量的正确格式是什么

[ConfigurationUtils] WARN User config value for 'memory_sizes' is not valid, existing property not present

然后,我们删除了Swisscom开发者控制台上的Java应用程序和数据库服务,并重新创建了它。没有效果,发生了相同的错误

最后,你知道为什么这个错误会突然发生,即使是几分钟前刚刚运行良好的版本


编辑

这是清单(
[数据库服务名称]
[应用程序名称]
已被替换):

Java buildpack版本为(根据日志):

此命令似乎已执行(在崩溃后的日志中):


发生OutOfMemory错误是因为Java构建包已更改为使用内存计算器的3.x版本。GitHub正在讨论由这一变化引起的类似问题。详情请参阅本期

通常,内存计算器的v3.x会根据应用程序中类文件的数量和一些默认值(取决于Java版本)为各种JVM内存设置选择值。然后将最大堆大小设置为剩余内存量

以前版本的内存计算器是通过设置
JBP\u CONFIG\u OPEN\u JDK\u JRE
配置的。但是,只需在
Java\u OPTS
中设置相应的Java内存设置,就可以配置v3.x。例如,可以将最大元空间大小设置为100 Mb,如下所示:

cf set-env app-name JAVA_OPTS '-XX:MaxMetaspaceSize=100m'
如果您只是想解决问题,可以使用内存计算器更改之前发布的Java buildpack版本:

cf push -b https://github.com/cloudfoundry/java-buildpack.git\#v3.14 ...

Swisscom Java developer的评论:

可以肯定的是,他们会将内存启发还原为他们所需要的 在3.13中,或至少改进计算。电流 对所有客户的建议是

  • 使用3.13或
  • 对环境变量
    JAVA\u OPTS
    使用一些显式选项

@FyodorGlebov谢谢,我已经相应地更新了问题。您正在使用两天前发布的构建包,请参阅。您可以尝试使用旧的buildpack来缩小问题的范围吗<代码>cf推送-bhttps://github.com/cloudfoundry/java-buildpack.git\#v3.12
我想看看这个问题是否与新的buildpack有关。您能观看并更新这个GitHub问题吗?看来您面临的问题是
cf set env$APPNAME JAVA_OPTS'-XX:CompressedClassSpaceSize=20m'
@FyodorGlebov非常感谢!使用旧版本的java buildpack实际上解决了这个问题。我一定会在github上关注这个问题。再次感谢:)您是建议永久设置此环境变量,还是只等待SwisscomDev云的默认配置更新?
2017-03-03 11:46:25 [APP/PROC/WEB/0] OUT vcap 8 0 99 10:46 ? 00:01:09 /home/vcap/app/.java-buildpack/open_jdk_jre/bin/java -Djava.io.tmpdir=/home/vcap/tmp -XX:OnOutOfMemoryError=/home/vcap/app/.java-buildpack/open_jdk_jre/bin/killjava.sh -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=68540K -XX:ReservedCodeCacheSize=240M -XX:CompressedClassSpaceSize=8731K -Xmx408104K -Djavax.net.ssl.trustStore=/home/vcap/app/.java-buildpack/container_certificate_trust_store/truststore.jks -Djavax.net.ssl.trustStorePassword=java-buildpack-trust-store-password -cp /home/vcap/app/. org.springframework.boot.loader.WarLauncher
cf set-env app-name JAVA_OPTS '-XX:MaxMetaspaceSize=100m'
cf push -b https://github.com/cloudfoundry/java-buildpack.git\#v3.14 ...