一、内存不足(OutOfMemoryError)
常见错误信息:java.lang.OutOfMemoryError: Java heap space(堆内存不足)、java.lang.OutOfMemoryError: Metaspace(元空间不足)。
原因:JVM堆内存或元空间配置过小,无法满足应用程序运行需求(如处理大量数据、加载过多类)。
解决方法:调整Tomcat内存参数,在bin/catalina.sh(Linux)或bin/catalina.bat(Windows)中增加以下配置(根据服务器内存调整数值):
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m"
-Xms设置初始堆内存,-Xmx设置最大堆内存,-XX:MaxMetaspaceSize限制元空间大小(避免元空间溢出)。
二、端口冲突
常见错误信息:java.net.BindException: Address already in use(端口已被占用)、SEVERE: Failed to initialize component [Connector[HTTP/1.1-8080]](连接器初始化失败)。
原因:Tomcat默认端口(8080、8005、8009)或其他自定义端口被其他进程(如Apache、Nginx、其他Tomcat实例)占用。
解决方法:
lsof -i :8080或netstat -tunlp | grep 8080;Windows使用netstat -ano | findstr :8080。kill -9 <PID>,Windows下通过任务管理器结束进程)或修改Tomcat端口:编辑conf/server.xml,找到<Connector port="8080">标签,修改port属性为未被占用的端口(如8081)。三、404 Not Found错误
常见错误信息:404 Not Found(请求资源未找到)、SEVERE: Servlet.service() for servlet [default] threw exception(Servlet处理请求时资源未找到)。
原因:请求的URL路径错误(拼写错误、大小写敏感)、资源(HTML、CSS、JS、JSP)未部署到webapps目录、web.xml配置错误(Servlet映射或欢迎文件列表错误)。
解决方法:
http://localhost:8080/myapp/index.jsp),注意大小写(Linux系统路径敏感)。webapps/<应用名>/目录下是否存在请求的资源文件。web.xml配置:确保<welcome-file-list>中的欢迎文件(如index.jsp)存在,<servlet-mapping>中的URL模式与请求路径匹配。四、500 Internal Server Error错误
常见错误信息:500 Internal Server Error(服务器内部错误)、SEVERE: Servlet.service() for servlet [xxx] threw exception(Servlet抛出未捕获异常)、java.lang.NullPointerException(空指针异常)。
原因:应用程序代码存在bug(如空指针、数组越界)、数据库连接失败(连接池耗尽、URL/用户名/密码错误)、依赖库缺失(JAR包未放入WEB-INF/lib)、Tomcat配置错误(server.xml语法错误)。
解决方法:
logs/catalina.out或logs/localhost.log,定位异常堆栈跟踪(关键信息如错误类名、行号)。context.xml或web.xml中的连接配置(URL、用户名、密码),检查连接池设置(如maxActive是否过小)。WEB-INF/lib目录,无版本冲突。五、配置文件错误
常见错误信息:org.apache.catalina.LifecycleException: Failed to start component(组件启动失败)、SEVERE: Parse error in application web.xml file(web.xml解析错误)、java.net.MalformedURLException(URL格式错误)。
原因:server.xml(Tomcat主配置文件)、web.xml(应用配置文件)、context.xml(上下文配置文件)存在语法错误(如标签未闭合、属性值缺失)、配置项错误(如端口号格式错误、虚拟主机配置不当)。
解决方法:
server.xml:确认<Connector>标签的port属性为有效端口号(如8080),<Host>标签的name属性与server.xml中的<Engine>标签匹配。web.xml:确保<servlet>标签的<servlet-class>属性指向正确的Servlet类,<url-pattern>属性格式正确(如/login)。<Context>标签),重启Tomcat,观察是否仍有错误,定位具体错误配置。六、类加载错误(ClassNotFoundException/NoClassDefFoundError)
常见错误信息:java.lang.ClassNotFoundException(类未找到)、java.lang.NoClassDefFoundError(类定义未找到)。
原因:应用程序依赖的JAR包未放入WEB-INF/lib目录、JAR包版本冲突(如不同版本的Spring框架)、类路径配置错误(如CLASSPATH环境变量包含不必要的路径)。
解决方法:
WEB-INF/lib目录。<exclusions>标签排除旧版本的依赖)。work/Catalina/目录下的缓存文件(如编译后的JSP文件),重启Tomcat。七、日志文件问题(乱码/过大)
常见错误信息:日志文件中出现乱码(如中文显示为????)、日志文件过大(catalina.out超过GB级别,占用大量磁盘空间)。
原因:日志文件编码格式与系统或IDE编码不一致(如Tomcat默认使用UTF-8,系统使用GBK)、未配置日志切割(logrotate或Tomcat自带的cronolog)。
解决方法:
conf/logging.properties文件,修改java.util.logging.ConsoleHandler.encoding属性为系统编码(如GBK):java.util.logging.ConsoleHandler.encoding = GBK
或在启动Tomcat时添加JVM参数:-Dfile.encoding=UTF-8(如export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8")。cronolog工具:安装cronolog(apt-get install cronolog),修改conf/logging.properties中的1catalina.org.apache.juli.FileHandler.directory属性,使用cronolog切割日志:1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.suffix = .log
1catalina.org.apache.juli.FileHandler.rotatable = true
1catalina.org.apache.juli.FileHandler.maxDays = 7
logrotate工具(Linux):创建/etc/logrotate.d/tomcat文件,添加以下配置:/usr/local/tomcat/logs/catalina.out {
daily
rotate 7
missingok
compress
delaycompress
notifempty
copytruncate
}
执行logrotate -f /etc/logrotate.conf强制切割日志。