在应用服务器中查看调用DB方式,核心是通过分析应用日志、监控数据库连接池状态、使用APM工具以及检查代码中的SQL执行记录这四类方法,具体选择取决于你的环境和需求。
应用服务器怎么看调用数据库:核心方法总览
如果你是刚接手一个应用系统,或者正在排查线上慢查询,第一反应肯定是想知道当前应用到底是怎么跟数据库交互的。应用服务器怎么看调用数据库这个问题,其实覆盖了从请求入口到SQL执行的全链路,行业共识认为,主要有四种手段:日志分析、连接池监控、APM工具追踪和代码埋点,下面我们逐一拆解,每个方法都对应具体的操作路径。
通过应用服务器日志直接查看
大多数应用服务器(如Tomcat、WebLogic、Jetty)都会输出日志,其中包含SQL语句和数据库连接相关信息,你可以直接在这些日志中搜索关键词,SQL”、“JDBC”、“Connection”、“Timeout”等,具体操作步骤:
- 定位日志目录:Tomcat默认在
logs/下,WebLogic通常在servers/AdminServer/logs/。 - 使用
grep命令过滤:grep -i "select" catalina.out或grep -i "insert" access.log。 - 开启慢查询日志:如果应用使用了ORM框架(如MyBatis),可以在配置中启用SQL日志输出,例如在
log4j.properties中设置log4j.logger.java.sql=DEBUG。
这种方法直接且无需额外工具,但日志量较大时效率较低,适合快速定位近期问题。
利用数据库连接池监控接口
如何查看应用服务器数据库连接池状态,是运维人员的高频操作,连接池(如HikariCP、Druid、Tomcat JDBC Pool)通常都提供JMX或HTTP接口,实时暴露连接数、活跃数、等待队列等指标,以Druid为例,它内置一个监控页面,访问http://应用IP:端口/druid/index.html就能看到SQL执行统计、连接池使用情况,Tomcat的JDBC连接池也可以通过JMX查看,使用JConsole连接后,在Catalina:type=DataSource,class=javax.sql.DataSource下找到相关属性。
- 启用JMX:在Tomcat启动参数中添加
。-Dcom.sun.management.jmxremote
- 通过JConsole观察
numActive、numIdle等指标,判断是否存在连接泄漏或不足。
应用服务器数据库调用监控,连接池监控是成本最低的一环,现在绝大多数开源连接池都支持,无需额外购买工具。
应用服务器数据库调用监控:免费工具与生产环境实操
除了内置监控,第三方工具能提供更丰富的全链路追踪能力。应用服务器数据库调用监控在APM(Application Performance Monitoring)领域已经很成熟,常用的免费方案包括Pinpoint、SkyWalking、Zipkin,以及轻量级的Arthas,这些工具可以自动捕获应用服务器内部的所有SQL调用,并展示耗时、调用栈、参数等。
使用开源APM工具进行全链路追踪
以SkyWalking为例,部署流程如下:
- 在应用服务器上挂载Agent,Java启动参数添加
-javaagent:/path/skywalking-agent.jar。 - 配置
agent.service_name和后端存储地址。 - 启动后,在SkyWalking UI中查看“数据库”面板,可以看到每个SQL的响应时间、调用次数、慢查询明细。
这类工具的优势在于自动收集,无需修改代码,适合生产环境长期使用,业内专家指出,在大型分布式系统里,APM工具已经成为标配,能显著降低排查DB调用的时间成本。
轻量级手段:Arthas在线诊断
如果不想部署复杂框架,Arthas是一个实用的命令行工具,它可以实时查看应用服务器中某个方法的调用参数、返回值和异常,包括JDBC调用,常用命令:
watch命令:watch java.sql.Connection prepareStatement "{params,returnObj}" -x 2,可以捕获所有SQL语句。monitor命令:monitor java.sql.Connection prepareStatement,统计调用次数和耗时。
Arthas不依赖日志,直接attach到JVM进程,适合临时排查。
不同应用服务器查看DB调用的差异
在实际工作中,应用服务器怎么看调用数据库的方法会因服务器类型不同而略有差异,Tomcat、WebLogic、WebSphere和JBoss在配置和监控接口上各有特点,下面用表格对比核心差异:
| 应用服务器 | 连接池监控方式 | 日志默认路径 | 常用工具 |
|---|---|---|---|
| Tomcat | JMX 或 Druid 内置页面 | logs/catalina.out |
JConsole, Arthas |
| WebLogic | 控制台“JDBC数据源”页面 | servers/AdminServer/logs/.log |
自带监控, WLST脚本 |
| WebSphere | 控制台“数据源” -> “连接池设置” | profiles/AppSrv01/logs/.log |
Tivoli Performance Viewer |
| JBoss/WildFly | 管理控制台或CLI | standalone/log/server.log |
HAL管理控制台 |
对于地域性场景,比如在上海的金融行业项目中,很多企业仍使用WebLogic或WebSphere,它们的监控入口虽然不同,但底层原理一致:都是通过JMX或管理端暴露连接池统计信息,掌握一个通用方法(如JMX),就能跨平台使用。
如何查看应用服务器数据库连接池状态:以Tomcat为例
Tomcat是使用最广泛的应用服务器,具体操作步骤:
- 确保Tomcat的JDBC连接池配置使用了
org.apache.tomcat.jdbc.pool.DataSource。 - 启用JMX,在
catalina.sh中添加CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"。 - 用JConsole连接,展开
Catalina -> DataSource,查看active、idle、maxActive等属性。 - 使用Druid连接池时,直接访问
/druid/index.html,在“数据源”菜单查看连接池状态,在“SQL监控”查看所有SQL及其执行频率。
代码层面:如何查看应用服务器SQL执行日志
如果上述方法都不可用,或者你需要更精细的控制,可以在代码层面开启日志记录。查看应用服务器SQL执行日志是开发人员自己就能做的事,以Spring Boot + MyBatis为例,在application.yml中配置:
logging: level: com.mycompany.mapper: DEBUG java.sql: DEBUG
这样每个SQL语句及其参数都会打印到应用日志中,对于非Spring应用,可以直接在log4j或logback配置中提高com.zaxxer.hikari或org.apache.tomcat.jdbc.pool的日志级别。
- 生产环境需要注意日志量,建议只对特定包开启,并配合日志滚动策略。
- 使用
p6spy或log4jdbc工具,它们可以拦截JDBC调用并格式化输出SQL,无需修改业务代码。
应用服务器查看DB调用常见问题
Q:应用服务器怎么看调用数据库是否出现连接泄漏?
A:连接泄漏通常表现为活跃连接数持续上升,池中连接无法归还,通过连接池监控接口查看active计数,如果请求结束后active没有归零,则可能存在泄漏,在应用日志中搜索Connection not closed或Resource leak等关键词,最直接的做法是使用show full processlist命令,对比应用服务器线程数和数据库连接数。
Q:如何查看应用服务器数据库调用中的慢查询?
A:有三种方式,第一,开启数据库端慢查询日志(slow_query_log),然后从应用服务器角度关联慢查询语句,第二,使用APM工具,如SkyWalking,它会自动标记超过阈值的SQL,第三,在连接池监控中(如Druid)直接查看慢SQL记录,Druid默认会记录执行时间超过3秒的SQL,并展示完整语句。
Q:免费的应用服务器数据库调用监控工具有哪些?
A:常见的有Druid监控(仅限使用Druid连接池的应用)、SkyWalking、Pinpoint、Zipkin,以及轻量级的Arthas,Druid监控适合单机快速查看,APM工具适合分布式环境,HikariCP本身提供JMX数据,配合Prometheus和Grafana可以搭建免费监控面板。
应用服务器怎么看调用数据库,本质上是一个从日志、监控、工具到代码的全链路问题,无论你使用哪个服务器,建立多维度的观察手段是保障系统稳定性的基础,没有银弹,结合日志、连接池监控和APM工具,才能全面掌握DB调用状况。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/588283.html




