/** # 脚本说明 * SERP 双路径(fetch+浏览器)24h 自适应吞吐优化测试(用户 2026-10-30 目标): * 在保证客户端成功率 >98% 的约束下,自适应逼近系统可持续的最大每分钟请求数。 * 与 serp-profile-capacity.ts(单号 sticky+fetch,绕过池/令牌)不同,本脚本走生产 * 双路径原形态(runtime=auto,无 sticky,全池 LRU 选号): * GET /api/serp/json/search?q=...&num=10 * 令牌内走 go-fetch(全局限流 fetchPerSec),限流外并发走温池浏览器 —— 组合即生产形态。 * AIMD 控制器(每 60s 决策;硬约束看 30min 窗,重复砍需 10min 短窗新证据,退段需 30min 窗恢复): * 硬约束(成功率即约束本身):首次跌破 98%(失败≥2)×0.7、<95% ×0.5;退化段内 * 连砍需短窗(10min)成功率也 <98% —— dp3 实测教训:开局 3 个失败在 30min 硬窗 * 滞留导致每分钟连砍到下限(窗口滞后放大),迟滞后一段失败只砍一次; * 软信号按事件段(episode)迟滞,每段波只砍一次(波退去才重置): * 验证码占比>2% ×0.5、>0.5% ×0.7(10min 短窗;dp1 实测 0.5% 噪声时成功率 * 仍有 99.3%,按占比计而非按次数计,且不逐分钟连砍钉死下限); * 门壳尝试占比>15% ×0.85;池空>5 ×0.85; * 干净爬坡:不在退化段 且 短窗成功率≥99.5% 且门壳<2% 且无池空且验证码≤0.3% * (高压力下单 IP 逐个越限的常态噪声不阻止追涨)→ 每 5 拍 ×1.08。 * 速率区间 [3, 400] req/min;并发 worker 默认 12(真实并发让溢出自然流向浏览器路径)。 * 判定(客户端,JSON 出口):ok = 200 且 organic>0;gate = 200 且 organic=0 且 * attempts 含 gate;empty = 200 且 organic=0 无门壳尝试;错误按响应 code 分类 * (CAPTCHA_DETECTED / SERP_POOL_EMPTY / 其余 httpErr);网络层失败记 netErr。 * 输出:data/