Java, メモリ管理

JVM が使うメモリ

  • Java ヒープメモリ
  • Cヒープ
  • スレッドスタック

といった種類がある。一般に言われるヒープは Java ヒープメモリのことを言う。-Xmx などで設定されるヒープは Java ヒープメモリのみの話なので、JVM プロセスが使うメモリ総量は -Xmx で指定したメモリサイズを超える点に注意

ガベージコレクション

G1GC

ガベージファーストガベレージコレクション。Java9 からのデフォルト方式(スペックが低いとそうとは限らないと言う話も)。

jstat で JVM のパフォーマンス統計を見る

次のコマンドで java のプロセスIDを確認します。

jps

次のコマンドで各領域の容量と使用量を確認できます。

jstat -gc [プロセスID]

次のコマンドで1秒ごとに各領域の使用率を確認できます。-h5は5行ごとにヘッダを表示するオプションです。

jstat -gcutil -h5 [プロセスID] 1000

JVM のヒープメモリ設定

JVM の起動時に -Xmx, -Xms などのオプションで指定する。-Xmx-XX:MaxHeapSize と同じ。

デフォルト値

デフォルト値は使用可能なサーバの物理メモリに依存する。16GB の環境ならその1/4の 4GB がデフォルトの最大ヒープサイズになる。

jconsole

起動するには jconsole とコマンドを打つだけ。

jconsole

踏み台を経由してリモートアクセスするには SOCKS プロキシを使う

設定

CATALINA_OPTS に下記の設定を追加する

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=7085
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

Reference

タイトルとURLをコピーしました