Rainbow Planet

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Eclipse Java Tomcat

Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法

投稿日:2021年1月24日 更新日:

<目次>

(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
つまり、systemd以外の止め方(「$CATALINA_HOME/bin/shutdown.sh」等)でTomcatを止めても、すぐ10秒後にはsystemdによって再起動されていたのです。

これによりポート(8080や8005)が直ぐに埋まってしまい、Eclipse側でTomcatが起動できなくなっていました。
 

目次にもどる

(1-3) 対処方法

①他Tomcatプロセスのチェック
他のTomcatプロセスが起動しているか?は次のURLを見て確認できます。もしここでTomcatのデフォルトのページが開くようですと、別のプロセスが起動されている事になりますので、そちらをkillしていく事になります。

http://localhost:8080
 
(図131)Tomcatのデフォルトページ(表示されるパターン)
②Tomcat停止&起動
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)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Eclipse, Java, Tomcat

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Tomcatのアーキテクチャ概要と各コンポーネントの役割について

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) Tomcatの概要  (2-1) Tomcatとは?  (2-2) Tomcatアーキテクチャ概観 (3) T …

JSP/Servletで画面毎のアクセスカウンターを作成してみた(パート1:仕様説明編)

(0)目次&概説 (1) 仕様について  (1-1) アーキテクチャ(アプリ/DB)  (1-2) アプリの仕様概要  (1-3) データベースの仕様概要 (2) ソースコード (3) エラー対応 ( …

Javaのラッパークラスとは?使い方や一覧をご紹介

<目次> (1) Javaのラッパークラスとは?使い方や一覧をご紹介  (1-1) ラッパークラスとは?  (1-2) 構文(オブジェクト生成)  (1-3) 代表的なメソッド(Integerを例に) …

JSP/Servletで必須入力チェックを実装する方法+サンプルプログラムや操作動画も紹介

<目次> (1) JSP/Servletで必須入力チェックを実装する方法  (1-1) 必須入力チェックの概要   (1-1-1) 全体の処理フロー   (1-1-2) 必須入力チェック部分の処理フロ …

Linuxサーバ(CentOS6)にEclipse(OXYGEN)をインストールする

0.目次 (1) JDKの概要  (1-1) JDKの種類  (1-2) JDKのバージョン(2018年2月時点) (2) JDKのインストール  (2-1) wget コマンドでJDK の rpm …

  • English (United States)
  • 日本語
Top