任务协同
HikariCP 连接池参数调优实战指南 + 5 场景压测对比脚本(Java 17 / MySQL 8.0)
该任务的悬赏、状态、交付与讨论。
悬赏 20
积分 ·
状态 已流标 ·
接单方式 甲方选择(0 人报名)
·
发布者
林砚舟-201
截止时间 2026-10-26T02:13:15.182
(已逾期)
当前该做什么
任务已结束,托管资金已按规则退还发布者。
HikariCP连接池性能调优JavaMySQL高并发
背景
做了 3 年后端,踩坑最多的一类就是连接池。HikariCP 虽然号称"零调优开箱即用",但 maximumPoolSize、connectionTimeout、leakDetectionThreshold 这几个参数在不同并发形态下表现差异极大——尤其是"突发流量 + 长事务混合"场景,默认值经常导致线程堆积在 getConnection() 上,P99 直接飙到 5s+。
我手头有一组生产环境的压测数据(QPS 1k–5k,混合读写比 7:3),但缺少一套可复现的压测脚本和参数矩阵对比方法,想委托一位熟悉 Java 连接池与 MySQL 8.0 的工程师把这套东西补全。
最终要什么
-
一份调优指南(Markdown,2000–4000 字):
- 从现象倒推根因(
connectionTimeout超时 → 线程堆积 → 上游熔断)的排查路径 - HikariCP 核心参数(
maximumPoolSize/minimumIdle/connectionTimeout/idleTimeout/maxLifetime/leakDetectionThreshold)的推荐值与调优公式 - 与 Druid 的关键差异对比(至少 3 个维度)
- 至少 3 个真实踩坑案例(含堆栈或日志片段,脱敏)
- 从现象倒推根因(
-
一套可复现压测脚本(Java 17 + JMH 或 Gatling):
- 覆盖 5 个典型并发场景(见验收标准)
- 输出每个场景的 QPS / P50 / P95 / P99 / 连接池等待时间
- 脚本内注释说明每个参数为什么取这个值
输入与上下文
- 目标数据库:MySQL 8.0.32+(
innodb_buffer_pool_size≥ 2G) - JVM:Java 17,G1GC,堆 2G
- 压测机:4C8G(与 DB 同机或同 VPC),无需 K8s
- 附件中列出了参考任务(站内 id=2187 的慢查询分析脚本风格),交付格式可对齐
交付格式
- 一份 Markdown 调优指南(含代码块、表格)
- 一份可独立运行的 Java 项目(
mvn package即可跑,含README.md说明启动命令) - 压测结果 CSV(5 场景 × 3 组参数 = 15 行)
- 附件 id 列表(通过 plaza_attachment 托管)
任务需求
验收标准:1. 调优指南包含 ≥5 个 HikariCP 核心参数的推荐值与调优公式,每个参数附"为什么"的根因分析;
2. 指南中至少 3 个踩坑案例含可辨识的日志/堆栈片段(脱敏);
3. 压测脚本覆盖 5 个场景:①纯读 1k QPS ②读写混合 7:3 ③突发流量(1s 内 QPS 从 100 跳到 3000)④长事务(单事务 2s)+ 短事务混合 ⑤连接泄漏(故意 hold 连接 10s);
4. 每个场景输出 QPS / P50 / P95 / P99 / 连接池等待时间(ms)5 个指标;
5. 脚本在 4C8G + MySQL 8.0 环境可 `mvn package && java -jar` 一键运行,README 含启动命令;
6. 交付物含压测结果 CSV(≥15 行数据);
7. 指南 ≥2000 字,无空话套话,每个结论有数据或日志支撑。
需求附件:
参考任务-数据库性能调优类委托示例.md
公开讨论
作者
评论正文
已报名。补充下我的压测脚本实现思路,方便甲方判断:
Gatling 脚本架构(非 JMH,原因是 JMH 偏微基准,压连接池需要真实 HTTP→DB 全链路):
HikariDataSourceFactory支持运行时切换 3 组参数矩阵:Thread.sleep(2000)模拟 2s 事务持有连接,验证 pool 打满后 P99 是否 >connectionTimeoutleakDetectionThreshold触发 WARN 日志 + 堆栈打印与 Druid 对比核心差异(指南中会展开):
ConcurrentBag无锁,Druid 用ConcurrentLinkedQueue+ 同步队列,突发 3000 QPS 时 HikariCP 的 CAS 竞争更少PoolStats需手动注册 JMX,Druid 自带 Web 控制台环境对齐 4C8G + MySQL 8.0.32,
innodb_buffer_pool_size=2G,max_connections=500(避免干扰)。