HOW TO GO

〜昨日の今日とは一味二味違うBlog〜

Eclipse + Tocmat7 + Java7でJava Interactive Profiler(JIP)を動かす

JavaWEBアプリのパフォーマンスを調べることが発生しそうなので予習した内容をメモ。

環境

Windows7
Eclipse(pleiades4.2)
・Tomcat7
Java Interactive Profiler(JIP)1.2
・Struts2.3.15
特に変わったライブラリはなし。普通のTomcatでStruts2。

Java Interactive Profiler

Javaの実行結果(パッケージ、クラス、メソッド単位でcall回数や実行時間など)を計測して表示してくれるツールです。
詳しくはこのあたりを参照。
http://sourceforge.net/projects/jiprof/

インストール

http://sourceforge.net/projects/jiprof/
からダウンロードして展開します。
(展開した場所を%JIP_HOME%とます)
antでビルドします。(展開しただけだと必要なjarがありません)

> cd %JIP_HOME%
> ant dist

でOK。
エラーなくantが終了し、%JIP_HOME%\tools に「jipViewer.bat」ができていればOKかと思います。

Tomcatの起動設定(引数の追加)

EclipseTomcatの実行構成画面(プロジェクトを右クリック→実行→実行の構成)にて、
以下の引数を追加します。
f:id:sugiim:20130822181844g:plain

-javaagent:%JIP_HOME%/tools/eclipse/jip-src-1.2/profile/profile.jar -Dprofile.properties=%JIP_HOME%/tools/eclipse/jip-src-1.2/profile/webapp.profile.properties

これだけだとエラーになりました。

SEVERE: フィルタ struts2 の起動中の例外です
java.lang.VerifyError: Expecting a stackmap frame at branch target 496 in method jp.sample.SampleAction.execute()Ljava/lang/String; at offset 7
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2413)
at java.lang.Class.getConstructor0(Class.java:2723)
at java.lang.Class.getConstructor(Class.java:1676)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(Unknown Source)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(Unknown Source)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(Unknown Source)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(Unknown Source)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(Unknown Source)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(Unknown Source)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(Unknown Source)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Unknown Source)
at org.apache.struts2.dispatcher.Dispatcher.init(Unknown Source)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(Unknown Source)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(Unknown Source)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:107)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4656)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5312)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

どうもJava7だとエラーになるようです。
エラーを回避するように以下の引数も追加します。

-XX:-UseSplitVerifier -XX:-UseSplitVerifier

これでエラーなくTomcatを起動できました。

JIPの開始

以下の場所にでコマンドコマンドを実行します。

>cd %JIP_HOME%\client
>start.bat localhost 15599

するとTomcatのコンソールに
「start」と出力されるはずです。

ここからWEBシステムで分析したい画面を操作します。
プロファイルを止める時は、以下のコマンドを実行します。
(Startと同じようにTomcatのコンソールに「finish」と表示されます)

>cd %JIP_HOME%\client
>finish.bat localhost 15599

分析

分析のためにJIPのViewerを起動します。
計測された結果がEclipseのルートフォルダ(Eclipse.exeがある場所)に出力されているはずです。
(profile.xml、profile.txt)

これを元にViewerを起動します。

> cd %JIP_HOME%\tools 
> jipViewer.bat {Eclipseのホーム}\profile.xml

これでviewerが起動します。