はじめに
私は過去の研修にて、Tomcatを用いたJava Servlet系のアプリを作ったことがあります。
先日それを久しぶりに起動しようとしたところ、なぜか起動しませんでした…何故だ?!
ポートの競合が起きていた件⇒その対処
原因分析
元々TomcatのHTTP通信用ポート番号は、私の環境では"55000"を使用しておりました。
このためtomcatを起動すると、以下のURLにアクセスできるはずです。
http://localhost:55000/
それができないということで、Tomcat起動時のエラー文を見ると…
16-Aug-2021 13:36:35.625 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-nio-55000"]
java.net.BindException: Address already in use: bind
何やらポートが既に使われているようでした。
本当にポート番号は"55000"は使われているのか?
下記コマンドで調べると…
PS C:\Users\(ユーザ名)> netstat -nao
アクティブな接続
プロトコル ローカル アドレス 外部アドレス 状態 PID
…
TCP 0.0.0.0:55000 0.0.0.0:0 LISTENING (PID)
…
使われてました。
前は競合が起きていなかったので、いつの間にか使われるようになったのでしょう…
対処
対処法として確実なのは、tomcatのポート番号を変えてしまうことです。
tomcatのフォルダのうち"conf"フォルダにある"server.xml"を書き換えます。
<!-- 変更前 -->
<Connector connectionTimeout="20000" port="55000" protocol="HTTP/1.1" redirectPort="8443"/>
<!-- 変更後 -->
<Connector connectionTimeout="20000" port="55001" protocol="HTTP/1.1" redirectPort="8443"/>
そのうえでtomcatを再起動した結果、
26-Aug-2021 00:23:13.208 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1513 ms
起動URL:http://localhost:55001/
起動に成功しました。
おわりに
まだまだ私はポート番号のような通信関係の知識が少なく、今回の事象では最初は慌てていました。
この原因として考えられるのは、研修時のテキストにポートの競合に関する記載がなく
結果的に私自身がポート番号を気にしていなかったからと思います。
今後web系の案件に関わる場合、あるいは上流の工程に関わる場合に備えて、
今まで気にしていなかった知識にも目を向けていきたいです。