参考
https://i-beam.org/2019/08/15/jvm-heap-sizing/
JVMのメモリの使用量
http://promamo.com/?p=2828
JVMはヒープ以外にもかなりメモリを使っている。
Eden領域
new演算子によって作成されたJavaオブジェクトが最初に格納される領域である。
Survivor領域
New領域に格納されていたJavaオブジェクトのうち,ガベージ・コレクション実行時に破棄されなかったJavaオブジェクトが格納される領域である。Survivor領域は,From空間とTo空間で構成される。From空間とTo空間のサイズは同じ。
Tenured領域
長期間必要であると判断されたJavaオブジェクトが格納される領域である。Survivor領域で指定回数を超えてガベージ・コレクションの実行対象となり,破棄されなかったJavaオブジェクトが,この領域に移動される。
Permanent領域
ロードされたclassなどの情報が格納される領域である。
Cヒープ領域
JVM自身が使用する領域である。
スタック領域
Javaスレッドのスタック領域である。
jstat
http://manned.org/jstat/443de6d7
vmidの確認
jps
でJavaプロセスのvmidを確認する。
jstatの実行
jstat -オプション vmid 更新ms jstat -gc 1234 1000
オプション
class | クラス・ローダーの動作に関する統計データ |
compiler | HotSpot Just-in-Timeコンパイラの動作に関する統計データ |
gc | ガベージ・コレクトされたヒープの動作に関する統計データ |
gccapacity | 世代ごとの容量と対応する領域に関する統計データ |
gccause | ガベージ・コレクション統計データの概要(-gcutilと同じ)と、直前および現在(適用可能な場合)のガベージ・コレクション・イベントの原因 |
gcnew | New世代の動作に関する統計データ |
gcnewcapacity | New世代のサイズと対応する領域に関する統計データ |
gcold | Old世代およびPermanent世代の動作に関する統計データ |
gcoldcapacity | Old世代のサイズに関する統計データ |
gcpermcapacity | Permanent世代のサイズに関する統計データ |
gcutil | ガベージ・コレクション統計データの概要 |
printcompilation | HotSpotコンパイル方法の統計データ |
-classオプション
クラス・ローダーの統計データ
列 | 説明 |
---|---|
Loaded | ロードされたクラスの数 |
Bytes | ロードされたKB数 |
Unloaded | アンロードされたクラスの数 |
Bytes | アンロードされたKB数 |
Time | クラスのロードやアンロード処理に要した時間 |
-compilerオプション
HotSpot Just-In-Timeコンパイラの統計データ
列 | 説明 |
---|---|
Compiled | 実行されたコンパイル・タスクの数 |
Failed | 失敗したコンパイル・タスクの数 |
Invalid | 無効にされたコンパイル・タスクの数 |
Time | コンパイル・タスクの実行に要した時間 |
FailedType | 最後に失敗したコンパイルのコンパイル・タイプ |
FailedMethod | 最後に失敗したコンパイルのクラス名とメソッド |
-gcオプション
ガベージ・コレクトされたヒープの統計データ
列 | 説明 |
---|---|
S0C | Survivor領域0の現在の容量(KB) |
S1C | Survivor領域1の現在の容量(KB) |
S0U | Survivor領域0の使用率(KB) |
S1U | Survivor領域1の使用率(KB) |
EC | Eden領域の現在の容量(KB) |
EU | Eden領域の使用率(KB) |
OC | Old領域の現在の容量(KB) |
OU | Old領域の使用率(KB) |
PC | Permanent領域の現在の容量(KB) |
PU | Permanent領域の使用率(KB) |
YGC | 若い世代のGCイベント数 |
YGCT | 若い世代のガベージ・コレクション時間 |
FGC | フルGCイベント数 |
FGCT | フルガベージ・コレクション時間 |
GCT | ガベージ・コレクション総時間 |
-gccapacityオプション
メモリー・プール世代および領域容量
列 | 説明 |
---|---|
NGCMN | New世代の最小容量(KB) |
NGCMX | New世代の最大容量(KB) |
NGC | New世代の現在の容量(KB) |
S0C | Survivor領域0の現在の容量(KB) |
S1C | Survivor領域1の現在の容量(KB) |
EC | Eden領域の現在の容量(KB) |
OGCMN | Old世代の最小容量(KB) |
OGCMX | Old世代の最大容量(KB) |
OGC | Old世代の現在の容量(KB) |
OC | Old領域の現在の容量(KB) |
PGCMN | Permanent世代の最小容量(KB) |
PGCMX | Permanent世代の最大容量(KB) |
PGC | Permanent世代の現在の容量(KB) |
PC | Permanent領域の現在の容量(KB) |
YGC | 若い世代のGCイベント数 |
FGC | フルGCイベント数 |
-gccauseオプション
このオプションは、-gcutilオプションと同じガベージ・コレクション統計データの概要を表示しますが、最後のガベージ・コレクション・イベントと(適用可能な場合は)現在のガベージ・コレクション・イベントの原因が含まれます。-gcutilで一覧表示される列のほか、このオプションでは次の列が追加されます。
GCイベントを含むガベージ・コレクション統計データ
列 | 説明 |
---|---|
LGCC | 最後のガベージ・コレクションの原因 |
GCC | 現在のガベージ・コレクションの原因 |
-gcnewオプション
New世代の統計データ
列 | 説明 |
---|---|
S0C | Survivor領域0の現在の容量(KB) |
S1C | Survivor領域1の現在の容量(KB) |
S0U | Survivor領域0の使用率(KB) |
S1U | Survivor領域1の使用率(KB) |
TT | 殿堂入りしきい値 |
MTT | 最大殿堂入りしきい値 |
DSS | 適切なSurvivorサイズ(KB) |
EC | Eden領域の現在の容量(KB) |
EU | Eden領域の使用率(KB) |
YGC | 若い世代のGCイベント数 |
YGCT | 若い世代のガベージ・コレクション時間 |
-gcnewcapacityオプション
New世代領域サイズの統計データ
列 | 説明 |
---|---|
NGCMN | New世代の最小容量(KB) |
NGCMX | New世代の最大容量(KB) |
NGC | New世代の現在の容量(KB) |
S0CMX | Survivor領域0の最大容量(KB) |
S0C | Survivor領域0の現在の容量(KB) |
S1CMX | Survivor領域1の最大容量(KB) |
S1C | Survivor領域1の現在の容量(KB) |
ECMX | Eden領域の最大容量(KB) |
EC | Eden領域の現在の容量(KB) |
YGC | 若い世代のGCイベント数 |
FGC | フルGCイベント数 |
-gcoldオプション
OldおよびPermanent世代の統計データ
列 | 説明 |
---|---|
PC | Permanent領域の現在の容量(KB) |
PU | Permanent領域の使用率(KB) |
OC | Old領域の現在の容量(KB) |
OU | Old領域の使用率(KB) |
YGC | 若い世代のGCイベント数 |
FGC | フルGCイベント数 |
FGCT | フルガベージ・コレクション時間 |
GCT | ガベージ・コレクション総時間 |
-gcoldcapacityオプション
Old世代の統計データ
列 | 説明 |
---|---|
OGCMN | Old世代の最小容量(KB) |
OGCMX | Old世代の最大容量(KB) |
OGC | Old世代の現在の容量(KB) |
OC | Old領域の現在の容量(KB) |
YGC | 若い世代のGCイベント数 |
FGC | フルGCイベント数 |
FGCT | フルガベージ・コレクション時間 |
GCT | ガベージ・コレクション総時間 |
-gcpermcapacityオプション
Permanent世代の統計データ
列 | 説明 |
---|---|
PGCMN | Permanent世代の最小容量(KB) |
PGCMX | Permanent世代の最大容量(KB) |
PGC | Permanent世代の現在の容量(KB) |
PC | Permanent領域の現在の容量(KB) |
YGC | 若い世代のGCイベント数 |
FGC | フルGCイベント数 |
FGCT | フルガベージ・コレクション時間 |
GCT | ガベージ・コレクション総時間 |
-gcutilオプション
ガベージ・コレクション統計データの概要
列 | 説明 |
---|---|
S0 | Survivor領域0の使用率(現在の容量に対するパーセンテージ) |
S1 | Survivor領域1の使用率(現在の容量に対するパーセンテージ) |
E | Eden領域の使用率(現在の容量に対するパーセンテージ) |
O | Old領域の使用率(現在の容量に対するパーセンテージ) |
P | Permanent領域の使用率(現在の容量に対するパーセンテージ) |
YGC | 若い世代のGCイベント数 |
YGCT | 若い世代のガベージ・コレクション時間 |
FGC | フルGCイベント数 |
FGCT | フルガベージ・コレクション時間 |
GCT | ガベージ・コレクション総時間 |
-printcompilationオプション
HotSpotコンパイル方法の統計データ
列 | 説明 |
---|---|
Compiled | 実行されたコンパイル・タスクの数 |
Size | メソッドのバイトコードのバイト数 |
Type | コンパイル・タイプ |
Method | コンパイル方法を特定するクラス名とメソッド名。クラス名では、名前空間の区切り文字として、「.」のかわりに「/」が使用されます。メソッド名は、指定されたクラス内のメソッドです。これらの2つのフィールドの形式は、HotSpot |
コンテナ向けメモリ確認
Dockerなどのコンテナ内でのメモリ確認、指定で使えそうなオプション
設定値確認
-XshowSettings
すべての設定を表示
java -XshowSettings --version
vmの設定を表示
java -XshowSettings:vm --version
利用できる最大ヒープメモリサイズも表示されるので、最大ヒープサイズを確認するときに便利
-XX:+PrintFlagsFinal
こちらもjvmの各種パラメータを確認できる
java -XX:+PrintFlagsFinal --version
利用できるヒープサイズを確認したいときはgrepなどで絞る
java -XX:+PrintFlagsFinal --version | grep MaxHeap
ヒープサイズ指定
dockerの--memoryオプションでカーネルの CGroup という機能を使って、コンテナ内で利用できるメモリを制限できる。
しかし、コンテナ内でfreeで確認するとホストのメモリ量が表示される。
Java10からは UseContainerSupport オプションによりCGroupのCPU、メモリの値を取得するようになった。
UseContainerSupport オプションはデフォルトで有効になっています。
ただし、DockerのバージョンによってはCGroup の値を正しく取得できないことがあるで注意。
UseContainerSupport
コンテナサポートのオプション。デフォルトで有効になっています。
確認
java -XX:+PrintFlagsFinal --version | grep UseContainerSupport
無効にする
-XX:-UseContainerSupport
例
java -XX:+PrintFlagsFinal -XX:-UseContainerSupport --version | grep UseContainerSupport
有効にする
-XX:+UseContainerSupport
通常はデフォルトで有効になっているので余り使う機会はないが、環境によっては
例
java -XX:+PrintFlagsFinal -XX:+UseContainerSupport --version | grep UseContainerSupport
MaxRAMPercentage
ヒープサイズの最大値をパーセンテージで指定できる。
java -XshowSettings:vm -XX:MaxRAMPercentage=50 -version
ヒープ以外の領域もあるでどんなに大きくても30%〜50%がいいと思う。
MaxHeapSize
従来の-Xmxと同じ。最大ヒープサイズを絶対値で指定する
java -XX:+PrintFlagsFinal -XX:MaxHeapSize=512m -XshowSettings:vm --version | grep -i maxheap java -XX:+PrintFlagsFinal -Xmx512m -XshowSettings:vm --version | grep -i maxheap
[カテゴリ: プログラミング言語 > Java]
[通知用URL]
Tweet
最終更新時間:2023年06月23日 12時48分58秒