トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

JVMのメモリ使用量

参考

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]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2023年06月23日 12時48分58秒