Ubuntu Tomcat日志中如何查看数据库连接情况
导读:Ubuntu Tomcat日志查看数据库连接情况的实用步骤 一 定位日志文件与快速筛选 常见日志路径为:/var/log/tomcat*/catalina.out、/var/log/tomcat*/localhost*.log;若自定义安...
Ubuntu Tomcat日志查看数据库连接情况的实用步骤
一 定位日志文件与快速筛选
- 常见日志路径为:/var/log/tomcat*/catalina.out、/var/log/tomcat*/localhost*.log;若自定义安装,通常在 $CATALINA_HOME/logs/。建议先看 catalina.out(标准输出/错误),再看 localhost.log(应用级事件)。
- 实时查看与关键字筛选(按出现频率从高到低观察):
- 实时跟踪:tail -f /var/log/tomcat*/catalina.out
- 连接池与获取失败:grep -Ei “connection pool|getconnectiontimeout|cannot get connection|connection leak” /var/log/tomcat*/catalina.out
- 数据库连通性错误:grep -Ei “connection refused|access denied|timeout|Communications link failure” /var/log/tomcat*/catalina.out
- 时间段定位(最近1小时):grep -Ei “connection pool” /var/log/tomcat*/catalina.out | grep “$(date -d ‘1 hour ago’ ‘+%b %d %H:%M’)”
- 若需查看实际执行的SQL,可在应用日志中检索(如 SELECT/INSERT/UPDATE),或结合数据库日志进一步核对。
二 从日志识别典型连接问题
- 连接超时或耗尽:出现如 GetConnectionTimeoutException: Wait millis 6000, active 100,表示在6秒内无法获取连接,且当前活跃连接已达100(常见于 maxTotal/maxActive 偏小或连接未及时归还)。
- 等待空闲对象超时:Cannot get a connection, pool error Timeout waiting for idle object,多为 maxWaitMillis 过短或连接泄漏导致无可用连接。
- 连接泄露:出现 Connection has been abandoned 或应用日志提示连接未关闭,说明代码未正确释放 Connection/Statement/ResultSet。
- 连通性失败:日志含 Connection refused / Access denied / Communications link failure,需优先排查数据库是否启动、网络与防火墙、账号权限、JDBC URL 是否正确。
三 结合数据库侧日志交叉验证
- 同步查看数据库错误与进程信息,有助于判断是“连接建立失败”还是“连接被占用/慢查询拖死”。
- 常见数据库日志路径与命令示例:
- MySQL:/var/log/mysql/error.log;实时查看:tail -f /var/log/mysql/error.log;会话与慢查询:mysql -e “SHOW PROCESSLIST; ” 或开启慢查询日志分析长事务。
- PostgreSQL:/var/log/postgresql/postgresql-.log;实时查看:tail -f /var/log/postgresql/postgresql-.log。
- 若数据库日志提示“too many connections”,说明连接池上限或应用释放策略需要优化。
四 打开连接池日志与监控以持续观测
- 在 conf/logging.properties 中调低相关日志级别(如将 javax.sql、org.apache.tomcat.jdbc.pool 设为 FINE/DEBUG),以获取获取/归还连接、验证、回收等细节。
- 在 context.xml/server.xml 的数据源(Tomcat JDBC Pool)中开启泄露检测与连接有效性校验,便于在日志中自动打印可疑泄露堆栈与剔除失效连接:
- 泄露检测与回收:
- removeAbandoned=“true”
- removeAbandonedTimeout=“300”(占用超过300秒视为泄露)
- logAbandoned=“true”(记录泄露堆栈)
- 连接有效性校验(获取时验证,避免拿到失效连接):
- testOnBorrow=“true”
- validationQuery=“SELECT 1”
- validationQueryTimeout=“5”
- 空闲连接维护(保持一定空闲并定期清理):
- minIdle=“10”
- timeBetweenEvictionRunsMillis=“60000”
- minEvictableIdleTimeMillis=“300000”
- 泄露检测与回收:
- 验证与观测:
- 重启使配置生效:sudo systemctl restart tomcat
- 通过 Tomcat Manager 或 JMX(如 VisualVM)观察 active、idle、waiting 等指标,确认优化成效。
五 常见现象与处置要点对照表
| 日志现象关键词 | 可能原因 | 处置要点 |
|---|---|---|
| GetConnectionTimeoutException / active 达到上限 | 连接池容量不足、慢查询占满连接 | 适度增大 maxTotal/maxActive;优化慢SQL;必要时增加数据库 max_connections |
| Timeout waiting for idle object | maxWaitMillis 过短或连接未及时释放 | 延长 maxWaitMillis;排查并修复连接泄漏(确保 close) |
| Connection has been abandoned / logAbandoned 输出堆栈 | 代码未关闭连接 | 使用 try-with-resources;修复泄露点;保留 logAbandoned 定位 |
| Connection refused / Access denied / Communications link failure | 数据库未启动、网络/防火墙阻断、账号权限或URL错误、驱动未加载 | 启动数据库;放通防火墙(如 UFW);核对 URL/账号/密码;将驱动 JAR 放入 $CATALINA_HOME/lib |
| Validation fails / testOnBorrow 频繁 | 连接被数据库端回收或网络抖动 | 配置 validationQuery/testOnBorrow/validationInterval,剔除失效连接 |
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat日志中如何查看数据库连接情况
本文地址: https://pptw.com/jishu/748081.html
