先给结论:访问量突增时,如果错误随并发升高而出现、并发回落后自行消失,优先怀疑资源压力;如果低并发下也稳定复现同一错误、且与请求量无关,优先怀疑配置错误。下面用一个假设情境,把两个角色的分歧变成可以逐项核对的判断过程。
假设某站点在一次推广后流量在数小时内明显上升。运维看到的是 CPU 与内存接近上限,认为“机器扛不住”;开发看到的是某个接口在本地测试正常,认为“生产配置写错了”。双方都没有编造数据,只是观察窗口不同:运维看的是整机指标,开发看的是单次请求结果。
要把分歧变成可核对的项目,第一步不是争论谁对,而是先固定一个可重复的观测口径:同一 URL、同一参数、同一时间段,分别记录单请求结果和并发下的结果。
资源压力的典型特征是随并发变化的曲线。可以这样做:
如果低并发正常、高并发报错、降回低并发又恢复正常,这条曲线更支持资源压力。如果无论并发高低都返回同一个错误,比如固定的 502、固定的超时或固定的数据库连接失败,则更支持配置错误或依赖服务问题。
实际动作与结果:把这三步的结果写成一张对照记录后,下一步该做什么会变得清楚——曲线随并发变化,就先查进程数、内存上限、连接池和缓存策略;曲线不随并发变化,就先查配置项、环境变量和依赖服务地址。
错误总量上升本身不能区分原因,因为流量上升时任何错误都会变多。更有区分度的是错误出现的位置:
这里有一个容易误判的点:抓取量或请求量归零、日志突然变少,并不能单独证明某次处理正确。它也可能是缓存命中、日志轮转、采集延迟或上游中断造成的。需要结合同一时间段的资源曲线和错误位置一起看。
配置错误往往不是一项,而是一组互相影响的设置。核对时建议按依赖顺序进行:
如果某一项在低并发下就已经不生效,那么它属于长期存在的配置问题,只是流量上升把它放大成了可见故障。这种情况下,扩容只能推迟故障出现,不能消除故障。
可以按下面的顺序决定动作:
需要说明适用条件:以上判断建立在错误可以稳定复现、观测口径一致的前提下。如果错误本身随机、无法复现,那么优先补齐日志与请求标识,再回到并发梯度测试。区分资源压力与配置错误的目的不是给故障贴标签,而是决定下一步该动配置还是动容量,避免在错误的方向上反复调整。