今天在window服务器上关闭一个tomcat应用后,再重启tomcat,发现全部java应用都启动不了,不管换tomcat还是打开jvisualvm监控工具,但是已启动的java程序正常运行,启动的tomcat报以下错误:
org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.session.StandardManager[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5624)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1260)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2002)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.util.StandardSessionIdGenerator@5e315b17]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
at org.apache.catalina.session.ManagerBase.startInternal(ManagerBase.java:714)
at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:461)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
... 12 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.security.provider.SecureRandom$SeederHolder
at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:203)
at java.security.SecureRandom.nextBytes(SecureRandom.java:455)
at java.security.SecureRandom.next(SecureRandom.java:477)
at java.util.Random.nextInt(Random.java:239)
at org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom(SessionIdGeneratorBase.java:237)
at org.apache.catalina.util.SessionIdGeneratorBase.getRandomBytes(SessionIdGeneratorBase.java:174)
at org.apache.catalina.util.StandardSessionIdGenerator.generateSessionId(StandardSessionIdGenerator.java:34)
at org.apache.catalina.util.SessionIdGeneratorBase.generateSessionId(SessionIdGeneratorBase.java:167)
at org.apache.catalina.util.SessionIdGeneratorBase.startInternal(SessionIdGeneratorBase.java:256)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
如果遇到这个问题重新安装JDK(solved this problem is reinstall your JDK),重装JDK时会自动关闭已经启动的java程序。
排查问题时发现JRE目录下的lib文件夹下的rt.jar部分class被删除了,估计还有其它文件也被删除。
更新:
重新安装jdk过一段时间后又出现以上问题,解决办法为每个tomcat指定jdk和jre,通过这样的方法定位产生问题tomcat,但是观察几天后也再没发生以上问题。