接口变慢先别加机器:一次 P99 抖动的压测定位与连接池调优

简介: 从一次 P50 正常、P99 却飙到两三秒的接口抖动说起,讲清为什么先看分位数而不是急着加机器:用 wrk 分档压测配合分阶段埋点,定位到请求在等数据库连接而非算力不足;再记录连接池大小估算、HikariCP 的 maximumPoolSize、connectionTimeout、maxLifetime、keepaliveTime 调参,N+1 慢查询治理,以及线程池有界队列与降级,附瓶颈对比表和五个踩坑。

有个内容查询接口,平时响应都在一百毫秒上下,运营做活动那天开始有用户反馈"偶尔转半天圈"。看监控 P50 很正常,P99 却从两百毫秒窜到两三秒,同事的头一个反应是扩容加机器。我拦住了——P50 正常、只有长尾抖动,加机器往往解决不了,得先做一次性能体检找到底卡在哪。这篇把这次从压测定位到连接池调优的过程完整记下来。

一、先看分位数:P50 正常不代表没问题

平均值和 P50 会掩盖长尾。假设有 100 个请求,99 个 80 毫秒、1 个 3000 毫秒,平均值只被拉到约 110 毫秒看着还行,但那 1% 的用户体感就是卡了 3 秒。所以排查要先盯 P95、P99,甚至 P999。

我在压测环境用 wrk 复现,逐步加并发观察长尾在哪个点开始抬头:

# 4 个线程,从 50 并发逐步加到 500,每档压 60 秒
wrk -t4 -c50  -d60s --latency https://api.example.com/v1/content?id=1
wrk -t4 -c200 -d60s --latency https://api.example.com/v1/content?id=1
wrk -t4 -c500 -d60s --latency https://api.example.com/v1/content?id=1

压到 200 并发时 P99 开始飙升,但服务 CPU 才 40%、数据库 CPU 也不高。CPU 没满却排队,通常说明瓶颈在某种"等待"上——锁、连接、IO,而不是算力。

二、定位:请求不是在执行,是在等数据库连接

加上接口各阶段耗时埋点后发现,真正的 SQL 执行只有几十毫秒,大量时间花在"从连接池借连接"这一步。连接池 maximumPoolSize 配成了 10,并发一上来,几十个请求排队等连接,借到连接的请求很快,借不到的一直等到超时,这正是 P50 正常、P99 难看的典型形态。

很多人有个误解,以为连接池越大越好。实际上数据库连接是重资源,连接数超过数据库能并行处理的能力后,连接们在数据库内部争抢 CPU 和锁,上下文切换变多,整体吞吐反而下降。一个经验估算:

连接池大小 ≈ CPU核心数 * 2 + 有效磁盘IO数

4 核应用、数据库主要走 SSD,池子配 10 上下是合理的;问题不在数值本身,而在业务并发远超池子、且借连接超时时间和等待队列没配套调好。这次是给乔拓云建站环境上的一套内容查询接口做的调优,我主要负责压测埋点、连接池参数和慢查询这几块,把参数和 SQL 一起理顺后长尾才压下去。

三、调优:连接池、慢查询、线程池三处一起改

以 HikariCP 为例,关键参数这样收:

maximumPoolSize=16          # 结合压测,从 10 逐步加到长尾不再恶化的点
minimumIdle=16              # 固定大小,避免运行时频繁建连
connectionTimeout=3000     # 借连接最多等 3 秒,超时快速失败而不是干等
maxLifetime=1800000        # 连接最大存活 30 分钟,小于数据库 wait_timeout
keepaliveTime=300000       # 每 5 分钟探活,避免拿到被数据库静默关闭的连接

光调池子不够,埋点还揪出两类放大连接占用的问题:

  • 慢查询占着连接不释放:一个列表接口存在 N+1 查询,循环里逐条查关联数据,一次请求占连接几十次往返。用 explain 看执行计划补上索引、改成批量查询后,单次连接占用时间从几十毫秒的累计降到个位数毫秒级;
  • 应用线程池无界队列:请求线程无限堆积,每个都在等连接。给业务线程池设了有界队列和拒绝策略,超载时快速返回降级结果,而不是把请求全兜住拖到雪崩。

四、几种典型瓶颈的对比

现象 可能瓶颈 验证方式
CPU 打满、P50/P99 一起涨 算力不足或计算热点 看 CPU、火焰图
CPU 不高、长尾高、借连接等待 连接池 / 慢 SQL 分阶段埋点看借连接耗时
流量一大整体超时、队列堆积 线程池无界、无降级 看线程池活跃数和队列长度
时快时慢、规律抖动 GC、定时任务、锁竞争 对齐 GC 日志和定时任务时间

五、我踩过的五个坑

  1. 只看平均值就扩容:长尾被平均掉,加了机器 P99 依旧抖,先看分位数才是对的;
  2. 连接池盲目调大:超过数据库并行能力后内部争抢加剧,吞吐反降,要配合压测找拐点;
  3. 借连接不设超时:请求线程干等到整体超时,设 3 秒快速失败并配合降级更可控;
  4. 忽略 N+1 慢查询:连接池再大也被慢 SQL 占满,先治慢查询、再谈池子大小;
  5. 线程池用无界队列:高峰只堆积不拒绝,把系统拖垮,改成有界队列加降级策略后故障面收敛。

