WebApp †ディレクトリ構成 †
JAR †ROOT パッケージ名に従ったディレクトリ階層で classファイルを格納 ├─ com com.seパッケージのclassを格納する | └─ se | *.class | └─ META-INF ejb-jar.xml MANIFEST.MF WAR †ROOT ├─ WEB-INF コンテキストルート直下に必ず作成する必要がある(クライアントが直接アクセスすることは出来ない) | │ web.xml サーブレットとURLの紐付けや、その他の各種設定を行うファイル | │ *.tld カスタムタグを使用する際に必要となる設定ファイル | │ | ├─ classes クラスファイルを配置 | │ | ├─ lib クラスファイルをアーカイブ化(JARやZIP)したファイルを配置 | │ | └─ tags カスタムタグに関連するタグファイル(*.tag、*.tagx)を格納 | JARファイル内では、/META-INF/tags/*.tag *.tagx として格納 | └─ META-INF 管理情報を格納するディレクトリ。jarコマンドによって自動的に作成される MANIFEST.MF jarコマンドのバージョンなどが記載されている EAR †ROOT | *.jar | *.war | └─ META-INF application.xml MANIFEST.MF Java起動オプション †パフォーマンスに有利に働くように各値の初期値は、各値の最大値と同じ大きさにする
パラメータ毎に改行して出力するには以下のコマンドを実行する。 ps -ef | egrep -i java | perl -p -e 's/-/\n-/g' Javaリソース監視 †jvisualvm.exe †Java SDKインストールディレクトリにあるjvisualvm.exeをクリックで起動。 jstat (参考) †Java 仮想マシン統計データ監視ツール(JDKインストールディレクトリ内のbinフォルダに格納) jstat オプション PID [interval[s|ms] [count]] ]
(例)ガベージコレクションの統計データを1秒毎に5回取得 # ./jstat -gcutil -t 29874 1s 5 Timestamp S0 S1 E O P YGC YGCT FGC FGCT GCT 2934528.6 0.00 0.00 8.00 21.21 99.84 821 2.316 816 60.206 62.521 2934529.6 0.00 0.00 8.00 21.21 99.84 821 2.316 816 60.206 62.521 2934530.6 0.00 0.00 8.00 21.21 99.84 821 2.316 816 60.206 62.521 2934531.6 0.00 0.00 8.00 21.21 99.84 821 2.316 816 60.206 62.521 2934532.6 0.00 0.00 8.00 21.21 99.84 821 2.316 816 60.206 62.521
# jstat -gc `ps -ef | grep jav[a] | awk '{print $2}'` 5s S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 512.0 512.0 0.0 498.2 4416.0 3371.4 10944.0 5683.7 524288.0 4999.2 7 0.032 0 0.000 0.032 512.0 512.0 0.0 498.2 4416.0 3371.4 10944.0 5683.7 524288.0 4999.2 7 0.032 0 0.000 0.032
xC(現在の使用量)は 仮想メモリとして確保され、xU(使用率)が実際に物理メモリとして確保されているっぽい。 ヒープ領域 †
Java Flight Recorder(jcmd) †java の起動オプションに以下を指定し有効化する。 -XX:+UnlockCommercialFeatures -XX:+FlightRecorder フライトレコーダーの記録。(Java 7 update 40 以降の JDK で使用可能) jcmd <PID> [help] [コマンド]
Java Platform, Standard Edition Java Flight Recorder ランタイムガイド
スレッドダンプ(jstack) †-- PID確認 $JAVA_HOME/bin/jps -- スレッドダンプ取得 $JAVA_HOME/bin/jstack <PID> -- コンソールログに結果を出力させる場合 kill -3 <PID> ヒープダンプ(jmap) †-- ヒストグラムの表示 jmap -histo <PID> ‥‥次回のFullGCで削除されるオブジェクトを含む jmap -histo:live <PID> ‥‥FullGCを行ってから表示する(使用中のオブジェクトのみ表示される) -- DUMPファイルを出力 jmap -dump:live,format=b,file=<出力ファイル名> <PID> Windowsの場合はPSToolを使用する。 > PsExec.exe -s "jps" ※TomcatのPIDが表示されることを確認 > PsExec.exe -s "jmap" -dump:format=b,file=<ファイルパス> <PID> スタックトレース解析 †HiLevelException: HiLevel ‥‥例外クラス名と、エラーメッセージ at Test.parentMethod(Test.java:19) ‥‥エラー発生箇所 at Test.<init>(Test.java:9) ‥‥上記関数の呼び出す元 at Test.main(Test.java:4) ‥‥上記関数の呼びだし元 Caused by: LowLevelException: LowLevel ‥‥スタックトレースの原因は、LowLevelExceptionである at Test.childMethod(Test.java:24) at Test.parentMethod(Test.java:17) ... 2 more ‥‥Caused by の直前の2行が続きのスタックとなる つまり、以下の通り続く。 at Test.<init>(Test.java:9) at Test.main(Test.java:4) ソースサンプル †
Apache Struts †バージョン確認方法 †struts.jar に含まれる META-INF/MANIFEST.MF ファイルの Specification-Version および Implementation-Version を確認する。 |