1341125 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

Quitada ブログ RX

Quitada ブログ RX

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

キーワードサーチ

▼キーワード検索

プロフィール

quitada 2.0

quitada 2.0

カレンダー

フリーページ

カテゴリ

(284)

SEO

(144)

金持ち父さん

(640)

生活

(215)

パソコン弄り

(136)

友人

(63)

IT

(160)

飲食

(134)

書評

(14)

My ブログ

(297)

BBC

(7)

健康

(7)

お気に入りブログ

🌹新作「渋沢栄一は… New! 神風スズキさん

そろそろ冷凍庫が活… New! doziさん

3年で3億円にする… genkiman21さん
人生は”心の旅” DORAMUSUKOさん

コメント新着

quitada 2.0@ Re[1]:トラックボールの新顔 - SlimBlade Trackball(03/27) 壊れた SlimBlade だけど、右ボタンのスイ…
quitada 2.0@ Re:トラックボールの新顔 - SlimBlade Trackball(03/27) SlimBladeが発売されてから10年以上たつけ…
quitada 2.0@ Re:トラックボールの新顔 - SlimBlade Trackball(03/27) 2010 年 12 月 16 日に結局 quitada もこ…
quitada 2.0@ Re:デスクトップ PC の無線 LAN 化(07/13) ZOTAC の ZTGTX740-2GD3R01 はヤフオクに…
2006年05月26日
XML
カテゴリ:IT
Java アプリケーションを(特にマルチスレッドで)動かしてみたら、なんか処理が遅い!とか、なんか処理がハングしている!とか、デッドロックしてるっぽいとかいう場合は、まずスレッドダンプを何回かとってみるというのが常套手段です。スレッドダンプを見れば、各スレッドがどんな順番でメソッドがコールされて、今、何のメソッドのどこを実行しているのかがわかります。スレッドダンプを何回かとって、時系列的に動きを比較するとどこがボトルネックになっているか分かって、ではどうチューニングすれば問題を解消できるのか検討がつくという算段です。

Java 仮想マシンの実装によっては、あからさまなデッドロックが発生している場合は、スレッドダンプに「デッドロックだよ!」と出力してくれたりします。便利ですね。

とはいえ、スレッドダンプはテキストファイルなので、慣れてないと見づらいです。そういう場合は、GUI tail ツール「」を使うといいでしょう。

で、スレッドダンプの取得方法ですがこちらとかが参考になりますね。あと、UNIX 系だとターミナルソフトウェアからフォアグランドで Java アプリを実行した場合は、その上で、

  Ctrl + \

を押してやることでもゾロゾロとでてきますね。

基本的には、スレッドダンプは標準出力(あるいは標準エラー出力)にでてくるので、java アプリケーション実行時に、出力先を所定のファイルにリダイレクトしておくといいですね。スレッドダンプ取得後にそのファイルをゆっくりながめればいいわけで。

でも、ここで重要な問題があります。

Windows で、java アプリケーションをサービス起動している場合はどうやってスレッドダンプをとるのか?

ということです。UNIX 系であれば、java アプリケーションを動かしている java 仮想マシンのプロセス ID を調べて、それに kill コマンドで SIGQUIT を送信すればスレッドダンプがとれるわけです。一方、Windows の場合は、普通は対象となる java アプリケーションを実行したコマンドプロンプト(いわゆる、Dos 窓)がないとスレッドダンプをとれないですよね。サービス起動してしまうとコマンドプロンプトがない状態となってしまうので、スレッドダンプをとるため、どうやって、Ctrl + Break を押せというのでしょうか?さらに、サーバマシンだとキーボードがついてないことがあるので、なおさらです。

サービス起動を使わないという手もありますね。普通に Windows 起動して、コマンドプロンプト開いて、そこで java アプリケーション実行!でも、Windows マシンをサーバとして、サーバサイドで java アプリケーションを稼働させる場合(例えば、Tomcat ベースの Web アプリケーションとか)は、そんな運用方法ありえないですよね。Windows 起動と同時に全自動で java アプリケーションを起動するのが普通なので、結果として Windows サービスを使うことになりますね。加えて、コマンドプロンプトから java アプリケーションを起動した場合、致命的な欠陥が一つあります。それは、

コマンドプロンプト上でカーソルをドラッグして選択状態にしている間、そのコマンドプロンプトから起動した java アプリケーションが一時停止してしまう

という現象です。何かのはずみで、選択状態にしたらピタッ!ととまるんです。

#選択状態を解除すればまた動き出しますけど…。Windows のかなりいけてない仕様のうちの 1 つ

やはり、サーバアプリケーションとして考えるとサービス起動しかありえないわけです。

ということで、Windows で、Java アプリケーションをサービス起動している場合のスレッドダンプ取得方法について、次回「Windows で java スレッドダンプ取得 - 検討編」以降で検討してみます。

#前置き、長っ!





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2006年05月27日 03時19分00秒
コメント(0) | コメントを書く
[IT] カテゴリの最新記事



© Rakuten Group, Inc.