十万。
屏幕上的数字跳了。
九万九千九百九十九,变成了一零零零。
六位数。
宴会厅里有人看见了,拍了一下桌子喊:“破了!十万了!”
陈天宇把香槟瓶举起来,拇指顶住瓶塞,使劲一推。
瓶塞没弹出来。
因为他的眼睛看见了另一个东西。
屏幕左边,在线人数的数字,从十万零一,跳到了十万零三。然后停了。
不是停了。
是整个屏幕卡了。
数字不跳了。曲线不动了。状态栏上那个绿色的“正常运行”字样,闪了一下。
变成了红色。
“服务器异常”。
运维主管从椅子上弹起来。手机已经贴在耳朵上了。那头没人接。
他拨了第二个电话。机房值班。响了两声,接了。
对面的声音带着慌:“主管,CPU全满了!所有节点,百分之百!”
“什么时候的事?”
“就刚才!一秒钟之内,从百分之三十七直接拉满!”
运维主管看了眼屏幕。《魔途》的在线人数定在十万零三,一动不动。
他又问:“内存呢?”
“溢出了。所有进程互相锁着,杀不掉。我试了kill-9,没反应。操作系统层面就卡死了。”
运维主管把手机从耳朵边拿开,转头看向陈天宇。
陈天宇还举着香槟瓶。
“陈总,服务器全挂了。”
陈天宇没动。
宴会厅里的人开始议论。有人还在鼓掌,没反应过来。有人已经看见屏幕上那行红字了。
LED大屏上,《魔途》的状态面板一个接一个变红。
第一集群。红。
第二集群。红。
第三集群。红。
全红了。
底下有人掏出手机试着登录《魔途》。进不去。客户端卡在加载界面,转圈。
赵磊从座位上站起来,脸上的笑还没收回去。他掏出笔记本电脑,当场打开,连上酒店WiFi,远程登了一台跳板机。
敲了两行命令。
没有回应。
他又敲了一行。屏幕上吐出一行错误日志。
“deadlockdetected:processAwaitingforlockheldbyprocessB,processBwaitingforlockheldbyprocessA…”
死锁。
逻辑死锁。
赵磊盯着那行日志,手指悬在键盘上方。
他认识这个。不是系统级的死锁。是业务逻辑层面的。写在游戏引擎底层的。
他回头看了一眼李栋。李栋也打开了电脑,脸色不对。
“赵哥,我查了一下触发条件。是并发连接数等于一十万的时候,底层有一段代码会把所有线程的锁标记同时翻转。”
赵磊凑过去看。
一段藏在内存管理模块最深处的条件判断。ifconcurrent_connections>=1000,执行一个函数。
那个函数做的事情是:把所有共享资源的互斥锁全部置为占用状态。然后让每个线程去等待其他线程释放锁。
没有人会释放。因为所有人都在等。
死循环。
“这段代码谁写的?”赵磊问。
李栋看了眼提交记录。没有提交记录。这段代码不在版本管理里。它是直接写在编译后的二进制文件里的。
硬件指令层面。
赵磊的脸白了。
他想起来了。这套引擎,是从际华那边带出来的。底层架构是际华的人搭的。
他们带走的是源码。但编译好的核心库,是用际华提供的工具链生成的。
工具链里动了手脚。
编译的时候,自动把这段死锁逻辑注入到二进制文件里。源码层面看不到。代码审查查不出来。只有反汇编才能发现。
陈天宇走过来了。香槟瓶放下了。脸上什么表情都没有。
“怎么回事。”
赵磊抬头看他。嘴巴张了张,说不出话。
李栋替他说了:“陈总,底层引擎被下了套。并发到十万的时候自动触发逻辑死锁。不是软件bug,是编译层面注入的。查不到,改不掉。”
“重启呢?”
“重启没用。服务一起来,玩家重新连接,并发数一到十万,又死。”
“那把并发限制在十万以下。”
赵磊摇头:“来不及。限流逻辑要改源码重新编译,但编译工具链本身就有问题。用它编译出来的东西,还是带那段代码。”
“换编译器。”
“换了也没用。核心库的二进制已经污染了。除非把整个底层引擎推翻重写。”
陈天宇站在那里。
宴会厅里的人已经不聊天了。所有人都在看着他。
老沈放下酒杯,站起来,走了。没跟任何人打招呼。
IDG的两个副总裁对视了一眼,也站起来了。
记者们在拍照。闪光灯一下一下。
陈天宇没看他们。
他盯着LED屏上那排红色的状态灯。
“数据库呢?”他问。声音压得很低。
运维主管查了一下:“数据库还活着,但磁盘IO被锁死进程占满了,写入队列全堵了。如果持续下去,数据库缓冲区会被写满,然后崩。”
“玩家的充值数据在里面。”
“在。”
“充值记录,七万多人的消费流水,都在数据库里。”
“对。”
陈天宇转身就走。
西装下摆带着风。他推开宴会厅的侧门,进了走廊。电梯。地下一层。酒店机房。
盛腾租了国贸酒店地下一层的半个机柜间当临时监控中心。
他冲进去的时候,三个值班的运维人员正对着屏幕发呆。屏幕上全是红色告警。
“拔电源。”陈天宇说。
三个人转头看他。
“把应用服务器的电源全拔了。只留数据库服务器。”
运维人员没动。
“你聋了?拔!现在!”
一个人站起来,走到机柜前面。手伸到服务器后面,握住了电源线。
停了一下。
“陈总,强行断电的话,数据库那边正在写的事务会丢。缓冲区里没落盘的数据也会丢。”
“丢多少?”
“不好说。最坏情况,最近二十分钟的交易记录全没。”
陈天宇闭了一下眼睛。
“拔。”
电源线被拽出来了。
一台。两台。三台。
应用服务器的指示灯一盏接一盏灭了。风扇声停了。
机房里安静下来。
只剩数据库服务器还亮着。硬盘灯疯狂闪烁,在拼命把缓冲区里的数据往磁盘上写。
陈天宇站在机柜前面。
LED屏上,《魔途》在线人数的位置,变成了一个灰色的横杠。
服务不可用。
他站了很久。
楼上宴会厅里,座位已经空了一半。