问题描述:
Linux启动tomcat时,出现如下所示报错:
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:444)
at org.apache.catalina.startup.Catalina.await(Catalina.java:781)
at org.apache.catalina.startup.Catalina.start(Catalina.java:727)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
报错信息非常明显,端口被占用。
解决方法:
sudo netstat -nltp | grep 8090,找出占用端口的进程,8090是tomcat端口。1804为进程id,杀掉进程就可以重新启动了。
root@iZ94gmrlvfbZ:/data_b/web/xiaoyaoshi_app_guest# sudo netstat -nltp | grep 8090
tcp 0 0 0.0.0.0:8090 0.0.0.0:* LISTEN 1804/java
root@iZ94gmrlvfbZ:/data_b/web/xiaoyaoshi_app_guest# kill -9 1804
root@iZ94gmrlvfbZ:/data_b/web/xiaoyaoshi_app_guest# sudo netstat -nltp | grep 8090
root@iZ94gmrlvfbZ:/data_b/web/xiaoyaoshi_app_guest# sh bin/startup.sh
Using CATALINA_BASE: /data_b/web/xiaoyaoshi_app_guest
Using CATALINA_HOME: /data_b/web/xiaoyaoshi_app_guest
Using CATALINA_TMPDIR: /data_b/web/xiaoyaoshi_app_guest/temp
Using JRE_HOME: /usr/lib/jvm/jdk1.7.0_07/jre
.
.
启动其他容器如果遇到端口占用问题,应该也是可以通过这个方法解决。
kill -9 进程号 暴力结束这个进程
kill -15 进程号 优雅结束这个进程
简单来说:
kill -9 PID 是操作系统从内核级别强制杀死一个进程.
kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭.
SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。