1、背景
在本地通过命令行 ./bin/catalina.sh run & 启动 tomcat 时,发现无法启动,提示 8005 端口被占用。
2、报错信息
30-May-2019 17:09:30.762 严重 [main]
org.apache.catalina.core.StandardServer.await StandardServer.await:
create[localhost:8005]: java.net.BindException: Address already in
use at java.net.PlainSocketImpl.socketBind(Native Method) at
java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:375) at
java.net.ServerSocket.(ServerSocket.java:237) at
org.apache.catalina.core.StandardServer.await(StandardServer.java:440)
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:497) at
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353) at
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)
3、分析解决
通过命令 sudo lsof -i:8005
查看 8005 端口被谁占用了,输出结果:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 89706 meizu 68u IPv6 0x6dd97d01bd180127 0t0 TCP
localhost:8005 (LISTEN)
通过命令 kill 89706
杀掉对应进程,其中 89706 为步骤 1 中查到的占用 8005 端口的进程 ID
再次通过命令 ./bin/catalina.sh run & 启动 tomcat,启动成功;通过这条命令启动时,可以看到 tomcat 启动过程中的 log 信息,有利于分析 tomcat 启动失败的原因
结果
通过访问 http://localhost:8080/ 地址,确认 tomcat 是否启动成功,如果看以下界面,表示启动成功了~