Tomcat9がWindows10で起動できないのはポート8005が原因だった

事象

Tomcat9をWindows10にインストールしてみたのですが起動しないという現象が起きました。原因は、Windows10が既に使用しているポート8005をTomcat9で使用しようとしていたためでした。

この記事では、原因の特定方法を順を追ってご紹介します。

Tomcat9がデフォルト設定で起動しない

Tomcat9をインストールし、GUIから起動しようとするも起動状態にならない。デフォルトから設定変更なくインストールしているはずなのですが。。

調査開始

なんでかなとログを確認してみます。ログの場所はデフォルトではC:\Program Files\Apache Software Foundation\Tomcat 9.0\logs\catalina.yyyy-mm-dd.logです。

catalina.yyyy-mm-dd.log
03-Aug-2018 21:30:24.962 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
03-Aug-2018 21:30:24.983 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
03-Aug-2018 21:30:24.990 情報 [main] org.apache.catalina.startup.Catalina.start Server startup in 1209 ms
03-Aug-2018 21:30:24.998 重大 [main] org.apache.catalina.core.StandardServer.await StandardServer.await: create[localhost:8005]: 
 java.net.BindException: Address already in use: NET_Bind
  at java.base/java.net.DualStackPlainSocketImpl.bind0(Native Method)
  at java.base/java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
  at java.base/java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:437)
  at java.base/java.net.PlainSocketImpl.bind(PlainSocketImpl.java:174)
  at java.base/java.net.ServerSocket.bind(ServerSocket.java:381)
  at java.base/java.net.ServerSocket.<init>(ServerSocket.java:243)
  at org.apache.catalina.core.StandardServer.await(StandardServer.java:422)
  at org.apache.catalina.startup.Catalina.await(Catalina.java:770)
  at org.apache.catalina.startup.Catalina.start(Catalina.java:716)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:564)
  at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)
  at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)

03-Aug-2018 21:30:25.000 情報 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
03-Aug-2018 21:30:25.116 情報 [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
03-Aug-2018 21:30:25.382 情報 [main] org.apache.catalina.core.StandardService.stopInternal サービス [Catalina] を停止します

4行目、5行目が怪しいですね。8005ポートはalready in useとあります。8005ポートを使うような設定をした記憶は無いので、何が使用しているのか次の記事の方法で調べてみます。

WindowsでPort(ポート)の使用状況を確認する方法
WindowsでPortの使用状況を確認する方法をご紹介します。 使用状況確認 コマンドプロンプトでポートの使用状況を確認します...

原因特定

上記の調査によって、かなり深い階層のサービスと思われるNT Kernel & Systemがポート8005を使っていることが確認できました。Tomcat9が起動しなかったのは、この端末(Windows10)でNT Kernel & Systemが既にポート8005を使用していたためですね。