質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
JVM

JVM(Java Virtual Machine)があれば、一連のコンピューターソフトウェアプログラムとデータストラクチャが、仮想マシンモデルを使って他のコンピュータプログラムやスクリプトを拡張できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

24379閲覧

【JVM】【ヒープ領域】Metaspace領域と圧縮クラス領域の使用率が90%以上になる

MyTitsInJP

総合スコア14

JVM

JVM(Java Virtual Machine)があれば、一連のコンピューターソフトウェアプログラムとデータストラクチャが、仮想マシンモデルを使って他のコンピュータプログラムやスクリプトを拡張できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2017/10/27 04:05

編集2017/10/27 04:50

お世話になっております。

現在、JVMのヒープ領域について監視をしております。
jstatを用いてヒープ領域の状況を確認すると
Metaspace領域と圧縮クラス領域の使用率が常に80~90%になっています。

また、jstatの公式リファレンスの例を見ても
Metaspace領域と圧縮クラス領域の使用率が90%を超えています。
※下記の表の「M」と「CCS」参照

jstat - Oracle Help Center

jstat -gcutil 21891 250 7 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 97.02 70.31 66.80 95.52 89.14 7 0.300 0 0.000 0.300 0.00 97.02 86.23 66.80 95.52 89.14 7 0.300 0 0.000 0.300 0.00 97.02 96.53 66.80 95.52 89.14 7 0.300 0 0.000 0.300 91.03 0.00 1.98 68.19 95.89 91.24 8 0.378 0 0.000 0.378 91.03 0.00 15.82 68.19 95.89 91.24 8 0.378 0 0.000 0.378 91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378 91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378

こちらの2つに関して、使用率が90%を超えてもメモリリークやOutOfMemoryExceptionは起きないという認識でよいのでしょうか。
また、問題ない場合はなぜ問題ないか教えていただけますでしょうか。

自分なりの考察は以下です。
・Metaspace領域と圧縮クラス領域はクラスやメソッドが格納される場所であまり変動しない
・Metaspace領域に関しては自動拡張するため90%超えていても問題ない

よろしくお願い致します。

追記

kuniku様から追記要望がありましたので追記しました。

CompressedClassSpaceSizeやMaxMetaspaceSize、MetaspaceSizeを取得した結果になります。

java -XX:+PrintFlagsFinal -varsion -server uintx CompressedClassSpaceSize = 1073741824 uintx MaxMetaspaceExpansion = 5451776 uintx MaxMetaspaceFreeRatio = 70 uintx MaxMetaspaceSize = 4294901760 uintx MetaspaceSize = 21807104 uintx MinMetaspaceExpansion = 339968 uintx MinMetaspaceFreeRatio = 40

また、実際にサーバで使用されているMetaspace領域と圧縮クラス領域は以下になります。

jstat -gc -t 21891 Timestamp S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 5069.1 38400.0 1024.0 0.0 676.4 88064.0 6091.0 182784.0 68608.5 96536.0 87421.7 12848.0 10462.5 45 1.385 4

MC(Metaspace領域の容量)がMetaspaceSizeを超えていることが分かります。
CCSC(圧縮クラス領域の容量)はCompressedClassSpaceSizeを超えていないようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuniku

2017/10/27 04:29

jvmの起動オプションで MaxMetaspaceSize は指定されていますか? 指定されていると それを超えることはできずに、OutOfMemoryErrorになる。 Metaspaceの初期値と最大値は、 https://qiita.com/harukasan/items/dff1856260f23c0f9d93 のように確認できます。
MyTitsInJP

2017/10/27 04:50

ご要望ありがとうございます。質問内に追記しましたのでご確認ください。
guest

回答1

0

ベストアンサー

  • 私の知見では、

-- メモリリークは、GCで解放されないオブジェクトがどれだけあるかなので、作成しているプログラムの不具合と思えば良いと思います。
-- OutOfMemoryは、メモリが必要だが確保できずに発生するので、指定するGCオプションの誤りやメモリに載せすぎが要因

  • Metaspace については、数値から
uintx MaxMetaspaceSize = 4294901760 = 4194240kb=4095MB uintx MetaspaceSize = 21807104 = 21296kb=21MB
MC MU 96536.0 87421.7

MC: メタスペースの容量(KB)。
MU: メタスペースの使用率(KB)。

なので、必要ならば自動で拡張されていくので十分に足りることになりますね。約4GBも使うことは、極めて稀なシステムかと。

uintx CompressedClassSpaceSize = 1073741824 =1024MB

CompressedClassSpaceSizeについては、知見がありません。

  • MetaspaceSize + CompressedClassSpaceSize = MaxPermSize として JDK7まででは、64bit環境において、パーマネント領域の最大値MaxPermSizeは512MBくらいで十分に足りる。 1024 MBくらいまで指定するのは、例えばtomcatのwebappsの下にある war が10-20個と多いようなケース、staticクラス・定数・enum等がものすごい多く、DBアクセスのエンティティやそれに関連するクラスが多く、テーブル数が1000以上扱ってるような場合かな

  • その他

https://www.slideshare.net/YujiKubota/javalangoutofmemoryerror-java
のスライドの6ページ~20ページあたりを参考にしてみると良いかと

http://chonaso.hatenablog.com/entry/20150917/1442442000
では、32bit環境を除いて、ヒープ全体のメモリ容量指定が小さいと、CompressedClassSpaceSizeのデフォルト値1GBでOOM Killerが起きるみたいです。

投稿2017/11/01 04:47

kuniku

総合スコア253

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MyTitsInJP

2018/02/15 10:23

返信が遅くなり申し訳ございません。 ご回答ありがとうございました。 理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問