记一次tomcat 启动异常及处理

一问题

开发环境的一个服务的Tomcat 起不来了。日志很多,截取下报错日志

Feb 19, 2019 7:33:37 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-3307"]
Feb 19, 2019 7:33:37 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 8655 ms
Feb 19, 2019 7:33:37 PM org.apache.catalina.core.StandardServer await
SEVERE: StandardServer.await: create[localhost:4307]: 
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.<init>(ServerSocket.java:237)
	at org.apache.catalina.core.StandardServer.await(StandardServer.java:427)
	at org.apache.catalina.startup.Catalina.await(Catalina.java:779)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:725)
	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:498)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)

Feb 19, 2019 7:33:37 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-apr-3307"]
Feb 19, 2019 7:33:37 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Feb 19, 2019 7:33:37 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver h
as been forcibly unregistered.
Feb 19, 2019 7:33:37 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [] registered the JDBC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a memory 
leak, the JDBC Driver has been forcibly unregistered.
Feb 19, 2019 7:33:37 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [pool-2-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Feb 19, 2019 7:33:37 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
...
Feb 19, 2019 7:34:06 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load org.apache.commons.pool2.impl.DefaultPooledObject.  The eventual following stack trace is caused 
by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
	at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:102)
	at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861)
	at org.apache.commons.pool2.impl.GenericObjectPool.ensureIdle(GenericObjectPool.java:920)
	at org.apache.commons.pool2.impl.GenericObjectPool.ensureMinIdle(GenericObjectPool.java:899)
	at org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor.run(BaseGenericObjectPool.java:1036)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)

Exception in thread "commons-pool-EvictionTimer" java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/DefaultPooledObject
	at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:102)
	at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861)
	at org.apache.commons.pool2.impl.GenericObjectPool.ensureIdle(GenericObjectPool.java:920)
	at org.apache.commons.pool2.impl.GenericObjectPool.ensureMinIdle(GenericObjectPool.java:899)
	at org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor.run(BaseGenericObjectPool.java:1036)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.DefaultPooledObject
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
	... 7 more

二 排查思路:

最开始看启动日志报错的原因,看了最后,以为是ClassNotFoundException 的原因。

但是,在往上翻看日志的时候,一个明显的问题就是:java.net.BindException: Address already in use

这是端口冲突的异常。

所以从这里入手,先看端口。

netstat -apn|grep 4307

根据提示找占用端口的进程

tcp        0      0 127.0.0.1:4307             0.0.0.0:*                   LISTEN      3922/java

再进一步根据查询的线程id 3922去看对应的信息,

ps -ef|grep 3922

可以看到具体的信息。

这里不贴了,因为是开发环境,可能是别的同学配置模块是填错了端口。导致启动时异常。

kill掉3922再启动Tomcat就OK了。

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/87737382