プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

CentOS BindExceptionの対処法

CentOSでJavaのJar起動する時に下記エラーが発生した場合の対処法
 

org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server
            ・
            ・
Caused by: java.lang.IllegalArgumentException: standardService.connector.startFailed
        at org.apache.catalina.core.StandardService.addConnector(StandardService.java:231) ~[tomcat-embed-core-9.0.34.jar!/:9.0.34]
        at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:265) ~[spring-boot-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
        at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:196) ~[spring-boot-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
        ... 18 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed
        at org.apache.catalina.connector.Connector.startInternal(Connector.java:1066) ~[tomcat-embed-core-9.0.34.jar!/:9.0.34]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.34.jar!/:9.0.34]
        at org.apache.catalina.core.StandardService.addConnector(StandardService.java:227) ~[tomcat-embed-core-9.0.34.jar!/:9.0.34]
        ... 20 common frames omitted
Caused by: java.net.BindException: アドレスは既に使用中です

 
 

■原因

起動しようとしたサーバーのポートが既に使われているから
今回はポート:8080を利用する予定だったのだが他のサービスで使われているとのこと
以前使用していたキャッシュが残っている場合などもこの現象が起こる
 
 


■PIDを確認

ポートを指定して使用されているPIDを確認

・「lsof」コマンドで確認する場合

sudo lsof -i:8080

 
 

・「netstat」コマンドで確認する場合

【オプション】

-a
接続と待ち受けをしているすべてのポートの状況を表示
 
-n
IPアドレスとポート番号を数値のみを表示
 
-p
プロトコルごとの接続を表示(TCP, UDP, TCPv6, UDPv6)
 
grepコマンドと組み合わせる

netstat -anp | grep 8080

 
 


■PIDの強制終了

「kill」コマンドで該当のポートを使用しているサービスを終了させる

#「-9」は強制終了オプション
sudo kill -9 <該当のPID>