« 2006年9月 | トップページ | 2006年11月 »

JRockitでVMモニタリング

BEAのJVM JRockItには、モニタリングツールがついている。(とのことで)
軽く使い方を調査。

まずモニターの対象は、JavaのJMX仕様MBeanであり、本来はアプリ実装者がモニター用のMBeanをアプリ内に実装しそれをTomcatなどの管理コンソールに登録して使用するかたちとなる。
ただ、VM内にもリソース関連を調査するためのMBeanが用意されておりJRockitの場合は、ドキュメント内で紹介されている。

手順1:アプリケーション(今回はTomcat)起動時に  -Xmanagement オプションをつけて実行する
Tomcatの起動コンソールに下記が表示されればOK(ログにも出ます)ポートなどを変えたい場合は、ドキュメントに載ってますのでそちらを見ち。
[JRockit] Starting remote JMX connector on port 7091.
[JRockit] Remote JMX connector on port 7091 ready.

手順2:JRockit Management Consoleを立ち上げる
Windowsなので、Win環境での手順ダス。コマンドプロンプトから、
> java -jar /JROCKIT_HOME/console/ManagementConsole.jar
を実行

手順3: connectionsメニューよりNew Connectionを作成
これは、下記画像のように接続先のサーバー(IPでいいと思います)と適当な?ユーザー名(パスワードを設定する場合はパスワードも)
addボタンを押せばOK

Jrockitmonitro

 

Memoryとかサクサク見れて、おまけに実行中のHeapサイズの変更も可能(だけど縮小して大丈夫のかはなぞw)CPUの使用率や、GCの実行もできるようです。
便利ですねぇ。。

Jrockitmonitro2


powered by performancing firefox

| | コメント (0) | トラックバック (0)

DB2のFedelatedサーバーチューニング

で、はまっているわけです。
call nnrunstatsを実行しても効果なし。。
結構簡単なSQLなんだけどどうしてもpushdownしてくれない。。
リモートサーバーで検索までやってから結果を取得したいところ
なのに、それぞれのテーブルの情報をがさっと持ってきて(SHIP)
その後、NLJOIN、、、そんなんリモートでやってくれよー。。

ふぇでれーと相手が、Oracleならまだこの動きもわからないでも
ないけどDB2のしかも同じバージョン同士だったらもう少しかし
こく動いてほしーなー。。

きっと何か設定でうまくいくはずですが、、このままでは
身が持たないので、アプリ側で何とかするしかないかも。。。


powered by performancing firefox

| | コメント (0) | トラックバック (0)

S2Hibernateのトランザクションではまる

うむぅ。。久々にあほっぽくはまってしまた。。
S2Hibernateを使ってお遊びがてらアプリを作っているのですが、
データベースにinsertを実施してもトランザクションを開始してくれない
から一向にデータが入らない。
S2Hibernateのサンプルを見ると確かに”自動でやってくれます”って書いてある。。うそばっかりと思っていたら、あれってdiconファイルに書いてもインターフェースきってない場合は、pointcutで指定しないと駄目なんですね。。(うわーはずかしぃー)
pointcutでメソッド指定したら、ちゃんとできました。。

リンク: Seasar - DI Container with AOP -.

| | コメント (0) | トラックバック (0)

DB2のコマンド行プロセッサで改行

DB2のコマンド行プロセッサで文字列中に改行を入れたい場合、、\nと書いてもダメ
そこでSQL的には、下記を文字列の改行部分につければいけるはずです。

例:update tbl_xxx set title='テスト' || CHR(10) || 'だよー' where xxx_id=1

これでデータとしては、

テスト
だよー

として入ります。

| | コメント (0) | トラックバック (0)

DateのcompareToとTimestampのcompareTo

java.util.Dateとjava.sql.TimestampのcompareToメソッドの話。
java.util.Dateは、Javaで日付を表現するクラスです。一報java.sql.Timestampは、パッケージ名からもわかるようにDataBaseでの時間を表現するクラスです。ただ、Timestampは、java.util.DateのサブクラスでありTimestampには、compareToメソッドがオーバーライド実装されています。ここで1つ落とし穴があります。
compareToメソッドには、2種類あり compareTo(Date date)とcompareTo(Timestampe time) が定義されています。

ここで、compareTo(Date date)メソッドに対しjava.util.Dateのインスタンスを渡すと、なんとClassCastExceptionが発生します。ここでは、Timestampのインスタンスを渡さないといけないんですね。。今回はここではまりました。そして、じゃあ、compareToの対象を逆にする。
例:timestampInstance.compareTo(dateInstance)
                         ↓
     dateInstance.compareTo(timestampInstance)
としたら、どうなるでしょう。。これはOKですね。

と、ここで重要なのは、じゃあ、なぜオーバーライドしてるの?ってことです。
ソースを見ると、Dateでは、ミリ秒までを比較対象としTimestampでは、ナノ単位までを比較対象としているようです。また、内部でsuper.compareToを実施していますのでミリ秒レベルの比較に関しては同一のメソッドを利用していることになります。

APIとして定義している以上Dateクラスを引数として扱う場合のロジックもClassCastではなく準備しておいて欲しいところです。。(じゃなきゃそんなメソッドなくしてほしいのぅ)

| | コメント (0) | トラックバック (0)

« 2006年9月 | トップページ | 2006年11月 »