2017-03-03 16 views
3

CloudFoundry上で実行されているSwiss/CVEの新しいバージョンをSwisscom Developer Cloudにデプロイした後、起動が突然失敗し、次のエラー:OutOfMemoryError: Compressed class spaceが発生しました。そこで、実際に直前に実行されていた以前のバージョンのソフトウェアを導入することにしました。同じエラーが発生しました。私たちはJava7からJava8に切り替えず、設定を変更しませんでした。これは疑問につながります。これは本当に私たちの側で、あるいはサーバー側で間違っていますか?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 

ジャワ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 
+0

@FyodorGlebovありがとう、私はそれに応じて質問を更新しました。 –

+0

2日前にリリースされたbuildpackを使用しています。https://github.com/cloudfoundry/java-buildpack/releasesを参照してください。問題を絞り込むために古いビルパックで試してみてください。 'cf push -b https://github.com/cloudfoundry/java-buildpack.git \#v3.12'問題が新しいビルドパックに関連しているかどうかを確認したい。 –

+0

このGitHubの問題を見たり、更新したりできますか? https://github.com/cloudfoundry/java-buildpack/issues/390 'cf set-env $ APPNAME JAVA_OPTS '-XX:CompressedClassSpaceSize = 20m'' –

答えて

5

のJava buildpackがメモリ電卓のバージョン3.xを使用するように変更されたためにOutOfMemoryエラーが発生しました。この変更に起因する同様の問題は、GitHub issue 390で議論中です。詳細については、この問題を参照してください。

一般に、メモリ計算機のv3.xは、アプリケーション内のクラスファイルの数とJavaのバージョンに依存するいくつかのデフォルト値に基づいて、さまざまなJVMメモリ設定の値を選択します。その後、最大ヒープサイズを残りのメモリ量に設定します。

メモリ計算機の以前のバージョンはJBP_CONFIG_OPEN_JDK_JREに設定されていました。ただし、対応するJavaメモリ設定をJAVA_OPTSに設定するだけで、v3.xを簡単に設定できます。

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

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

あなたは、単に回避策が必要な場合、あなたは、Javaのバージョンを使用することができますが、メモリの計算の変更前にリリースさbuildpack:たとえば、次のようにして100 MBに最大メタスペースのサイズを設定することができます

2

スイスコムのJava開発者からのコメント:

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

すばらしい、情報ありがとう! –

関連する問題