1. 端口冲突
错误表现:Tomcat启动时日志出现java.net.BindException: Address already in use,或提示“Port X is already in use”(如默认的8080端口被占用)。
解决方法:
lsof -i :端口号(如lsof -i :8080)或netstat -tunlp | grep 端口号命令,查找占用端口的进程ID(PID);kill -9 PID(谨慎操作,确认进程无重要功能);$CATALINA_HOME/conf/server.xml文件,找到<Connector port="8080">(或其他冲突端口),将端口号改为未被使用的数值(如8081),保存后重启Tomcat。2. 内存溢出(OutOfMemoryError)
常见错误类型及表现:
java.lang.OutOfMemoryError: Java heap space(堆内存不足,常见于大量数据处理或内存泄漏);java.lang.OutOfMemoryError: PermGen space(永久代内存不足,Java 8前)/Metaspace(Java 8及以上,元空间不足);java.lang.OutOfMemoryError: unable to create new native thread(线程创建过多,超出系统限制)。$CATALINA_HOME/bin/catalina.sh(Linux)或catalina.bat(Windows),在cygwin=false前添加JAVA_OPTS="-Xms512m -Xmx1024m"(初始堆512MB,最大堆1024MB,根据服务器内存调整,建议-Xms与-Xmx一致避免频繁扩容);-XX:PermSize=256m -XX:MaxPermSize=512m,Java 8及以上添加-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m;server.xml中<Connector>标签的maxThreads(默认200,可增至500)、acceptCount(等待队列长度,默认100,可增至200)参数)。3. 配置文件错误
常见错误表现:
SEVERE: Error starting Tomcat. Port 8080 already in use(server.xml中端口配置错误,如端口被占用或格式错误);Configuration error(web.xml或context.xml中存在无效属性,如<Context debug="0">(Tomcat 9+已移除debug属性));Cannot find /path/to/webapp(应用部署路径不存在,server.xml中<Context>标签的docBase配置错误)。server.xml中的<Connector>标签端口配置,确保端口未被占用且格式正确(如port="8080");web.xml或context.xml,删除或修正无效属性(参考Tomcat官方文档确认属性有效性);<Context>标签的docBase属性指向的应用路径存在(如docBase="/var/lib/tomcat9/webapps/myapp"),若路径不存在则创建或修改为正确路径。4. 数据库连接问题
常见错误表现:
java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failure)(无法连接到数据库,驱动缺失或URL错误);Access denied for user 'tomcat'@'localhost'(数据库用户名/密码错误或权限不足);ConnectionPool exhausted(连接池耗尽,maxActive设置过小)。mysql-connector-java-8.0.xx.jar)已放入$CATALINA_HOME/lib目录;context.xml或server.xml中的数据库连接配置(<Resource>标签),确保url(如jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC)、username、password正确;mysql -u root -p),执行GRANT ALL PRIVILEGES ON mydb.* TO 'tomcat'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;授予用户权限;context.xml中<Resource>标签),增加maxActive(最大连接数,默认100,可增至200)、maxIdle(最大空闲连接数,默认30,可增至50)参数。5. 类加载问题
常见错误表现:
java.lang.ClassNotFoundException(类未找到,如com.example.MyClass未在类路径中);java.lang.NoClassDefFoundError(类定义未找到,如编译后类文件缺失或依赖库未加载)。$CATALINA_HOME/lib(全局共享库)或应用的WEB-INF/lib目录(应用私有库);catalina.properties文件中的common.loader、server.loader配置,确保类路径包含所需JAR包(如common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,/opt/mylibs/*.jar);WEB-INF/classes目录下的类文件已正确编译(如使用mvn clean package重新打包)。6. 日志乱码
常见错误表现:Tomcat日志(如catalina.out)中出现中文或其他非ASCII字符乱码(如????????)。
解决方法:
$CATALINA_HOME/conf/logging.properties文件,找到java.util.logging.ConsoleHandler.encoding属性,修改为UTF-8(如java.util.logging.ConsoleHandler.encoding = UTF-8);catalina.sh(Linux)或catalina.bat(Windows),在JAVA_OPTS中添加-Dfile.encoding=UTF-8(如export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8");vim、Notepad++)支持UTF-8编码(如vim中执行:set fileencoding=utf-8)。7. 应用部署失败
常见错误表现:
SEVERE: Error deploying web application directory(应用目录部署失败,如权限不足或路径错误);FAIL - Application at context path [/myapp] could not be started(应用启动失败,如web.xml配置错误或依赖缺失)。$CATALINA_HOME/webapps/myapp)是否存在,且Tomcat用户(如tomcat)有读写权限(chown -R tomcat:tomcat /var/lib/tomcat9/webapps/myapp);localhost.<date>.log(应用部署日志),定位具体错误(如web.xml中servlet-mapping配置错误,或缺少依赖的JAR包);jar tf myapp.war检查内容),且web.xml符合Servlet规范(如<web-app>标签的version属性正确)。