<< 4月 2008 | Home | 6月 2008 >>

虚無僧2.0.3 リリース - JBoss に対応

一年ぶりに虚無僧をアップデートしました。



虚無僧は JMX に準拠したサーバを定期的に監視して CSV 形式で出力するツールです。
本体のソースコードはたった140行でできていて、ヒープサイズはたった 10MB で動作します。

MBeanDoc で MBean の一覧表を作ったら、ブラウザを使ってポチポチと監視したい MBean 属性を選択することで簡単に設定することができます。
設定ファイルができたらあとは虚無僧本体に監視させるだけ。
定期的にサンプリングして CSV 形式に書き出してくれます。
カスタマイズも簡単に行えますし、BSD ライセンスなので趣味でも仕事でも心おきなくご利用いただけます。

今回の主な変更点は JBoss に対応したこと。
JMX をダンプする MBeanDoc を JBoss に対応させ、また JBoss の設定方法もドキュメントに載せました。

追記:
朝8:30〜10時までサーバが落ちており、また復旧後もWindows の IE でダウンロードすると正常に解凍できない状態が半日ほど続いていました。
今は復旧しています。
「既にダウンロード済みだけど解凍できなかったよ!」という方はお手数ですが再度ダウンロードしてください。
またはsvn から直接チェックアウトしていただくのもアリです。


関連エントリ:
JConsole で JBoss の MBean を監視
虚無僧2.0 - BSD ライセンスでリリース
@IT - Webアプリの問題点を「見える化」する7つ道具
虚無僧2.0
JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

このエントリーをはてなブックマークに追加   

JConsole で JBoss の MBean を監視

jconsole で JBoss を監視しようと、システムプロパティ com.sun.management.jmxremote を VM のオプションに追加して起動してみました。

JConsole に認識された JBoss

ところが表示されるのは JVM のデフォルトの MBean ばかり。


ちょっと調べてみると、他にも2つプロパティを設定する必要があるようです。
JBossWiki : JBossMBeansInJConsole

以下のオプションを付けると・・・・・

JAVA_OPTS="$JAVA_OPTS -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl"
JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"


JBoss の MBean が見えた!

JConsole に表示される JBoss の MBean 達

偶然みつけたんですが、jboss.system.Server#BuildJVM の値によると、JBoss EAP は JRockit でビルドされているんですね。

関連エントリ:
虚無僧2.0.3 リリース
虚無僧2.0 - BSD ライセンスでリリース
@IT - Webアプリの問題点を「見える化」する7つ道具
虚無僧2.0
JMX Remote を使って WebLogic Server 9.x の MBean にアクセス

タグ :
このエントリーをはてなブックマークに追加   

ブレードランナー

を観た。

観たのはもちろん先日購入した Blu-Ray 版です。
劇場で見たことはないので、VHS版、DVD版とは比べものにならない、人生において最高画質のブレードランナーです。
ありえない傾きのタイレル社、今となってはレトロフューチャーなビデオフォン、人工ヘビのウロコ。何もかもが高精細、高画質で堪能できました。
買って良かった!!


今回見たのは5つあるバージョンのうち、製作25周年を記念して再編集したというファイナルカット版。
正直なところ、ディレクターズカット版との違いはわかりませんでした。
もう一度ディレクターズカット版を見て復習しないといけませんね!

ついでに US 初期公開バージョンをエンディング部分だけ見てみましたが、例のナレーションが入るシーンの後の意味の全くのない、脈絡に欠けるカットにビックリ。
インターナショナルバージョンになかったんじゃないかな??


やっぱりディレクターズカット版、またはファイナルカット版の、レイチェルの寿命について想像の余地を残させるちょっと後味の悪いエンディングが好きです。

Amazonで買う:


ぽすれんでレンタル:


監督:リドリー・スコット
出演者:ハリソン・フォード、 ルトガー・ハウアー、 ショーン・ヤング、 エドワード・ジェームズ・オルモス
収録時間:117分
レンタル開始日:2008-06-11

