加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java / Spring应用程序无法在cloudfoundry上启动:OutOfMemoryEr

发布时间:2020-12-15 04:37:52 所属栏目:Java 来源:网络整理
导读:在将新版本的 Java / Spring Boot软件部署到在CloudFoundry上运行的Swisscom Developer Cloud之后,启动突然失败并出现以下错误:OutOfMemoryError:压缩类空间.因此,我们决定部署该软件的先前版本,该版本之前正在运行:发生了同样的错误.我们没有从Java7切换
在将新版本的 Java / Spring Boot软件部署到在CloudFoundry上运行的Swisscom Developer Cloud之后,启动突然失败并出现以下错误:OutOfMemoryError:压缩类空间.因此,我们决定部署该软件的先前版本,该版本之前正在运行:发生了同样的错误.我们没有从Java7切换到Java8,也没有更改任何配置.这导致了一个问题:这真的是我们这边或者服务器端的错误吗?

然后,我们尝试通过将变量JBP_CONFIG_OPEN_JDK_JRE设置为以下行之一来增加MaxMetaspaceSize:

[jre: {version: 1.8.0_+},memory_calculator: {memory_sizes: {metaspace: 128m}}]
{memory_calculator: {memory_sizes: {metaspace: 128m}}}
{memory_sizes: {metaspace: 128m}}

应用程序始终警告,memory_sizes的值无效.这个YAML变量的正确格式是什么?

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

然后,我们在Swisscom Developer Console上删除了Java应用程序和数据库服务,并重新创建了它.它没有效果,发生了同样的错误.

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

编辑:

这是清单([database-service-name]和[application-name]被替换):

---
path: .
instances: 1
buildpack: https://github.com/cloudfoundry/java-buildpack
services:
- [database-service-name]
applications:
- name: [application-name]
  domain: scapp.io
  host: [application-name]
  memory: 1024M
  disk_quota: 1024M
  env:
    SPRING_PROFILES_ACTIVE: stage,cloudfoundry

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

2017-03-03 11:47:02 [STG/0] OUT -----> Java Buildpack Version: b08a692 | https://github.com/cloudfoundry/java-buildpack#b08a692

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

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

解决方法

发生OutOfMemory错误是因为Java buildpack已更改为使用内存计算器的3.x版. GitHub issue 390正在讨论此更改引起的类似问题.有关详细信息,请参阅此问题.

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

通过设置JBP_CONFIG_OPEN_JDK_JRE配置了先前版本的内存计算器.但是,只需在JAVA_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 ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读