読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

jconsoleでGC状態を見る

ブログ
 最近のJavaはリアルタイムでJVMの状態を見るツールが標準でついてきます。便利な世の中になりました。ヒープメモリの様子を見ればどれくらいの頻度でGCをしているか、GCでちゃんとメモリを解放できているかわかります。jconsoleというツールです。

まずローカルで試しました。これは何の苦もなくできました。jconsoleコマンドで起動して調べたいJVMを選ぶだけです。

リモートが思わずはまりました。VirtualBox上のCentOS6.5でJettyを起動しそこにつなげようとしました。しかしつながりません。VirtualBoxではホスト-ゲスト間がデフォルト状態ではつながらないのでそのへんまわりのせいでつながらないのかと思いいろいろ試しましたがやはりだめです。結果的にはiptablesでした。初歩的なミスです・・・

設定がこんな具合になっていました。

[root@centos ~]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 

ACCEPT     icmp --  anywhere             anywhere            

ACCEPT     all  --  anywhere             anywhere            

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https 

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination       


INPUTのpolicyがACCEPTになっているので基本ACCEPTかと思ったらそうでなかったです。INPUTチェーンの最後のREJECTが何やらicmpのときだけは全部REJECTかと解釈してしまいましたがこれは「icmp-host-prohibited」というメッセージを返すのだそうです。紛らわしいなあ。policyをDROPにしておいてほしい。

あとはこちらを参考に設定したらできました。

jconsoleでTomcatサーバをモニタリングする

javaオプションはjettyの場合はjettyディレクトリの下のbin/jetty.shに書くのがよいと思います。

JAVA_OPTIONS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"