刚遇到一个坑爹的问题,就是每次 Tomcat 启动后不久,就蓝屏了,百思不得其解啊,搜遍网络无解法。
只能自行解决了,目前问题已经解决,但已经依稀不清,简单回忆下过程如下(都有些记不清了):
换了一台电脑,重新搭建下环境喽,安装 Jdk6 + eclipse + Tomcat 6.0.40。
版本是有点低,但还算和服务器保持一致吗,而且这个版本也应该是很安全的。
部署好后,启动,约30秒后!电脑蓝屏 out of memory。郁闷内存溢出直接让蓝屏?是不是JVM有问题了?
刚开始还以为不是JVM问题。重启后,看是不是人品问题,试了几次,结果必现,只要Tomcat启动后,必蓝屏。
想想是否是项目问题,于是把项目干掉,只启动一个没有什么webapp的Tomcat,没有蓝屏~,OK锁定项目。
再把项目publish进去,发现Tomcat无法启动了,是什么原因,报一个could not obsevrt file什么什么的错,先忽略吧,大费周章的重新build,甚至重新安装Tomcat,总算搞好了,开始定位项目问题。
进入web.xml,发现有3个loadonstart,一个log4j init ,还有两个自己写的Servlet,启动时log4j报过很多file not found,就忽略了因为环境一直找不到没配置好,不会影响功能(以前一直也报没留意过)。然后依次试验这些loadonstart,发现竟然是log4j的问题,把log4j启动干掉或把log4j的配置修复后就没有蓝屏了,但一想,这个原因说不过去,至少无法说服我,没有理论依据,就算抛了些异常,但应该不至到导致蓝屏吧~。
再看看启动的时候,发现了这样一条信息
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bin
虽然只是info级别,问题是:路径不对!虽然个人早就对jdk6不爽了,但由于是工作一直在用,怎么冒出了一个jre7出来!真是见鬼。再到eclipse里面看buildPath居然是jre7,javaCompiler也是默认的1.7(其实之前就见到过,感觉有点小问题,但以为是软件问题就没多大关注)
去c /progarmfile/java里面看,两个文件夹如下:jdk1.6.0_45,jre7,去看其它同事的电脑是都是jdk1.6.0_45,jre。很明显运行环境错了,去buildPath到jre6(jdk目录里面也有个jre),javaCompiler1.6,tomcat也没出什么异常了,很自然的publish进去后,还原web.xml再启动,即使还是报很多错,但蓝屏就没有再出现了~~
问题解决了,问题产生的原因是:java6在后台自动更新,更新了一个jre7的运行环境来,打开eclpise后,自动用到新的jre,但这个自动更新的运行环境有问题,抛出的异常积在内存里,导致内存溢出,蓝屏