開発環境は下記。
- 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。何回も落ちるから不本意にもプロセスに詳しくなってしまった。初めは意味が分からず何時間も調べていたからね……。