2009年2月アーカイブ

 前回の記事(SADEE 2を利用したリソース測定試験)で紹介した「jconsole」ですが、J2SE 5.0から利用することが出来ます。Sunに詳しい説明が書いてありますので、jconsole の使用を参照してください。

前回紹介した、リソースの試験では、半日間SADEE 2のシナリオを実行していました。結果は、テスト開始からヒープメモリの使用量が上昇して行き、ある一定値付近でガベージコレクション(GC)が実行された事が、jconsoleのグラフから確認できました。

作成したシナリオが、例えば、全てローカル上の変数で、全て解放されることが予想される場合に、明らかに、テスト開始時のヒープメモリの使用量までメモリが解放されていないということが判明すれば、プログラム上で間違えていると取られる事が出来ます。

 jconsoleは、まだまだこの先、リソース測定試験以外でも利用することが予想されるので、今から使っていこうかなと考えています。

Tomcatをjconsoleで監視する関連Webです。
rough justice jconsoleでTomcat(JVM)の監視

 現在、行っている案件でWebのリソースを測定する試験を行う為、自社製品であるWebシステム高負荷試験ツール 「SADEE 2(サディー ツー)」を利用して試験を行いました。

 リソース測定試験とは、想定される複数のユーザがWebにアクセスした時に、どれくらいCPUやメモリなどのリソースを使用しているかを測定し、例えば、メモリなどの消費が適切かどうかを測定する試験です。

 プログラムでメモリを使用した場合に、適切にメモリを開放しているかまたは無駄に使用していないかが重要になってきます。Javaでは、ガベージコレクション(GC)によって、プログラマやユーザ側からは正確に制御できませんが、例えば、変数などを局所化または最適化することで、無駄なメモリの発生を抑制出来る為、、変数などを局所化または最適化する必要があるかが確認できます。

 「SADEE 2」は、「詳細モード」と「高負荷モード」の2種類が用意されていますが、JavaのJ2SE 5.0以降ならJConsoleを利用することにより、簡単にメモリやガベージコレクションの動きを測定する事が可能です。JConsoleについては、別記事で!

「SADEE 2」の操作は、SADEE 2をインストールして、ブラウザでシナリオ作成する。後は、実行するだけと簡単です。一部、開発者である社長に操作を教えて頂きましたが、問題なくリソース測定試験を行えました。マニュアルを読むのも大事ですが、時間を買うという意味でも、聞いてしまった方が良い場合がありますしね。

「SADEE 2」の目的は、負荷試験をメインに置いていますが、JConsoleなどのツールを利用することにより、メモリやガベージコレクションの測定にも応用できます。負荷試験をメインにしていますので、複数のユーザを想定したり、複数回実行するのに、最適なため、楽にリソース測定が行えました。

 母校への電話の記事で、紹介しましたが、今週の木曜日に母校へ訪問することを約束しました。約束といっても、お世話になった先生が電話に出れなかったため、木曜日に母校へ訪問を伝えて頂きました。

目的は、求人活動なのですが、約4年ぶりの母校なので、懐かしく思いながら行ってきます。

 昨日は、歓迎会や案件の打ち上げがありました。

 

 案件の打ち上げでは、私が初めてメインで担当した案件の打ち上げも入っています。私の場合は、お酒が飲めないので、お祝いと言っても料理がメインですが、楽しめました。

個人的には、今ハマっている関数電卓の話と簿記の話が出たので、良かったです。

 達人プログラマーを読んでいて、参考になる事は、たくさんあるのですが、今日読んでいて特に気になった事や考えさせられた事を紹介します。

各項目の最後には、演習問題があるのですが、その中で以下の問題がありました。


6. Javaにおいて、(a + 1) <= a となる。

答えは、真となることはないのでしょうか。考え方は、Javaのプログラミング言語以外も同じだと思います。他にも問題がありますが、一番シンプルで一番分かりやすいので、紹介しました。

 

 ここで、私もシンプルな問題を一つ。言語は、Javaを例にしていますが、C++で考えても考え方は、変わりません。次のソースサンプルを見て下さい。

インタフェースで「hoge」メソッドが以下のように定義されていたとします。

void hoge() throws Exception;
以下のプログラムを実行したとします。
try {
    obj.hoge();
} catch (Exception e) {
    e.printStackTrace();
}


「hoge」メソッド内で、例外が発生した場合、「e.printStackTrace();」が実行されない場合があるか?。


通常例外が、発生した場合は、呼び出し元に例外を返すように処理している場合が多いでしょう。今回の場合も、「hoge」メソッドで例外が発生した場合に、例外をスローしていれば、「Exception」がキャッチされ、「e.printStackTrace();」が実行されます。ただ、「hoge」メソッドで、「Exception」をキャッチして、例外をスローしなければ、「e.printStackTrace();」が実行されません。

私が作成した問題は、わざとインタフェースでメソッドの定義を紹介しています。その為に、「Exception」がスローされるものだと思いこむと間違えてしまいます。

よって、答えは、実行されない場合もあるです。「hoge」メソッド内で例外をスローしない場合は、「e.printStackTrace();」が実行されません。

 

今回紹介した2つの問題は、SJC-P試験の問題に出てきてもおかしくない問題だと思います。