Tomcatを終了しようとすると、シャットダウンできないという問題で困っていた。
厳密には、シャットダウンできないのではなく数十秒後には
シャットダウンしているのだが、その時に以下のようなメッセージが出て
終了していた。
日本語のログでは
致命的: プロトコルハンドラの一時停止に失敗しました
java.net.ConnectException: Connection timed out: connect
英語なら
SEVERE: Protocol handler pause failed
java.net.ConnectException: Connection timed out: connect
Googleで調べてみると、ポートがぶつかっているか
または使っていないポートの接続を待っているかのような気配。
1. とりあえず、server.confの以下のようなAJPの箇所をコメントアウトして、
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
2. さらに8443ポートあたりが臭いので、これを8444などに変更した。
redirectPort="8443"
2番は、1台のサーバ上で複数のTomcatを動かしている場合には
問題になりそうなポイントだ。
この2点のどっちが利いているいるのかは不明だが、
とりあえず即時shutdownできるようになった。
------
2011-03-02追記
Tomcatがシャットダウンできないという問題で、Googleから訪れる方が多いようなので、一般論を追記します。
Tomcatがシャットダウンできない場合、原因はいくつか考えられますが、catalina.outなどのログを見ても問題が見当たらないような場合は何かのスレッドが終了せずに残っていることが多いと思います。UNIXなどの場合はまずはkill -QUIT [PID]などとしてシグナルを送信してスレッドダンプを取り、どのようなスレッドが残っているのか確認するところが手始めでしょうか。
/etc/hosts ファイルに
自ドメインを別IPにバインドしたりしてしまう設定があると、
上記の現象が起きるみたいです。