Tinkoff Gatling JDBC插件开启TRACE日志后响应时间过高,如何正确配置?
问题描述
使用Gatling的Tinkoff JDBC插件时,开启TRACE级别日志后响应时间大幅上升,从原本的1500ms增至25秒。
当前Logback配置
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern> </encoder> <immediateFlush>false</immediateFlush> </appender> <!-- uncomment and set to DEBUG to log all failing HTTP requests --> <!-- uncomment and set to TRACE to log all HTTP requests --> <logger name="io.gatling.http.engine.response" level="TRACE" /> <!-- uncomment to log WebSocket events --> <!-- <logger name="io.gatling.http.action.ws.fsm" level="TRACE" /> --> <!-- uncomment to log SSE events --> <!-- <logger name="io.gatling.http.action.sse.fsm" level="TRACE" /> --> <!-- <root level="TRACE"> --> <root level="TRACE"> <appender-ref ref="CONSOLE" /> </root> </configuration>
数据库连接代码
object Actions_test { // database connection val database_URL: JdbcProtocolBuilder = DB .url("mariadb") .username("user") .password("pw@2024") .maximumPoolSize(10) .connectionTimeout(10.second) // large query def callingJDBC(): QueryActionBuilder = jdbc("simple Call") .query("""your-large-query-here """.stripMargin) .check(simpleCheck(x => x.length > 2000) ) }
场景代码
class DebugTest extends Simulation { val scn = scenario("test") .exec(Actions_test.callingJDBC()) .exitHere setUp( scn.inject( rampUsers(1000).during(500) ), ) .protocols(Actions_test.database_URL) .maxDuration(10.minute) }
问题原因
你的Logback配置中根日志级别被设置为TRACE,这会强制所有组件(包括Tinkoff JDBC插件)输出最详尽的日志信息。对于返回大量数据的JDBC查询来说,TRACE级别会记录结果集的每一行数据、SQL执行的所有细节,产生巨量的日志输出,导致IO资源被占满,直接拖慢测试的响应速度。
解决方案
1. 调整全局日志级别,精准开启调试模块
将根日志级别恢复为INFO(日常测试的合理级别),仅保留需要调试的特定模块(比如Gatling HTTP响应)的TRACE级别。修改后的Logback配置如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern> </encoder> <immediateFlush>false</immediateFlush> </appender> <!-- 仅给需要调试的HTTP模块开启TRACE --> <logger name="io.gatling.http.engine.response" level="TRACE" /> <!-- 根日志恢复为INFO级别,避免全局大量日志输出 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
2. 按需调试JDBC插件
如果需要排查JDBC相关问题,不要直接用TRACE级别,而是临时给Tinkoff JDBC插件的日志包开启DEBUG级别(足够定位多数问题,且日志量远小于TRACE),添加如下配置到Logback中:
<!-- 仅在排查JDBC问题时临时开启 --> <logger name="ru.tinkoff.gatling.jdbc" level="DEBUG" />
调试完成后记得改回INFO或直接注释掉该配置,避免影响测试性能。
内容的提问来源于stack exchange,提问作者TriNguyen
相关产品推荐
相关产品推荐

