昨天下午客户打电话过来,语气不太好:「你们那个服务器怎么回事,卡得要死,远程连上去半天不动。」

我先没急着辩解。做这行久了,客户说卡,第一反应永远是先看服务器,别先怀疑客户。

于是远程登上去,一台台看。CPU 百分之十几,内存用了一半不到,负载 0.3,磁盘 IO 基本闲着,带宽也没跑满。我又开了几个页面刷了刷,快得很,一点不卡。

我这边不卡,客户卡。这事就有意思了。

按老习惯我先把能想到的挨个排了一遍:是不是他那边同时在跑什么大文件传输?不是。是不是服务器上有定时任务撞上了?查了 crontab,那会儿没有。是不是机房这段链路抖了?我 ping 了一下,38 毫秒,稳得很,丢包为零。折腾一圈,服务器这边干干净净,什么都没查出来。

没法子,只能反过来问客户:你平时是怎么连上来的?

客户说,他电脑上挂着个代理,走的欧洲那边的节点,图便宜还是图什么我没细问。

挂了电话我大概就明白了一大半。我让他跑个命令,把到服务器的路由打出来。他发截图过来的时候我愣了一下——数据包从他那出发,先奔欧洲,绕到德国法兰克福,再从法兰克福拐去美国,最后才落到我们韩国首尔这台上。等于把整个地球绕了一圈。

我这边到服务器 38 毫秒,他那边一路打过去,三百多毫秒,还是状态好的时候。差了快十倍。

数字摆出来,客户还是有点不服:「距离远,慢点能理解,可我这是远程桌面,又不是打游戏,三百毫秒至于卡成那样吗?」

至于。远程桌面这种东西,你每点一下鼠标、每敲一下键盘、屏幕上每帧画面的变化,都得等一个来回。理论上三四百毫秒的延迟,你看着就是「拖泥带水」:光标慢半拍,打字卡一下才出字,拖个窗口一顿一顿。这跟服务器性能够不够一点关系都没有——服务器干完活了一直在等这条绕远路的网。

我把路由那张图发给他,又把我这边 38 毫秒的 ping 结果贴给他。他沉默了几秒,说了句「那我回头把代理关了」。今天上午我再问他,关了代理直连,说「顺了」。

回头想想这事挺典型的。客户第一反应是「服务器卡」,我们干运维的第一反应也容易跟着往服务器上找。但「卡」这东西不在服务器身上,在你和服务器中间那段路上。服务器的指标再好看,也救不了一条绕地球一圈的网络。

所以现在我接到「卡」的投诉,问的第一个问题经常不是「哪台机器」,而是「你怎么连的」。省事。