Steam下载一会儿就停止?我的三天排查全记录

那是上个月的事了。《艾尔登法环》刚发售,我兴冲冲地付了款,点下下载按钮,心想趁睡觉时挂机下载,明天就能玩。结果第二天早上起来,发现下载进度停在47%,剩余时间显示“未知”。我点开详细面板,看到网络活动早就停了,磁盘读取为0,但Steam界面显示“正在下载”。我又气又急,点了暂停再继续,下载又动了,但速度从30MB/s直线下滑到几KB,然后再次卡住。接下来的三天,我几乎把所有能想到的办法都试了一遍。

Steam下载一会儿就停止?我的三天排查全记录

先是怀疑网络问题

我用的是一百兆光纤,平时打游戏延迟稳定。但Steam下载就是不行。我打开命令提示符,用 ping 命令连续测试了几个常用网站和 Steam 的下载服务器 (比如 steamusercontent.com)。结果发现,每当下载停止时,ping 会突然飙到500以上甚至超时。这说明我本地到 Steam 的链路存在不稳定的跳点。后来我试着在 Steam 设置里换下载地区,从中国上海换成韩国首尔,下载速度虽然降低到20MB/s,但不再频繁中断了。我推断,国内网络到国际CDN的链路不稳定,丢包和延迟波动触发了Steam的自我保护机制,导致下载频繁暂停。

磁盘成了意想不到的瓶颈

我在想,如果网络没问题,那是不是硬盘的锅?我游戏盘是一块用了两年的东芝1TB机械硬盘。我打开资源监视器,在下载时观察磁盘活动。结果让我吃惊:磁盘活动时间长时间维持在100%,平均响应时间高达800ms。Steam在下载大游戏时,会同时分配空间并持续写入,而机械硬盘的随机写入能力极差,当写入队列深度过大,操作系统就会阻塞Steam的写入请求,Steam客户端以为写入失败,于是暂停下载等待。后来我忍痛把游戏移到一块旧的三星850 EVO上,奇迹发生了:下载再也没停过。这个教训让我永远记住了磁盘性能的重要性。

服务器端的负载也难辞其咎

我注意到一个规律:白天下载基本正常,一到晚上8点到11点就频繁暂停。这明显是服务器负载峰值导致的。Steam的CDN在全球部署了大量节点,但热门游戏首发时,同一区域的用户同时下载,服务器带宽被榨干,就不得不对每个连接做限流。客户端检测到速率下降,误认为网络拥塞,就自动暂停以保护连接。我在某个深夜成功下载完了一款40G的游戏,正是验证了这一点。

客户端内部的隐藏逻辑

我也怀疑过Steam客户端的设置。我进入“设置-下载”,那里有“限制下载带宽”和“在下载时限制网络速度”等选项。我尝试关闭它们,但没有明显改善。后来我自己反复琢磨,Steam下载引擎使用了一种滑动窗口机制,如果磁盘写入速度跟不上网络接收速度,窗口就会填满,客户端就会暂停网络接收直到缓冲区清空。这个机制本身是为了防止内存溢出和磁盘碎片,但在机械硬盘上就变成了频繁停启的死循环。我明白了,问题的根源就在于IO性能不足,怪不得Steam会在机械硬盘上频频暂停。

外部软件的干扰不容忽视

我还曾把原因归咎到安全软件上。我系统裸奔,只用了自带的Windows Defender。有一次我临时关闭了实时保护,下载居然稳定了半小时。但后来我发现这是因为Defender在扫描下载的临时文件时占用了大量磁盘IO,和Steam形成了资源竞争。我后来把Steam的下载目录添加到了排除列表,问题没有再出现。

最终,经过三天两夜的反复尝试,我的《艾尔登法环》在SSD上顺利下载完毕。启动画面亮起时,我长舒了一口气。这场与Steam下载停止的较量,总算画上了句号。