Tomcat是常用的应用服务器之一,主要用于开发和测试,也有少量用户用在生产系统中。本文总结了一些Tomcat的常见问题及处理技巧,以供参考。
启动问题
Windows下,在启动Tomcat时经常会出现启动窗口一闪而过,启动失败的情况,而日志文件中没有任何错误提示。
此类问题多半是jvm参数或环境变量设置的问题,解决问题的关键是看到控制台输出的内容,但控制台一闪而过,不知道哪里出了问题。
Tomcat默认安装后,bin目录下的startup.bat文件最下面是这样的。
call "%EXECUTABLE%" start %CMD_LINE_ARGS%,这个命令执行时,会另启动一个窗口,将start改成run后,启动过程只有一个窗口,所有日志都在这一个窗口中输出了。
做了这个修改之后,就可以开启一个cmd窗口,然后进入到bin目录下,直接输入starup.bat后,cmd窗口就会出现启动的日志输出了,有什么错误一目了然。如下图所示:
Linux/unix/aix下的Tomcat启动,不会出现上面的问题,因为控制台日志直接写到了日志文件中,例如:/opt/tomcat/tomat/logs/catalina.out。
日志问题
Windows下,Tomcat的日志是输出在控制台上,这对于长期运行的生产系统来说是不合适的,因为很多日志都被覆盖,查找问题时也不方便。可以通过下面的方法将控制台日志输出到文件中
直接修改bin下的startup.bat,将最后一行修改如下:
call "%EXECUTABLE%" run %CMD_LINE_ARGS% >> catalina.%date:~0,10%.out
按照上面的方法,Tomcat启动后,会在bin目录下生成2021-11-08.out之类的文件,文件名以当前日期取名,如果一天内启动多次,会以追加的方式写到同一文件中。
内存问题
Tomcat设置jvm内存大小,相信大家都会,但在实际运用时,经常会出现明明设置了内存参数,但是系统还是启动不起来,报内存溢出错误。
Tomcat有很多设置jvm参数的方法,可以修改catalina.bat命令文件,也可以设置环境变量JAVA_OPTS,实际当中可能设置了多处,最终到底哪个生效了,自己都弄糊涂了。
对于这种问题,只要做个简单的测试就清楚了。修改一下你设置的jvm参数,将参数设置的特殊一些,例如正常设置是-Xms256m –Xmx1024m –XX:MaxPermSize=256m。
为了验证这个设置是否真正生效,可以这样设置:-Xms20480m -Xmx20480m -XX:MaxPermSize=256m(设置最小值超过物理内存)。
如果Tomcat启动抛出内存设置过大的错误,则说明你设置的jvm参数生效了,否则说明Tomcat没有使用你设置的jvm参数,此时就需要检查相关文件或环境变量中是否有设置jvm,继续检查到底使用的是哪一个。
对于Tomcat设置jvm参数这个问题,建议在catalina.bat(或catalina.sh)中进行设置,不要在环境变量中设置,因为环境变量是全局性的,可能会影响到其它Tomcat进程。
Linux下问题
在Linux下使用Tomcat,和Windwos下没有太大区别,但在实际项目中,也曾遇到过一些问题。
jvm参数无法识别问题
明明在catalina.sh中设置了jvm参数,但是无论怎么检查测试,就是不生效,后来发现jvm参数应该用双引号引起来才能生效:
JAVA_HOME=/root/jre1.8.0_181
JAVA_OPTS="-Xms512m -Xmx1536m -XX:MaxPermSize=256m"。
JAVA_OPTS参数中由于有空格,所以必须用双引号引起来,JAVA_HOME由于没有空格,所以可以不用双引号。在linux下的weblogic中也有类似问题。
context路径问题
在Windows下,配置context路径通常按照以下方法,例如,在
Tomcat \conf\Catalina\localhost\下,新建一个test.xml文件,文件内容如下:
<Context path="/testxn" docBase="/opt/tomcat/testapp" debug="0" privileged="true"> <!-- Link to the user database we will get roles from --> <ResourceLink name="users" global="UserDatabase" type="org.apache.catalina.UserDatabase"/> </Context>
Tomcat启动后,通过http://127.0.0.1:8080/testxn即可以访问系统。
然而在linux系统中,同样是按照上面的配置,通过上面的地址却访问不了,提示404错误,后来无意间发现,通过http://127.0.0.1:8080/test可以访问系统,context路径竟然和配置文件的名称(test.xml)保持一致,这个问题比较奇怪,只是发现了这个规律,具体原因尚不清楚。
小结
本文仅针对日常项目实施和开发测试过程中,Tomcat出现的一些常见问题进行了总结,关于Tomcat的其他使用技巧还有很多,希望大家可以多多总结多多分享。
作者:云竹