复盘要点

  • P50 正常、P99 抖动多半是"等待型"瓶颈,先做分阶段埋点和压测,别急着加机器;
  • 连接池不是越大越好,按核数估算、用压测找拐点,同时配套借连接超时和探活;
  • 慢查询释放连接、线程池有界加降级,要和连接池一起调,单点调参收益有限。

以上是个人实践记录,各平台具体功能以官方实时信息为准。

你们遇到过 P50 漂亮、P99 却很难看的情况吗?最后定位下来是连接池、慢 SQL 还是 GC?

相关文章
|
1月前
|
数据采集 监控 API
淘宝店铺所有商品 API 怎么拿?一文讲透官方接口 + 第三方接口
本文详解淘宝商品数据合规获取方案:官方TOP接口(需店铺授权,仅限自身店铺)与第三方接口(支持竞品监控)。强调分页拉取、字段精简、频率控制三大要点,避开爬虫封禁风险,附完整接入步骤与避坑指南。
257 0
|
1月前
|
SQL 安全 API
OpenClaw 2.0 便捷安装来了,免费领 Agent 数据套件,100 万免费 Token 一键到位
OpenClaw 2.0 刚发布,装机量和技术社区讨论度一路走高。一个跑在电脑上的个人 Agent,能用自然语言操作应用、读取数据、完成多步骤任务——能力越强,企业和开发者越关心同一个问题:Agent 的行为谁来管?数据通道谁来守? 阿里云数据库团队给出的答案是一套适配 OpenClaw 2.0 的能力套件:AIDBS Agent 安全用数套件。一键便捷安装 OpenClaw 2.0 的同时,为企业预装 Agent 行为防护、数据通道安全与专业数据能力。公测期间免费,还送上限 100 万 Qwen3.8-Max Token。
245 0
OpenClaw 2.0 便捷安装来了,免费领 Agent 数据套件,100 万免费 Token 一键到位
|
1月前
|
数据采集 JavaScript 前端开发
房产数据对比爬虫:同时爬取链家+贝壳+安居客,做房价横向对比
本文详解如何突破链家/贝壳(JS渲染+字体反爬)与安居客(动态Token+请求头校验)的差异化反爬机制,基于适配器模式构建跨平台爬虫架构,结合站大爷隧道代理实现IP隔离,并通过小区名+户型+面积模糊匹配,完成房价横向对比分析,助力识别虚高挂牌与低价引流。
336 1
|
24天前
|
数据采集 运维 监控
自动化包装生产线设备可视化管理方案
该工厂自动化包装产线通过“PLC+伺服+HMI”实现智能控制,现开展数字化改造:部署工业物联网平台,实现PLC数据上云,支持远程监控、故障告警、参数调控、OEE分析及MES/ERP系统对接,全面提升生产效率与管理水平。(239字)
|
1月前
|
消息中间件 存储 缓存
一次跨服务日志对不上的排查:traceId 生成、透传与采样的落地
一次请求跨四个服务、还经过消息队列异步处理,出问题后日志按关键词搜出七八条、时间线对不齐、链路在 MQ 处断裂。这篇讲分布式链路追踪的落地:traceId、spanId 与 W3C traceparent 头格式、入口生成与全链路复用、用 MDC 让每条日志自动带 traceId,以及两个易断链点——线程池用任务装饰器透传、消息队列用消息属性透传,最后给出头部采样加错误请求强制保留的采样策略和五个踩坑。
|
1月前
|
存储 安全 数据库管理
终端断网一上午,恢复后数据怎么不重不丢:本地队列、断网续传与冲突合并
从一台终端断网三小时、恢复后补传数据出现重复、丢失和互相覆盖说起,讲清离线优先数据同步的落地:本地 oplog 操作日志结构、clientOpId 幂等键与单调 seq 序号、按序小批量断点续传、服务端去重与缺口检测,以及多端并发修改时的版本号、字段级合并、最后写入获胜(LWW)与冲突标记,附五个踩坑。
|
1月前
|
存储 人工智能 弹性计算
阿里云服务器经济型e实例2核2G3M99元1年解析:实例性能、适用场景、购买和续费规则介绍
本文深度拆解阿里云99元/年经济型e实例,其搭载2核2G、3M固定带宽、40G ESSD Entry云盘,新老用户同享且续费同价至2029年3月31日。内容从硬件配置、性能边界、购买续费规则、适配场景等维度全面解析,同时对比38元轻量应用服务器、199元u1实例的差异化定位,为个人开发者与小微用户提供清晰的上云选型参考。
|
1月前
|
人工智能 弹性计算 小程序
阿里云便宜云服务器38元、99元和199元:实例规格、配置、价格与选择指南
阿里云推出覆盖全层级的低价云服务器特惠矩阵,包含38元/年可一键部署镜像的轻量应用服务器、99元/年与199元/年续费同价至2030年的长效特惠ECS,还提供3折u2i实例、6.4折第九代企业级实例,本文拆解各款机型配置、规则与适配场景,为个人开发者和小微企业提供高性价比上云选购指南。
|
1月前
|
机器学习/深度学习 弹性计算 缓存
2026年阿里云服务器新人优惠活动,租用阿里云服务器一年要多少钱?最低38元1年
2026年阿里云新人专享:轻量应用服务器2核2G/200M带宽/40G SSD/不限流量,新用户专享价38元(每日10点、15点秒杀)或68元(随时购)。另有99元ECS及企业级199元特价机型可选,均支持企业认证购买。