投稿 2022年7月9日
更新 2022年7月9日
専門用語の数:少
Tomcatを使用したサービスが、突然動作しなくなることは
まれによくあります(?)
そういう時にTomcatを再起動すると、以下のようなエラーが発生します。
java.net.BindException: Address already in use: bind
ポート番号が競合しているというエラーです。
ps -ef | grep tomcat
root 57 0 19 19:42 ? 00:01:30 /usr/local/openjdk-8/bin/java(長いので省略...
実行結果の左から2番目がプロセスIDです。
※上記の場合だと、「57」がプロセスIDです。
通常のコマンドでは停止できないので、以下のコマンドを使用します。
kill -KILL [プロセスID]
※[プロセスID] の部分には、さきほどのコマンドで出てきた
プロセスIDの数字を入力してください。
実際のコマンドでいうと、こんな感じです。
kill -KILL 57
何回かプロセスIDを特定するコマンドを実行して、
完全にプロセスIDが出てこなくなるまで繰り返します。
Tomcatは正常終了後の正常起動でないと、うまく動きません。
そのため、起動→停止→起動を実行します。
service tomcat start
service tomcat restart
Tomcatは内部的にいくつかのプロセスを起動します。
server.xmlでどのプロセスを起動するかが定義されています。
代表的には以下のようなものです。
プロセス | ポート番号 |
---|---|
シャットダウン | 8005 |
直接アクセス | 8005 |
AJPアクセス | 8009 |
SSLアクセス | 8443 |
Tomcatを停止するというのは、言い換えると
起動しているプロセスをすべて停止するということです。
ただ、原因は不明ですが、突然特定プロセスだけ落ちてしまった。
再起動時に特定プロセスだけ落としきれなかった。
ということが起きると、Tomcatを制御できなくなってしまいます。
その状態をリセットすべく、すべてのプロセスを落としてから
Tomcatを起動しなおすという意味です。
Tomcatが起動できなくなる対処法でした。
急いでるときに限って起動できなくなると、本当につらいです。。。
これで解決できれば幸いです。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。
コメント一覧