Story
『ブレードランナー』製作25周年を記念してリドリー・スコット監督自ら再編集を手掛け、新たに生まれ変わった『〜ファイナル・カット』と、長編ドキュメンタリー『デンジャラス・デイズ:メイキング・オブ〜』を収録。 (詳細はこちら


最近他に観た映画:
No Country for Old Men
Click
ア・フュー・グッドメン
トレインスポッティング
アンドリューNDR114
それでも僕はやっていない
プラダを着た悪魔
魅惑のアフロディーテ
博士の愛した数式
日本以外全部沈没
17歳のカルテ
麗しのサブリナ


ぽすれん

WOWOW

タグ :
このエントリーをはてなブックマークに追加   

モバイル向け検索エンジンのクローラー情報

Google もモバイル検索に力を入れ始めたのか、専用のユーザエージェントをアサインしてクロールを始めたようです。

メモがてら、携帯向けの検索サービスが持っているクローラーの仕様が書いてあるページを並べます。

Google Japan Blog: Google モバイル検索についてのウェブマスター向け情報
[RFMS]RFCrawlerクローラ情報
Yahoo!検索 ヘルプ - モバイル版Yahoo!検索の検索エンジン用ロボットについて
froute.jp検索クローラーのご案内

このエントリーをはてなブックマークに追加   

GATTACA / Blade Runner の Blu-Ray 購入

amazon.com で GATTACA と Blade Runner の Blu-Ray を購入しました。


Gattaca が $18.95、Blade Runnerが$25.95、送料$10.97 で計$55.87。
送料を入れても日本で買うよりちょっとお得です。

しかも US 版の ブレードランナーは 5枚組
25周年記念のファイナルカットバージョン、US公開時バージョン(1982)、国際バージョン(1982)、ディレクターズカット(1992)と豊富なバージョンに加えてメイキング、未公開シーン集など盛りだくさんの内容でとってもお得です。

日本語字幕も入っていました。amazon.com の説明には英語、フランス語、スペイン語としか書いてなかったのでうれしい誤算です。

ガタカには残念ながら日本語字幕は入っていませんでした。既に6,7回くらい観ているので無くてもたぶん大丈夫ですが。

ちなみに DVD と違い、Blu-Ray は日本とアメリカのリージョンコードが同じです。
リージョンフリープレーヤーでなくてもアメリカ用の Blu-Ray はフツーに日本で販売されている Blu-Ray プレーヤーで観ることが出来ます。


タグ :
このエントリーをはてなブックマークに追加   

Java for Mac OS X 10.5 Update 1 をインストール - IntelliJ IDEA を Java6 / 64bit 化

Java for Mac OS X 10.5 Update 1 をインストールしました。
待望の Leopard 版 Java 6.0 です。
現在の所は Leopard で 64bit (Core 2 Duo) のみ。
Java for Mac OS X 10.5 Update 1 adds support for Java SE 6

Developer Preview では PPC でも平気で動いていたので PPC 版、x86 32bit 版が出るのは時間の問題だとは思いますが・・・それにしても随分時間かかりますね。
なにしろ Developer Preview は 2年前に出ています。

リリースノートに書いてありますが、Java 6 を入れても既存の Java 5.0 は消されません。
JAVA_HOME も書き換わらないので明示的にパスを指定しないと使われません。

$ $JAVA_HOME/bin/java -version
java version "1.5.0_13"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237)
Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing)
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java -version
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13-120)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_05-b13-52, mixed mode)


Java 6 をデフォルトにしたい場合は以下のように /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK から /System/Library/Frameworks/JavaVM.framework/Versions/1.6 へシンボリックリンクを張れば ok です。
$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/1.6 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Password:
$ $JAVA_HOME/bin/java -version
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13-120)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_05-b13-52, mixed mode)


とはいえエンタープライズ分野ではまだ Java 5 が主流だと思うので仕事で使っている場合はまだ 1.5 をデフォルトにしておいた方が良いかもしれません。
必要な時だけ JAVA_HOME を上書きすれば大抵は用が足りるはずです。
$ export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
yusukey@ymacbook:/Users/yusukey$ $JAVA_HOME/bin/java -version
java version "1.6.0_05"
Java(TM) SE Runtime Environment (build 1.6.0_05-b13-120)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_05-b13-52, mixed mode)


IntelliJ IDEA も Java 6 化してみました。
やりかたは簡単。右クリックでパッケージの中身を表示して、 /Contents/Info.plist 内の JVMVersion というパラメータを "1.6+" と設定するだけ。

Info.plist を編集

Core 2 Duo マシンを手に入れて早1年半。
どうやらウチで初めての 64bit アプリケーションとなった模様です。

JDK 6.0 / 64bit 化した IntelliJ IDEA

追記:
SWT が 64bit化されていないためか、Eclipse や JBoss Developer Studio は Leopard の Java 6 では現在のところ動かないようです。

タグ :
このエントリーをはてなブックマークに追加   

Twitter4J 自前 maven リポジトリを公開

