‘開発中 ローカル・ホストのTomcat 8 (Java8)’に問題が発生しましたと表示された時の対処法

開発環境は下記。

  • Eclipse 4.6.3
  • Java 1.8.0_131
  • Apache Tomcat 8.0.43

Eclipseを開いてから先ずはTomcatのサーバーを起動させる人も多いと思う。しかし、このようなメッセージが表示されて何度再起動しても上手くいかない場合がある。

ローカル・ホスト の Tomcat8 (Java8) で必要な幾つかのポート (8080, 8009) がすでに使用中です。サーバーはすでに別のプロセスで稼働中であるか、システム・プロセスがそのポートを使用中である可能性があります。このサーバーを始動するには、他のプロセスを停止するか、ポート番号を変更する必要があります。

エラー文の中に原因や解決方法が書いてあるが、それをどう実行するかのメモをしていく。結論から言うと、あるプロセスがこれから作成したい場所をすでに占拠しているために起こる現象である。例えるなら新幹線で指定席のチケットを購入して自分の席に行ったら別の誰かが座っている状態。この誰かを特定してkillする必要がある。まずはターミナルを開き下記のコマンドで自分の席を確認。

% lsof -i:8080
COMMAND  PID           USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    1242 KikiKeiten   44u  IPv6 0x3287e48e5055e70b      0t0  TCP *:http-alt (LISTEN)

lsofとはプロセスが開いているファイルを表示するコマンドである。それにネットワークソケットを指定するオプション-iを付与する。このオプションを付けないと大量のプロセスが表示されて探すのが面倒。:8080はTomcatのデフォルトのポート番号である。変更した人はその値を入力。

すると、対象のプロセスが表示される。今回は1件だけだが3、4件表示される場合もある。ここで重要なのはPIDつまりプロセスIDだ。これがさっきの例で言うと指定席に勝手に座っている人を示す一意の番号ということになる。後はこいつをkillコマンドで消せば席が空くのでサーバーを起動することが出来る。

% kill 1242

解決策は以上であるが、そもそもプロセスを占有されないようにしないといけない。IDEを切るときはサーバーも切断しないといけないのは当然である。ただ、Eclipseが激重で落ちる場合があるからそのときは上記のコマンドを実行すればOK。何回も落ちるから不本意にもプロセスに詳しくなってしまった。初めは意味が分からず何時間も調べていたからね……。

To comment

@Contents
閉じる