- PR -

TOMCATをshutdownしてもコンソールが応答しない。

投稿者投稿内容
ういち
会議室デビュー日: 2002/12/16
投稿数: 8
投稿日時: 2004-07-22 18:09
こんにちは、ういちと申します。
現在、tomcat4.1.x、JDK1.4.2_02、strutsを使用して開発を行っております。
tomcatのstartup.batを実行しシステムを稼動しているのですが、
稀にshutdown.batを実行しtomcatを終了しても、コンソールが閉じない現象がおきます。
仕方が無いので、Xボタンを押して終了しようとすると
「応答しません」等のダイアログが現れ強制終了となってしまいます。

今、どのタイミングで応答しなくなるかテストしているのですが
コンソールに出力するログのレベルを下げてたくさん出力するようにすると起きるような気がしてます。(ちなみにログ出力にはloggingとLog4Jを組み合わせております)

通常は、1/2ほどの確立で起こるのですが。
どういった理由が考えられるでしょうか?
ご教授ください。宜しくお願いします。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2004-07-22 18:17
関係あるかわかりませんが、以前ログレベルを下げて
起動すると、Jakarta Commons Digester が
凄い量のログを吐いてしまい、処理に非常に時間がかかった記憶があります。

ちなみにプラットフォームは Linux でした。
ういち
会議室デビュー日: 2002/12/16
投稿数: 8
投稿日時: 2004-07-22 19:08
返答ありがとうございます。
ただ今回、Jakarta Commons Digester は使用していません。
単純にlog4j.propertiesファイルを作成し、
それを元にコンソールやファイルに書き込むようしております。

ちなみにプラットフォームはwin2000です。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2004-07-23 18:21
引用:

ただ今回、Jakarta Commons Digester は使用していません。



あ、わかりづらかったですね。
Digester は Tomcat や Struts が内部で使ってますもので
別にアプリケーション側で使っていなくても関係ないのです。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-07-23 18:28
こんにちは。

私もXボタンを押すと反応がなくなり、強制終了したことが何度もあります。

Ctrl+Cを使うと、うまくいきますよ。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-07-26 17:54
log4jのバージョンはいくつですか?
1.2.3以下なら、
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9750
このバグによる影響の可能性があります。確認してみてください。
ういち
会議室デビュー日: 2002/12/16
投稿数: 8
投稿日時: 2004-07-26 19:40
引用:

t-wataさんの書き込み (2004-07-26 17:54) より:
log4jのバージョンはいくつですか?
1.2.3以下なら、
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9750
このバグによる影響の可能性があります。確認してみてください。



ありがとうございます。調べてみたところverは1.2.8でした。

log4j.propertiesファイルのログレベルに
log4jでは存在しない「TRACE」と設定していた箇所があったのでそちらを修正たんですが。それ以来正常になったような気がします。
(半年ほど前からTRACEとしていてぜんぜん気づかないくらい正常に動いていたので、多分見当違いでしょうが。)

#------------------------------ 全般的な設定 -------------------------------
log4j.rootCategory=,CONSOLE,FILE
log4j.threshold=INFO(←ここがTRACEだった)

#------------------------------- コンソール --------------------------------
log4j.appender.CONSOLE.threshold=INFO(←ここがTRACEだった)
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss:SSS} [%-5p] (%F:%L) %m%n

#------------------------------ ファイル -----------------------------------
log4j.appender.FILE.threshold=WARN
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=D:/tmp/err.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss:SSS} [%-5p] (%F:%L) %m%n


t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-07-26 20:44
> 調べてみたところverは1.2.8でした。

では関係なかったですね。ちなみに、私は以前log4j-1.2.3をつかってて、
Tomcatが落ちない現象にはまったときに、このバグへ辿り着きました。
参考までに、そのとき解析した手順を書いておきます。

1.止まらない現象を再現させる (startup runで起動すると良い)
2.Tomcatを起動したコンソールウインドウをアクティブにして、Ctrl+Breakを押し、
スレッドダンプを取る(コンソールウインドウのバッファサイズは大きめにして
おく)
3.スレッドダンプをテキストエディタなどにコピー
4.リストされたスレッドのうち、daemonとマークされていないスレッドを残し、daemon
とマークされたスレッドは消す
(なぜなら、daemonがいようがいまいがJVMの終了には関係ないので)
5.残ったスレッドの中から、怪しげなスレッドを探す(正常に終了する場合にも
終了寸前のスレッドダンプをとって、比較する)
6.そのスレッドが、何のライブラリ(のどんな機能)から起動されたスレッドかを
スタックから判断し、そのライブラリのBugzillaやMLなどを検索する

こんな感じです。Unixの場合は、Ctrl+Breakではなく、Ctrl+\(Tomcatのプロセスがフォアグランドの場合だけ)か、kill -3 PIDでスレッドダンプを取ります。

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