Eclipseでポート8005/8009使用中エラーが出た時の対処法(Tomcat起動失敗)

概要

今回はEclipseでTomcatを起動しようとしたときに出る「必要な幾つかのポート(8005, 8009)がすでに使用中です」というエラーの対処法を紹介していきます。

開発中にTomcatを起動しようとしたら急にこのエラーで止まってしまって、困った経験はありますよね。
大体は前回起動したTomcatのプロセスが裏で残ったままになっているのが原因なんですよね。。。

この記事では、ポートを使っているプロセスの特定方法と、そのプロセスを停止する方法、さらに停止してはいけない場合の回避策(ポート番号の変更)まで一通り解説します。

それではやっていきましょう(^^

本記事の手順はWindows環境(Eclipse + Tomcat)を前提にしています。
taskkillでのプロセス強制終了は、対象を間違えると他の作業中データを失う可能性があるため、実行前に必ずPIDの内容を確認してください。

目次

エラーの内容と原因

Eclipseで対象のTomcatを起動しようとすると、次のようなエラーが表示されることがあります。

エラーメッセージ

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

原因のほとんどは、以前起動したTomcatのプロセスがEclipse終了後もOS上に残ってしまっていることです。
他にも、別のアプリケーションがたまたま同じポートを使っているケースもあります。

8005はTomcatのシャットダウン待受用ポート、8009はAJPコネクタ用ポートです。
通常はHTTP用の8080と合わせて、この3つのポートが使われます。

対処の流れ

まずそのポートを使っているプロセスを止めてよいかどうかで、対処方法が変わります。
下の図のように切り分けて考えると、迷わず対処できます。

Eclipse+Tomcatでポート使用中エラーが出たときの対処判定フロー
netstatでPIDを特定し、停止してよければtaskkillで強制終了、停止できなければポート番号を変更する判定フロー図

1. ポートを使用しているプロセスを特定する

Windowsの場合、netstatコマンドでポートを使用しているプロセスのPIDを確認します。

コマンド

1
2
netstat -ano | findstr :8005
netstat -ano | findstr :8009
  • netstat -ano
    • 稼働中の全プロセスについて、ポート使用状況をPID付きで表示する
  • findstr :8005
    • 出力結果から対象ポート(8005)の行だけを絞り込む

実行結果の一番右の列に表示される数値が、対象プロセスのPIDです。
このPIDを次のステップで使用します。

実行結果例

1
TCP    0.0.0.0:8005           0.0.0.0:0              LISTENING       12345

2. 停止してよい場合はtaskkillでプロセスを止める

特定したPIDが以前起動したTomcatなど、停止してよいプロセスだった場合は、taskkillコマンドで強制終了します。

コマンド

1
taskkill /PID <PID> /F
/Fは強制終了オプションです。
保存していない作業があるプロセスをこれで落とすと、その内容が失われる可能性があります。
対象のPIDが本当に停止してよいプロセスかを事前に確認してから実行しましょう。

停止できたら、改めてEclipseからTomcatを起動すれば正常に立ち上がるはずです。

3. 停止できない場合はポート番号を変更する

一方で、そのポートを他の重要なプロセスが使っていて停止できない場合は、Tomcat側のポート番号を変更して回避します。

確認・変更する場所は主に次の2つです。

  • server.xml
    • Tomcatのインストールディレクトリ配下conf/server.xmlにある、Connectorタグのport属性を変更する
  • Eclipseのサーバー設定画面
    • 「Servers」ビューで対象のTomcatをダブルクリックし、「Ports」欄から各ポート番号を変更する

例えばserver.xmlであれば、次のように該当箇所の数値を変更します。

server.xml

1
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

変更後はEclipse側の設定も同じ番号にそろえておかないと、今度は「サーバーとの通信に失敗しました」のような別のエラーになるので注意してください(^^;

自分の場合は、大体前回起動したTomcatのプロセスが残っているだけのことが多いので、まずはnetstatで確認してから、必要であればtaskkillで止めるという流れで対応しています。
ポート番号の変更は、どうしても他のプロセスとポートを共存させたいときの最終手段として使うくらいですね(^^b

まとめ

  1. netstat -ano | findstr :ポート番号 でPIDを特定する
  2. 停止してよいプロセスなら taskkill /PID <PID> /F で強制終了する
  3. 停止できないプロセスなら server.xmlやEclipseの設定でポート番号を変更する

以上となります。
同じエラーで困っている方は、まずnetstatでポートを使っているプロセスを確認してみてください(^^
それではお疲れさまでした。