Ubuntu Tomcat日志中常见异常及解决方法
这是Tomcat运行中最常见的内存问题,日志中通常会出现java.lang.OutOfMemoryError,细分类型包括:
catalina.sh/catalina.bat):增加堆内存(-Xms初始堆、-Xmx最大堆)、永久代/元空间内存(-XX:PermSize/-XX:MaxPermSize或-XX:MetaspaceSize/-XX:MaxMetaspaceSize);-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m)。Tomcat默认使用8080(HTTP)、8005(SHUTDOWN)、8009(AJP)等端口,日志中会出现Address already in use或Cannot bind to port错误。
解决方法:
netstat -tulnp | grep 端口号(或lsof -i:端口号)命令查找占用端口的进程;kill -9 进程ID)或修改Tomcat配置文件(server.xml)中的端口号(如将<Connector port="8080">改为8081)。Tomcat的server.xml(连接器、虚拟主机)、web.xml(应用部署)、context.xml(上下文配置)等文件存在语法错误或配置项缺失,日志中会出现org.apache.catalina.LifecycleException: Failed to start component或Configuration error。
解决方法:
docBase指向存在的应用目录、port未被占用);server.xml)并逐步修改。Tomcat进程(如tomcat用户)无法访问日志文件、应用目录或临时目录,日志中会出现Permission denied或Cannot access directory。
解决方法:
sudo chown -R tomcat:tomcat /path/to/tomcat/logs、sudo chmod -R 755 /path/to/tomcat/webapps);logs、webapps、temp、work)。Tomcat版本与Java运行时环境(JRE/JDK)版本不匹配(如Tomcat 10需要Java 11+,Tomcat 9需要Java 8+),日志中会出现Unsupported major.minor version或java.lang.UnsupportedClassVersionError。
解决方法:
sudo apt install openjdk-11-jdk)并配置环境变量(JAVA_HOME);catalina.sh中JAVA_HOME指向正确路径。应用WAR包损坏、依赖缺失或部署描述符(web.xml)错误,日志中会出现Deployment failure、ClassNotFoundException(类找不到)或NoClassDefFoundError(类定义未找到)。
解决方法:
WEB-INF/lib目录下(无版本冲突);webapps/应用名/logs)定位具体错误。应用无法从连接池获取数据库连接,日志中会出现java.sql.SQLException: Connection is not available或Cannot get connection from pool。
解决方法:
systemctl status mysql);context.xml中maxActive参数,如100);Connection、Statement、ResultSet,使用工具如VisualVM监控)。Tomcat线程池中的线程全部被占用(如高并发请求),无法处理新请求,日志中会出现java.lang.OutOfMemoryError: unable to create new native thread或Thread pool exhausted。
解决方法:
server.xml中Connector的线程参数:增加maxThreads(最大线程数,默认200,可设为500)、acceptCount(等待队列长度,默认100,可设为200);catalina.out日志文件持续增长,占用大量磁盘空间,可能导致Tomcat无法写入日志或崩溃,日志中会出现Disk full或Unable to write log file。
解决方法:
logrotate工具切割日志(自动归档旧日志);logging.properties文件,设置日志文件最大大小(maxFileSize)和备份数量(maxBackupIndex);truncate -s 0 /path/to/tomcat/logs/catalina.out)。Tomcat日志中的时间戳与服务器时间不一致(如日志时间比实际时间早/晚),可能导致日志分析困难,日志中会出现时间格式异常(如2025-10-22 12:00:00与实际时间相差数小时)。
解决方法:
timedatectl),设置为正确时区(如Asia/Shanghai);sudo apt install ntp,sudo systemctl enable ntp)。