一、先把「慢」说清楚:延迟、抖动与误测
在改 url-test 之前,建议先用一句话写下你的痛点,是网页首包慢、视讯缓冲、游戏掉 ping,还是SSH/Git 偶发卡住?不同业务对「延迟」与「掉包」的敏感度不同;而 url-test 默认只是在对你指定的 url 做短请求,测到的是到该探测目标的 RTT 近似值,未必等价于「访问 Cloudflare 背后某 SaaS」或「跨国长肥管道」的体验。
若你观察到的是偶发卡顿但测速数字一直很漂亮,要优先怀疑DNS、SNI、路由抖动或上游对 HTTP 探测与真实业务路径不一致,而不是继续把 tolerance 调到极端。本站 TLS Handshake Timeout 专文 说明了如何把「逾时」从「单纯慢」里拆出来;本文则专注在策略组层面如何把测速参数调到「既跟线路变化,又不过度神经质」。
二、url-test 到底在选什么「最快」
在 Clash 系设定里,type: url-test 的策略组会周期性(或在 lazy 条件下按需)对成员节点发起对你配置的 url 的探测请求,根据延迟测量结果在组内挑选一个「当前最优」出口。许多发行版(含 Mihomo/Meta 系核心)还会在参数里提供 tolerance,用来在「新候选节点并没有明显快一截」时避免来回切,减少体感抽风。
因此,「总跳到慢节点」在工程上经常对应两类完全不同的情况:第一类是探测结果本身失真——例如探测 URL 在你当前网络下被特殊处理、被缓存、或走了与业务不同的路径;第二类是参数组合让核心「合理地」黏在一个次优节点——例如 tolerance 过大、或 interval 太长导致列表里别的节点其实已恢复但尚未被重新评估。下文按字段拆解后,你会更容易判断自己属于哪一类。
与 selector、fallback 的边界
selector 由你手动选;fallback 通常按顺序找第一个可用成员;url-test 则偏向「在可用集合里找延迟较低者」。若你把多条规则指到不同的自动组,或链式引用(A 组里套 B 组),要确认真正生效的是哪一层;链式场景可对照 MCP 分流文 里对策略组分流的写法,避免「以为在调 url-test,其实命中了另一组」。
三、interval、tolerance、lazy、url 逐项说明
1. url(健康检查位址)
这是最容易被忽视、却最常决定「数字好不好看」的字段。常见写法会指向运营商或 CDN 的204/极小回应端点,以降低payload;但若该端点在你所在网络被劫持、缓存或走本地旁路,就会出现「全员 20ms」这类不可信结果,后续 tolerance 与切换逻辑再正确也救不回来。
排查时建议准备至少两个风格不同的探测 URL(不同云/不同地区),在相同订阅下做 A/B,看延迟分布是否整体平移;若换 URL 后排序剧烈变化,应优先修正探测,而不是盲目缩短 interval。
2. interval(测速周期)
interval 控制健康检查的大致节奏(秒)。更短的周期让策略组更快反映线路变化,但也会带来更多后台请求与更「噪」的排序;更长周期则更省电省流量,但在节点品质快速波动时,你会感觉「怎么还不换」。桌面常驻与手机电池场景对 interval 的取舍往往不同,不必抄别人的「神数值」,而是以你能接受的反应时间为上限。
3. tolerance(容差/黏滞)
可以把 tolerance(毫秒)理解成防止频繁换边的缓冲带:当「当前节点」的延迟没有比「本轮测到的最佳值」好到超过一定差距时,核心倾向于维持现状,避免每一轮微幅噪声都触发切换。调得太大时,容易出现「明明列表里有更快的,却一直黏在旧的」;调得太小时,则可能对探针抖动过度敏感,体感上像「总在乱跳」。
4. lazy(惰性探测)
当 lazy: true 时,策略组往往只在被规则实际引用时才更积极地去跑探测,而不是无条件按 interval 对整组成员狂测。对「很多冷节点从不使用」的订阅,这能显著省资源;但若你期待「一载入设定档就立刻得到全局最优」,可能会误以为 lazy 让测速「坏了」。若你在排障期希望稳定可预期的测速节奏,可暂时改为 lazy: false 观察几轮,再切回 true。
proxy-groups:
- name: AUTO-HK
type: url-test
proxies:
- hk-a
- hk-b
- hk-c
url: http://cp.cloudflare.com/generate_204
interval: 60
tolerance: 35
lazy: true
上例仅示意字段组合,成员名请替换为你的订阅真实节点名;若你使用 Mihomo 或带图形界面的衍生客户端,仍应以「生成出来的 YAML」为准核对这四个字段是否如你所想。
四、用连接日志对齐「何时换节点」
调参最忌讳凭印象。建议你在客户端打开详细日志或连接记录,关注三类时间点:其一,健康检查批次何时完成;其二,策略组实际出口变更发生在哪一秒;其三,你主观卡顿的业务请求是否落在同一窗口。若变更总是比卡顿晚很久,多半是 interval 过长或 lazy 行为让你「看不到及时反应」;若变更很频但仍慢,回到上一节的 url 与成员品质。
另一个常见误判,是把别的策略组或 DIRECT的连接也算在 url-test 头上。请在日志里核对规则命中链与最终策略组名称,确认你正在观察的确实是那一个 url-test 组。更完整的架构名词可参考 本站文档,再对照你所用核心的发行说明。
interval 调到极低并搭配过大的节点池——这会给探测目标与本地网络带来压力,也可能触发上游限速,反而让测速结果更脏。
五、推荐调参顺序(可复制)
下面是一条从低风险到高风险的顺序,适合大多数「url-test 体感不对」的场景照抄执行;每一步只做一类改动,观察 10~30 分钟再进入下一步。
- 验证 url:换用不同探测 URL,确认延迟分布「像真的」;若对探测目标有合规顾虑,请使用你信任且体量合适的端点。
- 收紧或放宽 tolerance:若感觉「黏慢节点」,先把 tolerance下调一小档(例如减 10~20ms)观察切换是否更跟手;若感觉「乱跳」,则反向微调。
- 调整 interval:在 tolerance 基本合理后,再调周期;需要更快反应就适度缩短,但别低于你网络环境能稳定重复探测的下限。
- lazy 对照实验:排障期可设
lazy: false观察是否「载入后立刻排序稳定」,再决定是否恢复 lazy。 - 收敛成员列表:把明显不可用或跨洲混在一起的成员拆到不同 url-test 组,避免单组内「最优」其实在另一个地理意图之外。
若完成以上步骤后,仍只在特定网站异常,请把问题从「url-test」迁移到「规则与 DNS」轨道;那已超出本文范围,但你可以从 fake-ip 与分流专文继续排查。
六、常见坑:探测站、订阅与链式策略组
第一类坑是探测与业务路径不一致:HTTP 204 探测走得很顺,但真实 HTTPS 业务要绕一大圈或遭遇 SNI 干扰;此时 url-test 会「诚实」地告诉你探测很快,却无法代表业务。第二类坑是订阅里节点名频繁变动,导致你以为绑定的成员与策略组里引用的是同一批对象,实际上已被远端重命名或合并。第三类坑是多层策略组嵌套,子组也是 url-test,父组也是 url-test,彼此 interval 不同步,看起来像「随机抽风」。
遇到「订阅刚更新、节点列表变了」一类问题时,可同步阅读 订阅与 Provider 缓存,先保证成员集合稳定,再谈自动选优。
七、自查清单
- 日志里最终命中的策略组名称,是否就是你正在调的那一个 url-test?
- 更换探测 URL 后,延迟分布是否整体合理,还是「全员超快/全员超时」?
- 把
tolerance小幅上下移动时,切换频率与体感是否呈可解释的变化? lazy开关是否在载入初期造成「很久不测」的错觉?- 同一时段用固定业务动作复测三次,问题是否可重现?
- 成员里是否混入了不同用途(家宽/机房/游戏)导致「最优」与预期不符?
| 你看到的现象 | 优先尝试 |
|---|---|
| 列表里有更低延迟,却一直用次低的 | 下调 tolerance;确认探测 URL 没被劫持或缓存成假低延迟 |
| 几个节点之间来回闪,视频一卡一卡 | 上调 tolerance 或略拉长 interval;检查 lazy 与成员是否过多 |
| 载入后很久都不换,线路明明坏了 | 缩短 interval;排障期暂时 lazy: false |
| 测速永远很好看,但网页仍慢 | 更换探测目标;并行查 DNS/TLS/规则是否误走 DIRECT |
八、小结
Clash url-test 与 Mihomo 生态里的自动测速策略组,本质是「用轻量探测去近似真实出口品质」;当 interval、tolerance、lazy 与 url 任一环节与你的心智模型不一致时,就很容易得出「为什么总在慢节点」的结论。把探测可信度放在第一位,再用容差控制切换性格,用周期控制反应速度,最后才处理 lazy 与成员拆分,通常能以最小改动换来最明显的体感改善。
相比在订阅里盲目加减节点,把上述顺序固化成你自己的排障脚本,日后每次换机房、换探测站或升级核心版本时都能快速回归稳定。若你希望使用带图形界面、对日志与策略组更友好的客户端来完成这些对照实验,可以从本站下载页获取适合你平台的 Clash 衍生版本,再按本文清单逐项验证。