Java-buildpack: 无法使用 buildpack 版本 b08a692 启动 java 应用程序

创建于 2017-03-03  ·  20评论  ·  资料来源: cloudfoundry/java-buildpack

-----> Java Buildpack Version: b08a692 | https://github.com/cloudfoundry/java-buildpack.git#b08a692
-----> Downloading Open Jdk JRE 1.8.0_121 from https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_121.tar.gz (found in cache)
       Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (0.9s)
-----> Downloading Open JDK Like Memory Calculator 3.1.0_RELEASE from https://java-buildpack.cloudfoundry.org/memory-calculator/trusty/x86_64/memory-calculator-3.1.0_RELEASE.tar.gz (0.0s)
       Loaded Classes: 14911, Threads: 300, JAVA_OPTS: ''
-----> Downloading Container Certificate Trust Store 2.0.0_RELEASE from https://java-buildpack.cloudfoundry.org/container-certificate-trust-store/container-certificate-trust-store-2.0.0_RELEASE.jar (found in cache)
       Adding certificates to .java-buildpack/container_certificate_trust_store/truststore.jks (0.3s)
-----> Downloading Tomcat Instance 8.5.11 from https://java-buildpack.cloudfoundry.org/tomcat/tomcat-8.5.11.tar.gz (found in cache)
       Expanding Tomcat Instance to .java-buildpack/tomcat (0.1s)
-----> Downloading Tomcat Lifecycle Support 2.5.0_RELEASE from https://java-buildpack.cloudfoundry.org/tomcat-lifecycle-support/tomcat-lifecycle-support-2.5.0_RELEASE.jar (found in cache)
-----> Downloading Tomcat Logging Support 2.5.0_RELEASE from https://java-buildpack.cloudfoundry.org/tomcat-logging-support/tomcat-logging-support-2.5.0_RELEASE.jar (found in cache)
-----> Downloading Tomcat Access Logging Support 2.5.0_RELEASE from https://java-buildpack.cloudfoundry.org/tomcat-access-logging-support/tomcat-access-logging-support-2.5.0_RELEASE.jar (found in cache)
-----> Downloading Tomcat External Configuration 8.5.11 from https://geapmcfg.run.aws-jp01-pr.ice.predix.io/tomcatcfg.tar.gz (found in cache)
       Expanding Tomcat External Configuration to .java-buildpack/tomcat (0.0s)
-----> Uploading droplet (145M)

0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 down
0 of 1 instances running, 1 failing
FAILED
Error restarting application: Start unsuccessful

最有用的评论

我们在这里看到了类似的问题,使用我们的代理的客户的类计算将失败,因为出于性能原因,我们的 javaagent 是本机二进制文件。 我希望看到计算器不那么激进,或者一些关于通过扩展操作计算器功能的说明。 不得不告诉我们所有的客户手动定义额外的 java 选项是次优的......

所有20条评论

确认的。 我们也看到了这个问题,

请您从应用程序日志中发布确切的失败。

Java buildpack 内存计算器已通过提交 b08a692 升级到 v3。 v3 尊重保留代码缓存的 OpenJDK 默认值,在 Java 8 上为 240 兆。 这似乎是导致应用程序无法启动的原因。 您可以覆盖内存计算器使用的值,如下例所示:

cf set-env app-name JAVA_OPTS '-XX:ReservedCodeCacheSize=64m'

但是你必须选择一个合适的大小,因为如果你把它做得太小,应用程序的 CPU 消耗可能会变高。

由于提交https://github.com/cloudfoundry/java-buildpack/commit/b08a69221a9ecfa61a9bfd568639f891b9313a19 ,我们的应用程序也无法加载/崩溃OutOfMemory:Metaspace 。 似乎内存计算器 (v3+) 不再为元空间使用 ~10% 的内存,而是将最大元空间大小设置为 ~56m。

解决方法:使用版本 v3.14 (https://github.com/cloudfoundry/java-buildpack.git#v3.14) 而不是最新版本。

我们看到了类似的问题,但由于CompressedClassSpace不足而导致 - 它并不算太远,给了我们8385K ,而我们实际上需要更多类似8704K

@markbigler v3 内存计算器根据应用程序中类文件的数量估计元空间消耗。 如果这还不够,您可以设置元空间限制,例如:

cf set-env app-name JAVA_OPTS '-XX:MaxMetaspaceSize=100m'

@ipsi同样适用于压缩类空间。 您可以使用以下方法进行设置,例如:

cf set-env app-name JAVA_OPTS '-XX:CompressedClassSpaceSize=20m'

同样的问题,出现内存不足错误

这里同样的问题。 使用旧版本的 buildpack 暂时解决了:

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

StackOverflow 对该主题的问题: http ://stackoverflow.com/questions/42576613/java-spring-application-cannot-start-up-on-cloudfoundry-outofmemoryerror-compre

谢谢,工作!

我们在这里看到了类似的问题,使用我们的代理的客户的类计算将失败,因为出于性能原因,我们的 javaagent 是本机二进制文件。 我希望看到计算器不那么激进,或者一些关于通过扩展操作计算器功能的说明。 不得不告诉我们所有的客户手动定义额外的 java 选项是次优的......

@akirasoft感谢您描述您的用例。 您想如何影响计算器的行为? 例如,调整加载类的估计数(Java buildpack 传递给内存计算器)然后让计算器根据新的估计值推导内存设置是否有意义? 如果是这样,您的 javaagent 是否添加了固定数量的类,或者添加的数量是否(线性?)取决于应用程序加载的类数量?

@glyn我们的足迹将是一些额外的平面空间来容纳我们的代理,然后根据类别按比例比您的计算器预期的空间多一点,如果我猜的话,额外增加 1-3%。 一般来说,根据这里的其他评论,在我看来,计算器有点过于激进了。 在过去一年左右的时间里,使用以前的计算器一切都很好。

同样在这里。 此应用程序(https://github.com/EuregJUG-Maas-Rhine/site,Spring Boot)不再启动(CompressedClassSpace)。

我也有同样的问题。 回滚到旧版本也为我修复了它。

我的应用程序也存在同样的问题。 回滚到 v3.13

我们还看到了 OutOfMemoryErrors:

2017-03-06T09:20:39.44+0900 [App/0] OUT # java.lang.OutOfMemoryError: Compressed class space

也许 v3 启发式需要调整

@akirasoft “一些额外的平面空间”可能会在堆、元空间和压缩类空间(或 Java 7 中的 permgen)之间拆分,甚至可能影响保留的代码缓存和直接内存消耗,因此添加一个常量是不够的考虑代理需求的单一公式。 是否可以根据加载类的等效数量来构建代理的“平面空间”消耗? 有关计算如何产生的详细信息,请参阅内存计算器 v3 的设计

我们正在使内存计算器分配更多的元空间和压缩类空间。 有关详细信息,请参阅提交 c9867a6

内存计算器 v3.2.0.RELEASE 可用。 请重试您的应用程序推送,看看它们现在是否有效。

@glyn我们通过 Slack 交谈,但现在一切看起来好多了,感谢修复!

我已经恢复到 buildpack v3.12,它运行良好。

由于它已被提及更准确的问题 #391,我现在关闭此问题。

谢谢大家的帮助。

此页面是否有帮助?
0 / 5 - 0 等级