Tomcat的启动脚本浅析(三)
3. Tomcat启动遇到的常见问题
如果一切顺利,我们就可以看到非常熟悉的Tomcat窗口。但是,由于各种原因,我们可能会碰到一些问题,下面就具体分析一下Tomcat不能正常启动的原因。
3.1 环境变量设置问题
如果机器上没有安装JDK或者环境变量JAVA_HOME或CATALINA_HOME没有设置正确,Tomcat就不能正常启动。
3.1.1 下面这个错误对话框的意思是Windows不能发现“-Djava.endorsed.dirs=”命令,下面背景的黑窗口的错误是JAVA_HOME环境变量应该指向JDK而不是JRE的根目录(本例故意把把JAVA_HOME指向JRE的根目录,所以产生这个错误)。在这种情况下,我们在可以重新设置环境变量JAVA_HOME并指向JDK的安装目录即可。
3.1.2 下面这个错误是因为CATALINA_HOME环境变量设置不正确,从而造成Tomcat不能正常启动。
C:\carl>startup
CATALINA_HOME C:\
The CATALINA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
3.1.3 下面这个错误是由于错误地设置了Java启动参数xms256M,正确的写法应该是-Xms256M,请注意大小写。大家知道,在Java命令行中,-Xms表示JVM开始启动时所分配的内存大小,而-Xmx表示JVM运行时最大所能占用的的内存大小,如果您的应用程序所需的内存超过Xmx的值,JVM就会抛出Out of Memeory(内存不足)的异常而停止。当然,Xmx的最大值不应超过物理内存的70%。
D:\back\blog>start_tomcat_debug.bat
D:\back\blog>set JAVA_OPTS=-xms256M
D:\back\blog>rem 请将JAVA_HOME环境变量修改到您的JDK安装目录
D:\back\blog>set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
D:\back\blog>rem 请将CATALINA_HOME环境变量修改到您的Tomcat安装目录
D:\back\blog>set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
D:\back\blog>rem 开始调用catalina.bat文件
D:\back\blog>call C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\bin\catalina.bat debug
Using CATALINA_BASE: C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
Using CATALINA_HOME: C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
Using CATALINA_TMPDIR: C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\temp
Using JAVA_HOME: C:\Program Files\Java\jdk1.5.0_09
debug
无效的选项: -xms256M
用法:jdb <选项> <类> <参数> ...
如果遇到类似问题,可以用下面的方法重新设置一下JVM启动时的内存参数,在startup.bat脚本中加上下面这一行:
set JAVA_OPTS=-Xms256m -Xmx512m
上面这行表示Tomcat初始启动内存至少需要256M,而最大可能占用内存为为512M。有兴趣的读者可以在startup.bat里加上这行参数,启动Tomcat,您会从Windows任务管理器中看到您使用的内存迅速飙升。
3.2 Tomcat应用服务器的配置问题及其中部署的某个Web应用问题
3.2.1 Tomcat端口冲突,具体错误如下窗口所示。这表明缺省的8080端口已经被占有,所以Tomcat不能启动,我们可以通过修改Tomcat的配置文件server.xml来重新定义端口号即可启动,或者停止已经使用8080端口的程序。有时我们并没有启动Tomcat,也没有其它应用程序占用8080端口,但是Tomcat还抛出这个错误。这可能是因为上次我们关闭Tomcat时,并没有真正关闭Tomcat。在这种情况下,请从Windows任务管理器中检查一下有无一个java.exe的程序正在运行,如果发现,强行kill java.exe,然后重启试试。
3.2.2 Tomcat配置文件有错误,产生异常。有时我们在修改server.xml文件时,不小心多加或者多删了一个</>标签,可能造成Tomcat不能正常启动。下面的窗口说明了这个问题。
3.2.3 Tomcat中部署的某个Web应用发生异常。这时Tomcat能正常启动,但在Tomcat启动窗口里发现一大堆异常,如data source没有正确定义,程序抛出异常等等都有关系。下面的这个例子是Tomcat自带的balancer web应用程序启动时产生错误。该问题是因为我们错误的修改了balancer.xml文件造成的。
3.2.4 Web应用程序的jar文件丢失,如JDBC数据库连接文件class12.jar, mysql.jar没有拷贝到Webapp的WEB-INF\lib目录下就会产生异常。尤其要注意的是在Tomcat5以前的版本中,公共jar文件包通常放在Tomcat安装目录下的common\lib子目录中,但在Tomcat6.0中,这个公共目录改为lib子目录。
3.3 未知错误
3.3.1 有时Tomcat的启动窗口一闪而过,根本就看不出启动过程中发生了什么错误。这中间的原因有好多种,最常见的解决办法就是使用run命令,打开startup.bat文件,找到下面这行:
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
并将它修改为:
call "%EXECUTABLE%" run %CMD_LINE_ARGS%
这样,Tomcat启动时就不会弹出新窗口,我们就可以从容不迫地观察Tomcat的启动错误,并解决问题,请参考上面关于run命令的解释。
3.3.2 另外,阅读Tomcat的启动日志文件也是我们解决问题的重要办法,缺省的Tomcat日志是放在Tomcat安装目录的logs子目录下。例如下面这段日志说明JspServletViewer这个Web应用缺少Map Object的相关jar文件包,从而找不到com/esri/mo2/map/core/Layout这个Java类。
2008-02-23 11:19:30 StandardContext[/JspServletViewer]Exception sending context initialized event to listener instance of class com.esri.svr.cmn.FileRewriterContextListener
java.lang.NoClassDefFoundError: com/esri/mo2/map/core/Layout
at com.esri.svr.cat.ServiceXMLHandler.startElement ServiceXMLHandler.java:47)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
作者:佚名
分享到:
相关推荐
【深入浅析Centos 7系统的Tomcat服务器】 Tomcat,这款由Sun的软件架构师詹姆斯·邓肯·戴维森发起的开源项目,如今已成为Apache软件基金会的一部分,是Java Web应用程序的重要载体。Tomcat服务器以其轻量级、高效...
Java Web应用通常被打包为WAR(Web ARchive)或EAR(Enterprise ARchive)文件,然后部署到应用服务器上,如Tomcat、Jetty、GlassFish或WebLogic。应用服务器负责管理和运行这些应用,处理HTTP请求,管理Servlet、...
在实际分析前,需要搭建合适的环境,如 Windows 2003、Tomcat、MySQL、Java 1.6 和特定版本的 Mondrian 源码。通过配置 Eclipse 工程,导入源码并运行 Ant 脚本准备编译和测试环境。 在深入研究 Mondrian 时,通常...
安装过程包括下载Jenkins WAR文件,将其部署在Tomcat或Jetty等Web服务器上,然后通过浏览器访问Jenkins初始化设置,配置系统环境和安装必要的插件。 ### 3. 构建工作流 在Java项目中,Jenkins可以通过监听Git或SVN...
【三、模块描述浅析】 在 Zheng 项目中,`pom.xml` 文件描述了项目的模块结构和依赖关系,每个模块都有特定的功能和用途,开发者需要理解这些模块的作用以便正确构建和运行项目。 【四、配置文档】 1. **总配置**...
JavaScript是一种脚本语言,常用于实现网页的动态效果;jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、事件处理、动画等操作;Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 ...