- 首页 >
- 问答 >
-
智能运维 >
- 如何利用日志进行Debian Tomcat故障排查
如何利用日志进行Debian Tomcat故障排查
小樊
38
2025-12-30 03:53:58
Debian Tomcat故障排查的日志实战指南
一 定位日志与快速查看
- 确认日志目录:Debian常见路径为**/var/log/tomcatX/(X为版本号,如tomcat9**),自定义安装可能在**/opt/tomcat/logs/**。可通过查看进程环境变量快速确认:ps aux | grep tomcat 或 sudo systemctl show tomcatX | grep -i catalina。
- 核心日志与作用:
- catalina.out:标准输出与错误输出,覆盖启动、运行、停止的关键信息。
- localhost..log:本地主机与应用部署相关事件(含部署异常堆栈)。
- manager..log / host-manager..log:管理应用的操作日志。
- 访问日志:由 AccessLogValve 写入,常见文件前缀为 localhost_access_log。
- 快速查看命令:
- 实时跟踪:sudo tail -f /var/log/tomcatX/catalina.out
- 按时间筛选:grep “2025-10-09” /var/log/tomcatX/catalina.out | grep “ERROR”
- 统计错误数:grep “ERROR” /var/log/tomcatX/catalina.out | wc -l
- 端口占用检查:sudo lsof -i:8080 或 ss -ltnp | grep 8080
- 服务状态与重启:sudo systemctl status tomcatX、sudo systemctl restart tomcatX
以上路径、文件与作用、常用命令适用于Debian上各主流Tomcat版本。
二 日志过滤与关键信息解读
- 关键字筛选:
- 错误级别:grep -E “SEVERE|WARNING|ERROR” catalina.out
- 内存溢出:grep “OutOfMemoryError” catalina.out
- 类缺失:grep “ClassNotFoundException” catalina.out
- 数据库连接:grep -i “JDBC|SQLException” localhost..log
- 读懂日志要素:关注时间戳、日志级别、类名/线程、异常堆栈与Caused by,从首次异常向上追溯其“根因”。
- 访问日志定位HTTP问题:在 conf/server.xml 中启用并配置 AccessLogValve,通过 pattern 记录客户端IP、请求、状态码、Referer、UA等,便于分析4xx/5xx。示例:
- 启用与常用格式:
- pattern=common:%h %l %u %t “%r” %s %b
- pattern=combined:在 common 基础上增加 %{Referer}i 与 %{User-Agent}i
- 保留策略:设置 rotatable=“true” maxDays=“30” 控制归档与保留天数。
- 日志级别体系:JUL 提供 SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST,可按需提升特定包的日志级别以获取更细粒度信息。
三 常见故障的日志特征与处置
- 端口冲突:日志出现 SEVERE: Error starting Tomcat. Port 8080 already in use。处置:用 lsof -i:8080 或 ss -ltnp | grep 8080 查占用PID并释放,或在 conf/server.xml 的 调整端口。
- 内存不足:出现 java.lang.OutOfMemoryError: Java heap space。处置:在 /etc/default/tomcatX 中调整 JAVA_OPTS(如 -Xms512m -Xmx2048m),重启生效。
- 类加载失败:出现 ClassNotFoundException。处置:确认依赖在 WEB-INF/lib 或 $CATALINA_HOME/lib,检查构建与部署是否完整。
- JDBC/数据库问题:出现 Cannot create JDBC driver 或连接超时。处置:驱动JAR放入 lib,核对 context.xml/web.xml 中的 URL/用户名/密码,并确认数据库可达。
- HTTP 404/500:访问日志中 404 多为路径错误或应用未部署;500 多伴随 localhost..log 的异常堆栈,按堆栈修复应用代码或配置。
四 提升日志可观测性与维护
- 动态调级:编辑 conf/logging.properties,为容器、连接器、认证、应用包设定级别。示例:
- 全局:.level=INFO(生产建议),开发可调为 FINE。
- 组件:
- org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level=FINE(部署细节)
- org.apache.catalina.authenticator.level=WARNING
- org.apache.coyote.level=WARNING
- 应用包:com.yourapp.level=DEBUG(按需开启)。
- 异步日志(Tomcat 8+):用 AsyncFileHandler 降低日志IO对业务线程影响。示例:
- handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
- 1catalina.org.apache.juli.AsyncFileHandler.level = INFO
- 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
- 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
- 1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
- 访问日志精细化:在 server.xml 中配置 AccessLogValve,选择合适的 pattern 与 maxDays,便于审计与容量规划。
- 日志轮转:使用 logrotate 管理 catalina.out 与访问日志,避免磁盘被撑满。示例(/etc/logrotate.d/tomcatX):
- /var/log/tomcatX/catalina.out {
- daily; rotate 7; compress; missingok; notifempty; copytruncate
- }
- 变更生效:修改 logging.properties 或 server.xml 后需重启:sudo systemctl restart tomcatX。