(1) Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法
(1-1) 発生状況
(1-2) 原因
(1-3) 対処方法
(1) Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法
(1-1) 発生状況
動的Webアプリをホストしている(コンテンツの置き場所を提供)Tomcatを再起動しようとした際に以下のエラーが出ました。
(エラーメッセージ①)
several ports (8005, 8080) required by Tomcat v8.5 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).
(図111)
また、運良く起動を開始できた場合でも、途中で次のエラーで止まってしまっていました。
(エラーメッセージ②)
java.net.BindException: Address already in use (Bind failed) at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387) at java.net.ServerSocket.bind(ServerSocket.java:390) at java.net.ServerSocket.(ServerSocket.java:252) at org.apache.catalina.core.StandardServer.await(StandardServer.java:421) at org.apache.catalina.startup.Catalina.await(Catalina.java:776) at org.apache.catalina.startup.Catalina.start(Catalina.java:722) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
(図112)
停止する際は、明示的にTomcat停止用のシェル「$CATALINA_HOME/bin/shutdown.sh」を実行しても、約10秒後に勝手に起動する現象が発生しました。
(図113)
(動画)停止後、約10秒程度でTomcatが再度起動する様子
(1-2) 原因
これの原因はTomcatの「Unit File」と呼ばれる設定ファイルにて「RestartSec=10」が設定されており、停止や異常時にsystemdに10秒後に再起動するように指示していたため、手動で止めても再度起動していたためでした。
(図121)
# Unit Fileの場所 /etc/systemd/system/tomcat.service
(1-3) 対処方法
①他Tomcatプロセスのチェック
他のTomcatプロセスが起動しているか?は次のURLを見て確認できます。もしここでTomcatのデフォルトのページが開くようですと、別のプロセスが起動されている事になりますので、そちらをkillしていく事になります。
http://localhost:8080
TomcatはCentOS7以降であれば「systemd」コマンドを使って起動、停止、再起動していきます。
# 起動 sudo systemctl start tomcat # 停止 sudo systemctl stop tomcat
systemdやsystemctlについては別途、下記URLの記事にて解説をしていますので、併せてご覧頂けると理解が深まるかと思います。
記事:Linuxにおけるデーモンやサービスの意味や常用コマンドについて
https://rainbow-engine.com/linux-daemon-useful-commands/
これを行う事で、先程表示されていたデフォルトのページは表示されなくなり、元々起動したかったEclipse側のTomcatが起動できるようになっているはずです。
(図132)