- PR -

ロックオブジェクトの取得について

1
投稿者投稿内容
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2008-11-10 14:21
いつもお世話になっております。

現在開発中のアプリケーションで
デッドロックが発生しました。

そこで、
現在のスレッドがどんなロックオブジェクトを持っているかを
各種スレッド毎に調べたいと思っています。

そのようなことは可能でしょうか。
ちなみに環境はJDK1.3です。
組み込み系のため、Profilerなどは使えません。

どなたかご存知の方いらっしゃいましたら
ご教示いただけると幸いです。

よろしくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-11-10 16:09
スレッドダンプはいかがでしょうか?
http://yusuke.homeip.net/diary/2006/09/21/1158846052527.html

JDK1.3 はデフォルトでロック関係をスレッドダンプに書き出してくれません。
が、-XX:+JavaMonitorsInStackTrace というオプションを追加して起動すれば JDK1.4 以降と同様ロック関係もスレッドダンプに記録してくれます。

しかし、JDK1.3 はかなり昔に EOL 済みですので今後新規に開発するアプリケーションであれば Java5 以降、できれば Java6 を使うことをお勧め致します。
http://yusuke.homeip.net/diary/2008/10/23/1224726180000.html
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-11-10 16:18
組み込み系のJDK1.3ということですが、
Javaのランタイムのベンダーはどこになりますか?
実装によっては方法が違う場合もあります。
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2008-11-10 18:37
>かつのりさん
ベンダはわかりませんでしたが、
インギさんの教えてくれた内容で解決しました。

ベンダによっては方法が異なることがあるのですね〜。
情報ありがとうございます。
よく覚えておきます。

>インギさん
貴重な情報ありがとうございます。
無事、スレッドダンプ取得できました。
またスレッドダンプの情報により、問題の箇所が一瞬でわかりました。
便利ですね。

できれば、JDK1.4, 5.0, 6などを使いたいのですが、
アプリケーション側だけの都合で決められないのです…。
1

スキルアップ/キャリアアップ(JOB@IT)