社内勉強会の為、作った資料のメモ
目次
1. 自己紹介
昔は直接メモリ管理をしてた
2. 始まりの物語
調査を始めた経緯について
3. ネクストエンジンの受注API取込とは?
受注API取込の概要を説明
楽天受注API取込の特徴について(PHP→JAVA)
4. 楽天受注API取込の調査
jconsole紹介
jconsoleで監視する為の下準備
5. JAVAのメモリとGCについて
heap/Permanent, new/old, Eden/Suvivor領域説明
Scavenge GC/Full GC説明
6. メモリチューニング
パフォーマンスに有利に働くように各値の初期値は、各値の最大値と同じ大きさに設定し、 JVM がメモリを増加させる処理が発生することを極力に抑えるようにします。
-Xms値 = -Xmx値
-XX:PermSize = -XX:MaxPermSize
7. GCチューニング
gcログ出力
-verbose:gc:一般的な GC 情報を出力
-XX:+PrintGCDetails:New 領域、Old 領域の詳細情報を出力
-XX:+PrintGCDateStamps:GCの発生時刻を出力
-Xloggc:filename:GCの出力情報をファイル filename に保存
jstatでメモリ領域ごとのGC状況を確認しよう
jstat -出力オプション(-h[ヘッダーを出力する行間隔]) [プロセス番号] [出力間隔(ミリ秒)]
8. 結果
おまけ
遠隔サーバーのプロセスをjconsoleで確認しよう
リモートで実行する場合、「JAVAプロセスをJMX(jconsole)で監視できるようにするよ〜」ということで、jmxremote設定が必要。
サーバー全体に適用するのであれば設定ファイルに書く、JAVA単体で確認するのであればJAVAオプションに追加する。
com.sun.management.jmxremote.port=[port番号] :JMXをリモートで参照する際のアクセスポート
com.sun.management.jmxremote.ssl=[true/false] :リモートアクセスの際、sslを有効にするか
com.sun.management.jmxremote.authenticate=[true/false] :IP/PASSWORDを要求するか
参考資料
ここが大変だよ、JavaのGC/メモリ管理
[Java][JavaFX]Javaプログラムを多数動かす場合のチューニング
メモリリークについての誤解
PHP GC
一般教養としてのGarbage Collection
JVMのチューニング
jconsoleでTomcatサーバをモニタリングする
踏み台経由のsshでsocks proxyをつくって、jmx接続して監視する話
インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識
SSH で Permission Denied となる傾向と対策