Twitter4J をご利用頂いているプロジェクトで、ビルドにご面倒を掛けてしまっているようですので、自前 maven リポジトリを立ててみました。
しっかり理解せずやっつけでやってあります。たぶん大丈夫だと思いますがなにか間違いありましたらご指摘ください。
artifact が twitter4j から yusuke.homeip.net に変わっていることに注意してください。
例えば pom.xml に以下のように書けばいいハズです。

    <repositories>
<repository>
<id>yusuke.homeip.net</id>
<name>yusuke.homeip.net Repository</name>
<url>http://yusuke.homeip.net/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.homeip.yusuke</groupId>
<artifactId>twitter4j</artifactId>
<version>1.0.3</version>
<scope>compile</scope>
</dependency>
</dependencies>


修正:
groupid はパッケージ名と同じくドメインを逆向きに書く必要がありました。
yusuke.homeip.net から net.homeip.yusuke に修正。

タグ :
このエントリーをはてなブックマークに追加   

Oracle、BEA 買収後早くもクローズド戦略に? - BEA JRockit 単体ダウンロード不可

OracleによるBEAの買収が完了したのは昨日書いた通りですが、早速ポリシーに変化があるようです。

BEA の JVM、JRockit は古くからチューニングを重ねており、特に Intel プラットフォーム上ではバツグンのパフォーマンスを発揮していました。
#最近は Sun の JVM も特にガベージコレクタ周りが改良されてパフォーマンスが良くなってきていますが

また、近年では JRockit Runtime Analyzer / Mission Control といった実行パフォーマンスへの影響が少ないプロファイラを実装することで開発・運用面で非常に有用な VM へと進化してきています。

うれしいことに、JRockit は Sun の JVM と同じく無料で開発でも運用でも利用でき、また有償でサポートを受けることもできます。(残念ながら日本では VM 単体のサポートは提供されていません)

が、本日サイトを確認したところ、ダウンロードページの製品一覧に JRockit が見あたりません。

JRockitのページには依然、

If you have not tried out JRockit yet, you can download it for free and try it now!

と書いてあるのですが、肝心のダウンロードリンク先は 404 Not Found.
それも真っ白なページが帰ってきます。

どうも急遽ダウンロードできなくしたような雰囲気ですね。

WebLogic Server をダウンロードすれば JRockit はついてきますので、まだ手に入らないことはありませんが、旧来の BEA ファンには残念な方向に向かっているような気がしてなりません。
まだ遅くない!考え直して!!!

追記:
ひとまず最新版は以下のセキュリティアドバイザリからダウンロードできるそうです。
セキュリティ勧告(BEA08-201.00)
Multiple Security Vulnerabilities in the Java Runtime Environment

関連記事:
BEA JRockit 無償版 静かに消される?
オラクル、BEAの買収を完了:ニュース - CNET Japan
2008-04-30 - S/N Ratio (by SATO Naoki) - BEA買収完了
Oracle - BEAの買収を完了
BEA Systems, Oracle の買収提案に合意
BEA Systems, Ichan に機密情報を提供
BEA Systems, Ichan の書簡に回答
Oracle のBEA Systems 買収オファー、期限切れる
BEA Systems for Sale
Oracle、BEA Systems の買収提案が拒否されたことを発表
Oracle、BEA Systems 買収に未練
Oracle による BEA Systems 買収回避
Oracle が BEA Systemsを買収???

タグ :
このエントリーをはてなブックマークに追加   

スタックトレース/スレッドダンプの読み方 その1 - VM 内部スレッドと main スレッド

スレッドダンプの取り方は前に説明した通りです。
#二年近く前ですが・・・

しかし、スレッドダンプは取得しただけでは役に立ちません。
もちろん、スレッドダンプは解析して初めてトラブルシューティングやチューニングに役立つものです。

そこで、今回からは具体的にスレッドダンプの中身を見ていきましょう。

説明に使うアプリケーションはこんな感じ。起動したら "Hello World! と表示して10秒間スリープするという簡単なもの。

1:
2:
3:
4:
5:
6:
7:
8:
9:
public class ThreadTest1{
public static void main(String args[]) throws Exception {
System.out.println("Hello World!");
method1();
}
private static void method1() throws Exception {
Thread.sleep(10000);
}
}

Unix でコンパイル、実行、スレッドダンプの取得をするとこんな感じになります。
$ java -cp . ThreadTest1
$ javac ThreadTest1.java
$ java -cp . ThreadTest1 > ThreadTest1.out 2>&1 &
[1] 445
$ kill -3 445
$
[1]+ Done java -cp . ThreadTest1 >ThreadTest1.out 2>&1
$ cat ThreadTest1.out
Hello World!
Full thread dump Java HotSpot(TM) Client VM (1.5.0_06-64 mixed mode, sharing):

