Ubuntu Tomcat日志中常见的异常有哪些
Ubuntu Tomcat日志中常见异常及解决方法
1. 内存溢出(OutOfMemoryError)
这是Tomcat运行中最常见的内存问题,日志中通常会出现java.lang.OutOfMemoryError
,细分类型包括:
- Java heap space:堆内存不足,无法分配对象(如大型数据处理、内存泄漏);
- PermGen space(Java 8前)/Metaspace(Java 8+):永久代/元空间内存不足(如加载过多类、动态生成类);
- unable to create new native thread:无法创建新线程(线程数超过系统限制)。
解决方法: - 调整JVM内存参数(
catalina.sh
/catalina.bat
):增加堆内存(-Xms
初始堆、-Xmx
最大堆)、永久代/元空间内存(-XX:PermSize
/-XX:MaxPermSize
或-XX:MetaspaceSize
/-XX:MaxMetaspaceSize
); - 优化应用代码(避免内存泄漏,如及时关闭数据库连接、集合类清理);
- Java 8+可调整元空间参数(
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
)。
2. 端口被占用
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
)。
3. 配置文件错误
Tomcat的server.xml
(连接器、虚拟主机)、web.xml
(应用部署)、context.xml
(上下文配置)等文件存在语法错误或配置项缺失,日志中会出现org.apache.catalina.LifecycleException: Failed to start component
或Configuration error
。
解决方法:
- 使用XML验证工具(如IDE的XML校验功能)检查配置文件语法;
- 确保配置项值正确(如
docBase
指向存在的应用目录、port
未被占用); - 恢复默认配置文件(如
server.xml
)并逐步修改。
4. 文件/目录权限问题
Tomcat进程(如tomcat
用户)无法访问日志文件、应用目录或临时目录,日志中会出现Permission denied
或Cannot access directory
。
解决方法:
- 修改文件/目录权限(
sudo chown -R tomcat:tomcat /path/to/tomcat/logs
、sudo chmod -R 755 /path/to/tomcat/webapps
); - 确保Tomcat用户对必要目录有读写权限(如
logs
、webapps
、temp
、work
)。
5. Java版本不兼容
Tomcat版本与Java运行时环境(JRE/JDK)版本不匹配(如Tomcat 10需要Java 11+,Tomcat 9需要Java 8+),日志中会出现Unsupported major.minor version
或java.lang.UnsupportedClassVersionError
。
解决方法:
- 检查Tomcat版本要求的Java版本(官方文档);
- 安装对应版本的JDK(
sudo apt install openjdk-11-jdk
)并配置环境变量(JAVA_HOME
); - 确保
catalina.sh
中JAVA_HOME
指向正确路径。
6. 应用部署错误
应用WAR包损坏、依赖缺失或部署描述符(web.xml
)错误,日志中会出现Deployment failure
、ClassNotFoundException
(类找不到)或NoClassDefFoundError
(类定义未找到)。
解决方法:
- 检查WAR包完整性(重新打包或下载);
- 确保应用依赖的JAR包在
WEB-INF/lib
目录下(无版本冲突); - 查看应用自身日志(
webapps/应用名/logs
)定位具体错误。
7. 数据库连接池问题
应用无法从连接池获取数据库连接,日志中会出现java.sql.SQLException: Connection is not available
或Cannot get connection from pool
。
解决方法:
- 检查数据库服务是否运行(
systemctl status mysql
); - 增加连接池最大连接数(
context.xml
中maxActive
参数,如100
); - 检查连接泄漏(未关闭
Connection
、Statement
、ResultSet
,使用工具如VisualVM监控)。
8. 线程池耗尽
Tomcat线程池中的线程全部被占用(如高并发请求),无法处理新请求,日志中会出现java.lang.OutOfMemoryError: unable to create new native thread
或Thread pool exhausted
。
解决方法:
- 调整
server.xml
中Connector
的线程参数:增加maxThreads
(最大线程数,默认200,可设为500)、acceptCount
(等待队列长度,默认100,可设为200); - 优化应用代码(减少线程阻塞,如异步处理、数据库查询优化)。
9. 日志文件过大
catalina.out
日志文件持续增长,占用大量磁盘空间,可能导致Tomcat无法写入日志或崩溃,日志中会出现Disk full
或Unable to write log file
。
解决方法:
- 使用
logrotate
工具切割日志(自动归档旧日志); - 修改
logging.properties
文件,设置日志文件最大大小(maxFileSize
)和备份数量(maxBackupIndex
); - 定期清理旧日志(
truncate -s 0 /path/to/tomcat/logs/catalina.out
)。
10. 时区/时间同步问题
Tomcat日志中的时间戳与服务器时间不一致(如日志时间比实际时间早/晚),可能导致日志分析困难,日志中会出现时间格式异常(如2025-10-22 12:00:00
与实际时间相差数小时)。
解决方法:
- 检查系统时区(
timedatectl
),设置为正确时区(如Asia/Shanghai
); - 启用NTP时间同步(
sudo apt install ntp
,sudo systemctl enable ntp
)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat日志中常见的异常有哪些
本文地址: https://pptw.com/jishu/732633.html