1、最近部署到tomcat底下的项目经常时不时访问不了,报的错误如下面所示:
WARNING [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [studyproject] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
java.util.TimerThread.mainLoop(Timer.java:526)
java.util.TimerThread.run(Timer.java:505)
2、后面重启一下就又可以访问了,但是这不是解决办法,使用ps -ef | grep studyproject,查看是否有此项目的进程,发现没有,于是乎使用命令重启tomcat,发现就会报上面的错误,接着实时查看日志:tail -f /tomat/logs/catalina.out,发现除了上面的报错信息后还有报错信息,如下所示:
SEVERE [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:382)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:440)
at org.apache.catalina.startup.Catalina.await(Catalina.java:744)
at org.apache.catalina.startup.Catalina.start(Catalina.java:690)
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:483)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)
3、发现端口8005被占用了,于是查下这个端口是什么,使用命令 lsof -i:8005 ,如下图所示:
4、接着我就知道问题所在了,看下tomcat目录底下的conf文件夹底下的server.xml文件,是否有存在8005这个端口,发现还真有,如下图所示:
在执行shutdown的时候,会使用这个端口,而这个端口号被一个进程占用了,所以老是会导致访问不了,所以改下这个端口号为8006,应该就不会了。具体还要再看看情况。
5、以上内容仅供学习参考,谢谢!