"Low Memory Detector" daemon prio=5 tid=0x0050a600 nid=0x1816a00 runnable [0x00000000..0x00000000]

"CompilerThread0" daemon prio=9 tid=0x00509cb0 nid=0x1816600 waiting on condition [0x00000000..0xf0b06358]

"Signal Dispatcher" daemon prio=9 tid=0x00509840 nid=0x1816200 waiting on condition [0x00000000..0x00000000]

"Finalizer" daemon prio=8 tid=0x00509020 nid=0x1810200 in Object.wait() [0xf0a04000..0xf0a04ab0]
at java.lang.Object.wait(Native Method)
- waiting on <0x26580360> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
- locked <0x26580360> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00508c30 nid=0x180f200 in Object.wait() [0xf0983000..0xf0983ab0]
at java.lang.Object.wait(Native Method)
- waiting on <0x26580a50> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:474)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x26580a50> (a java.lang.ref.Reference$Lock)

"main" prio=5 tid=0x005013a0 nid=0x1804c00 waiting on condition [0xf07ff000..0xf08002c0]
at java.lang.Thread.sleep(Native Method)
at ThreadTest1.method1(ThreadTest1.java:7)
at ThreadTest1.main(ThreadTest1.java:4)

"VM Thread" prio=9 tid=0x00508450 nid=0x1803c00 runnable

"VM Periodic Task Thread" prio=9 tid=0x0050bcb0 nid=0x1813000 waiting on condition

"Exception Catcher Thread" prio=10 tid=0x005015e0 nid=0x1805000 runnable


Full thread dump.. から始まっている行以降がスレッドダンプになります。

JVM の種類、バージョンにより若干フォーマットは異なりますが、だいたい似たような形式になります。
Sun、HP、Apple、BEAの VM のうちどれか一つ慣れた VM で解析経験を積んでおけば他の JVM のスレッドダンプを読むのに困ることはないでしょう。
ただし、IBM の VM はかなり独特のフォーマットになっており独自の解析技術が必要になります。

スレッドダンプは文字通り JVM 内に存在する全てのスレッドをダンプ(中身を書き出すこと)したものです。
上記の例では"Low Memory Detector", "CompilerThread0", "Signal Dispatcher", "Finalizer", "Reference Handler", "main", "VM Thread", "VM Periodic Task Thread" と、計9個のスレッドがあることがわかります。

一つ一つのスレッドはスレッド名を含むヘッダ部分と、at .. という行が連なっているスタックトレース部分に別れます。

ユーザーの書いた main() メソッドのあるクラス - 今回の場合 ThreadTest クラス - は "main" スレッドで実行されます。

お気づきかと思いますが、今回のアプリケーションはマルチスレッドのアプリケーションではないのに9つものスレッドがあります。
これは JVM 内部で利用するためのスレッドもダンプされているためです。

内部的に勝手に生成されるスレッドの数、名前は JVM やバージョンによって異なります。
スタックトレースのないものや、スタックに記載されているクラス名が全部 java.* となっているものは大抵 VM 内部のスレッドですので無視して問題ありません。

ですので今回の例で興味深いのは "main" スレッドのにみになります。

以下に "main" スレッドのダンプだけを抽出します。
"main" prio=5 tid=0x005013a0 nid=0x1804c00 waiting on condition [0xf07ff000..0xf08002c0]
at java.lang.Thread.sleep(Native Method)
at ThreadTest1.method1(ThreadTest1.java:7)
at ThreadTest1.main(ThreadTest1.java:4)

なにやら細々と情報が書いてあって構えてしまいますが、通常注目すべきなのは3点。
スレッド名(*1)、スレッドの状態(*2)、そしてスタックトレース(*3)です。
今回の例では main がスレッド名、waiting on condition がスレッドの状態、at java.lang.Thread.sleep 以降がスタックトレースになります。
"main"*1 prio=5 tid=0x005013a0 nid=0x1804c00 waiting on condition*2 [0xf07ff000..0xf08002c0]
at java.lang.Thread.sleep(Native Method)*3
at ThreadTest1.method1(ThreadTest1.java:7)
at ThreadTest1.main(ThreadTest1.java:4)


スレッドの状態、スタックトレースの詳しい説明については次号!

Java - スレッドダンプの取り方 その1 / スレッドダンプの取り方
Java - スレッドダンプの取り方 その2 / Linux だと java プロセスがいっぱい!?
Java - スレッドダンプの取り方 その3 / Windows サービスとして登録している場合は?
Java - スレッドダンプの取り方 その4 / WebLogic Server とスレッドダンプ

タグ :
このエントリーをはてなブックマークに追加