2017-03-03 18 views
3

將新版本的Java/Spring Boot軟件部署到在CloudFoundry上運行的Swisscom Developer Cloud後,啓動突然失敗,並出現以下錯誤:OutOfMemoryError: Compressed class space。因此,我們決定部署該軟件的先前版本,即實際剛剛運行的版本:發生了同樣的錯誤。我們沒有從Java7切換到Java8,我們也沒有改變任何配置。這導致了一個問題:這是真的在我們這邊還是在服務器端出錯?Java/Spring應用程序無法在cloudfoundry上啓動:OutOfMemoryError壓縮類空間


我們又試圖通過設置變量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 

然後,我們刪除的Java應用程序,並在瑞士電信開發者控制檯數據庫服務並重新創建它。它沒有效果,發生同樣的錯誤。

最後,你知道爲什麼會突然發生這種錯誤,即使這是蠻好的運轉幾分鐘前一個版本?


EDIT

這是明顯的([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 

這個命令似乎要被執行(在崩潰後的原木):因爲Java buildpack改爲使用內存計算器3.x版本發生

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 
+0

@FyodorGlebov謝謝,我已經更新了相應的問題。 –

+0

您正在使用兩天前發佈的buildpack,請參閱https://github.com/cloudfoundry/java-buildpack/releases。你可以用舊的buildpack來縮小這個問題嗎? 'cf push -b https://github.com/cloudfoundry/java-buildpack.git \#v3.12'我想看看問題是否與新的buildpack有關。 –

+0

你可以請觀看或更新這個GitHub問題嗎?看來你面臨的問題https://github.com/cloudfoundry/java-buildpack/issues/390'cf set-env $ APPNAME JAVA_OPTS'-XX:CompressedClassSpaceSize = 20m'' –

回答

5

的內存溢出錯誤。 GitHub issue 390正在討論這種變化引發的類似問題。詳情請參閱此問題。

一般來說,內存計算器3.x版選擇基於應用程序的類文件,並依賴於Java版本的一些默認值的數量不同的JVM內存設置的值。然後它將最大堆大小設置爲剩餘內存量。

存儲器計算器的先前版本是由設置JBP_CONFIG_OPEN_JDK_JRE配置。但是,只需在JAVA_OPTS中設置相應的Java內存設置即可配置v3.x。例如,你可以設置最大元空間大小爲100 Mb如下:

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

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

如果你只是想一個解決方法,您可以使用Java版本的存儲計算器變化之前buildpack發佈瑞士電信從Java開發人員

2

評論:

For sure they will be reverting the memory heuristics to what they were in 3.13 or at least refine the calculations. The current recommendation to all customers is either

  • 使用3.13或
  • 使用環境變量JAVA_OPTS的某些顯式選項。
+0

太好了,謝謝你的信息! –

相關問題