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

きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

z/OSでも動いたPerformance Inspector

Webページ通りでは動かなかったのだが、WebSphere Applicaiton Server v7.0 for z/OSでもPerformance Inspectorは動作しました。


PATHとLIBPATHの通し方が分からなかったが、IBMに質問をしたらすぐに回答がきた。
素晴らしいじゃないか。


自分で設定作業をしたわけじゃないのでウロ覚えだが、確かこういう設定が必要。
./tinstallをやる前に、インストール作業をやるユーザーのPATHに、WASのjavaを通す。


NOTE: For tinstall to properly install the package, you must be sure that java is already in your PATH. If it is not, you will be warned to do so, then execute tinstall again.


僕はこの注意書きに注意を払わなかったために、違うjavaが使われていた。
何に使われていた?


This package contains both libjprof31.so and libjprof64.so. Based upon which version of java is found, the matching version of JPROF will be copied to libjprof.so. If you change your version of java, simply execute tinstall again to ensure that libjprof.so is the correct version. Alternatively, you can substitute "jprof31" or "jprof64" for "jprof" in any java invocation.


この文章を読む限り、javaの内容次第で、jprof31かjprof64のいずれかをjprofって名前でコピーするぜって言っているようだ。つまり、PATHの前方に、目的のWebSpherejavaを通しておかないといけなかった
他に、WebSphereの起動ユーザが特殊なもんで、javaを叩くユーザーにPATHやLIBPATHを通す方法が分からず困ったのだが、そこがIBMの回答で解決した。
「server_region_libpath」という設定可能な項目があるらしい。(あってるかな?ウロ覚え)
「BBOM0001I メッセージで参照される変数の値の変更」というタイトルのInformation Centerのページを見てもらうと良いだろう。
きっとあるsetrunenvはUSSでのユーザーが直接javaを叩く場合のことを想定しているものなのかもしれない。


PATHの方はたしか不要だったような気がする。
ただし、rtdriverコマンドで繋ぐクライアントユーザー(JPROF(JVMTI使ったプロファイラー)から見てrtdriverはクライアントです)は、rtdriverコマンドをすぐ叩けるようにPATHに追加しとかないといけないだろう。


rtdriverを使っていて不思議だったのが、
「exit_rtdriver」コマンドは何故小文字を受け付けないのか謎だ。
大文字でないとそんなコマンド無いって言われたぞ。
間違ってもshutdownコマンドは打つな、javaプロセスを殺すな。
あと、ctrl+CなんかでもEXIT_RTDRIVERを意味するようになっているみたいだ。


あと、どうやら僕は-agentlibと-agentpathの使い方を間違えていた節がある。
てっきり-agentpathは-agentlibを補完するものだと思っていた。
まだまだ不勉強だね。



PTT_CYCLESという言葉が出てくる。
サイクルってのは僕にもよく分からない。
Per Thread Timeの略だ。
callflowなどでプロファイルして、log-rtとかを出すと分かるだろうが、
このプロファイラはスレッド毎に集計してるっぽいよ。


z/OSでは、どうやらptt_instsというメトリックスは使えないらしい。
使用出来るのはptt_cyclesとraw_cyclesとnometricsらしい。
このメトリックスのことは聞いた話ではあるが、
試そうとしていることが若干違っていたので、この内容は100%信じないでくれ。
とりあえず僕はptt_cyclesでも十分事足りるだろうと思ったので、ptt_cyclesでいいやって思った。


Visual Performance Analyzerの使い方のコツ。
まだまだ良いコツは編み出してないのだが、
まずは中央のスレッド群から不要なスレッドをフィルターではじくこと。
さらにそこからfindでそれっぽいところまで検索・移動しよう。
どんどん掘り下げると段々見えにくくなるから適宜drilldownをすること。


左のメソッドの一覧から正規表現で絞りこむ。
これは複数スレッドの合計になっているはずです。(たぶん)
変に0%とか出てることも多い。(細かいことは気にするな)
calls,ptt_cycles,cum_ptt_cyclesみたいな列をもしも日本語に直すなら、
「呼び出し回数」、「基本時間」、「累積時間」になると思う。
ちなみにこれらの数字は、オプションでスケール(secとかの時間単位)を与えないと、ナノ秒で集計されているので注意されたし。


ふぅ、あとはLinuxで動くように出来ればハッピーなんだけどなー。
なんでz/OSで動かせてLinuxで動かせてないんだよw