淩晨一點十三分。
路容在黑暗中睜開眼睛。
出租屋裏一片漆黑,隻有窗外遠處高架橋上的車燈偶爾劃過天花板,投下短暫的光影。她躺在床上,呼吸平穩,但身體已經進入警戒狀態——這是三年訓練出來的本能。任何異常的聲響、光線變化、甚至空氣流動的改變,都會讓她瞬間清醒。
手機在床頭櫃上震動。
不是電話,是連續不斷的簡訊提示音。嗡嗡嗡,嗡嗡嗡,像一群被困在玻璃瓶裏的蜜蜂。聲音在寂靜的房間裏格外刺耳。
路容伸手拿起手機。螢幕的冷光刺得她眯起眼睛。鎖屏界麵上,十幾條訊息通知堆疊在一起,全部來自同一個企業聊天群——“星耀集團技術應急群”。
她解鎖手機,點開群聊。
訊息像瀑布一樣滾下來。
【王總監】@所有人緊急情況!公司核心資料庫訪問異常,營銷部、財務部、運營部均報告無法調取資料。請所有線上技術人員立即登入遠端支援係統,優先順序最高!
【王總監】重複一遍:所有技術人員立即上線!故障影響範圍正在擴大!
【王總監】@周哲@吳建國@張明@李濤@若溪……
後麵跟著一長串@名單。路容的名字“若溪”夾在中間,像一顆不起眼的石子。
她坐起身,開啟床頭燈。暖黃色的燈光灑下來,照亮了這個不到二十平米的出租屋。房間很簡陋,一張床,一張書桌,一個衣櫃,牆上貼著深港市的地鐵線路圖。書桌上擺著她的膝上型電腦,黑色的機身,沒有任何貼紙或裝飾。
空氣裏有灰塵的味道,混合著窗外飄進來的汽車尾氣。深港市的夜晚從不真正安靜,總有什麽在運轉——車輛、機器、或者人心。
路容掀開被子,赤腳踩在地板上。瓷磚冰涼,寒意從腳底竄上來。她走到書桌前,開啟電腦。螢幕亮起,藍色的登入界麵像一扇通往另一個世界的門。
她輸入密碼,進入係統,開啟遠端支援客戶端。界麵載入的幾秒鍾裏,她能聽見自己心跳的聲音——沉穩,有力,但比平時快了一些。
這不是普通的係統故障。
星耀集團的核心資料庫采用分散式架構,有七層冗餘備份,理論上不可能出現多個部門同時無法訪問的情況。除非……
除非有人動了手腳。
遠端支援界麵載入完成。左側是使用者列表,顯示所有已登入的技術人員頭像和狀態。路容掃了一眼——周哲線上,狀態“忙碌”;it部的吳建國線上,狀態“空閑”;還有五六個她不熟悉的名字,狀態都是“正在處理”。
右側是故障報告麵板。紅色的警報資訊一條條跳出來:
【01:07:23】營銷部資料庫連線超時,錯誤程式碼:503
【01:09:41】財務部核心表鎖死,事務迴滾失敗
【01:11:15】運營部資料倉儲查詢佇列堵塞,等待超時300秒
【01:12:58】日誌伺服器記錄異常,疑似資源競爭
路容的手指在觸控板上移動,點開詳細日誌。黑色的命令列界麵彈出來,白色的字元快速滾動。她眯起眼睛,瞳孔在螢幕光的照射下微微收縮。
日誌顯示,故障是從淩晨零點五十分開始的。最初是營銷部的幾個查詢請求響應變慢,然後像多米諾骨牌一樣,連鎖反應蔓延到其他部門。但奇怪的是——故障的傳播路徑不是隨機的。
它像是有選擇性的。
財務部的核心表被鎖死,但輔助表正常;運營部的資料倉儲查詢堵塞,但實時流處理通道暢通;營銷部的曆史資料無法訪問,但當天的新增資料可以正常寫入。
這不像硬體故障,也不像普通的軟體bug。
這像是一種……測試。
或者,一種警告。
路容的呼吸變輕了。她靠在椅背上,手指無意識地敲擊桌麵。木質桌麵傳來沉悶的咚咚聲,節奏穩定,像心跳的模擬。
企業聊天群裏,訊息還在滾動。
【張明】我這邊看了,資料庫伺服器cpu使用率正常,記憶體也沒爆,奇怪了
【李濤】網路連線檢測過了,沒問題,ping值都在5ms以內
【王總監】@所有人別在群裏閑聊!上遠端係統,統一排查!半小時內必須解決!李總明天早上要看報表!
王總監的訊息後麵跟著三個感歎號,像三把懸在頭頂的刀。
路容盯著螢幕,沒有在群裏迴複。她的手指在鍵盤上停頓了幾秒,然後開始快速敲擊。
她新建了一個臨時討論組。
組名:“故障排查_臨時”。成員:周哲、吳建國、還有她自己。
沒有邀請其他人。
討論組建立成功。路容在輸入框裏打字,手指在機械鍵盤上敲出清脆的哢嗒聲。房間裏隻有這個聲音,和窗外隱約傳來的汽車引擎轟鳴。
【若溪】@周哲@吳建國兩位老師好,我是資料分析部的若溪。我這邊看到一些異常模式,想請兩位幫忙確認一下。
訊息傳送出去。
幾秒鍾後,周哲的頭像旁邊出現“正在輸入”的提示。
【周哲】什麽模式?
路容切迴遠端支援係統,開啟另一個命令列視窗。她輸入一串命令,螢幕上的字元像流水一樣滾動。她的眼睛快速掃過每一行輸出,大腦像一台精密的處理器,過濾無關資訊,提取關鍵資料。
故障表現很奇特。
資料庫連線沒有真正斷開,而是被某種機製“掛起”了。查詢請求進入等待佇列,但佇列的處理執行緒被占用,不是被其他任務占用,而是被……空迴圈占用了。
就像有一個人站在門口,不進去,也不離開,就堵在那裏。
路容的手指再次敲擊鍵盤。
【若溪】請兩位看一下日誌伺服器的/var/log/mysql/slow_queries.log,時間範圍00:50到01:10。注意第34行到第47行。
她傳送訊息,然後等待。
房間裏很安靜。她能聽見冰箱壓縮機啟動的嗡嗡聲,能聽見樓上鄰居衝馬桶的水流聲,能聽見自己吞嚥口水時喉嚨的輕微響動。三種聲音在黑暗裏交織,像一首不協調的交響樂。
臨時討論組裏,吳建國迴複了。
【吳建國】看了。鎖等待時間異常,但鎖持有者顯示為“system”,不是具體程序。
【周哲】我也看到了。這不對勁。system程序不會主動持有使用者表鎖。
路容的嘴角微微上揚,一個幾乎看不見的弧度。她繼續打字。
【若溪】請再執行:showprocesslist;然後過濾state為“usersleep”的連線。
這次,周哲的迴複快了一些。
【周哲】有七個連線處於usersleep狀態,sleep時間都超過300秒。連線來自……內部ip,10.0.5.x段。
10.0.5.x段。
路容的瞳孔收縮了一下。
那是測試伺服器的ip段。按理說,測試伺服器不應該在生產環境持有資料庫連線,更不應該讓連線處於休眠狀態超過五分鍾。
除非有人故意這麽做。
她切迴命令列,輸入另一串指令。螢幕上的輸出快速滾動,白色的字元在黑色背景上像一群受驚的飛鳥。路容的眼睛盯著螢幕,手指在鍵盤上懸停,像鋼琴家等待下一個和絃。
找到了。
七個休眠連線,全部來自同一台測試伺服器——test-05。而test-05伺服器的管理員許可權,上週剛剛變更過。
新的管理員是:王總監。
路容的呼吸停了一拍。
她靠在椅背上,閉上眼睛。腦海裏快速閃過幾個畫麵——王總監在會議室裏冰冷的眼神,工位調整時那抹得意的微笑,還有今天下午,她經過王總監辦公室時,聽見裏麵傳來的壓低聲音的電話:
“……必須給她點顏色看看……李總那邊我會解釋……”
當時路容沒有多想。現在,這些碎片拚湊在一起,形成了一個模糊但危險的圖案。
王總監在測試伺服器上做了手腳,製造了這場“故障”。目的是什麽?給她一個下馬威?測試她的技術能力?還是……更深的算計?
路容睜開眼睛,眼底一片清明。
不管目的是什麽,現在必須解決故障。而且,必須用“若溪”這個身份該有的方式解決——不能太突出,不能太老練,但也不能毫無作為。
她重新開始打字。
【若溪】@周哲@吳建國我有個猜測,不一定對。那七個休眠連線可能是測試指令碼殘留,指令碼異常退出但連線沒釋放。可以嚐試從測試伺服器端強製kill連線嗎?
訊息傳送出去。
路容等待迴複的時候,手指無意識地摩挲著鍵盤邊緣。塑料外殼有些磨損,邊緣微微發亮,那是長期使用留下的痕跡。這台電腦陪了她三年,從“路容”到“若溪”,從天才新星到職場幽靈。它記得她所有的搜尋記錄,所有的程式碼嚐試,所有深夜裏的孤獨和憤怒。
臨時討論組裏,周哲迴複了。
【周哲】有許可權。我試試。
幾秒鍾後。
【周哲】kill了三個連線。另外四個……許可權不足。
【吳建國】許可權不足?test-05的root許可權被改了?
【周哲】嗯。管理員換人了。
討論組裏沉默了幾秒。
路容能想象螢幕那頭的兩個人此刻的表情——周哲皺著眉頭,手指在鍵盤上敲擊,試圖找到繞過許可權的方法;吳建國靠在椅背上,眯著眼睛,心裏盤算著這背後的意味。
她繼續打字。
【若溪】如果從資料庫端強製終止連線呢?用super許可權執行:killconnection[id];
這次,迴複的是吳建國。
【吳建國】可以。但需要確認連線id。而且,super許可權隻有我和周工有。
【若溪】連線id在slowquerylog裏有記錄。第38行、42行、45行、49行。
訊息傳送出去。
路容等待的時候,端起桌上的水杯喝了一口。水是涼的,順著喉嚨滑下去,帶來一陣輕微的寒意。窗外的天空是深紫色的,沒有星星,隻有城市的光汙染在雲層上塗抹出一片朦朧的橙紅。
臨時討論組裏,吳建國發來一條訊息。
【吳建國】小姑娘,眼挺尖啊。連日誌行數都記得這麽清楚。
路容的手指停頓了一下。
她意識到自己犯了一個小錯誤——作為一個“新人”,不應該對日誌檔案熟悉到能精確指出行數。這太老練了,太像……曾經的她。
她快速打字補救。
【若溪】剛才查日誌的時候特意記了一下,怕自己看錯了。
這個解釋有些牽強,但勉強說得通。
幾秒鍾後,周哲迴複了。
【周哲】連線已終止。資料庫鎖釋放了。
幾乎同時,企業聊天群裏跳出一條訊息。
【李濤】哎?恢複了!營銷部那邊說能訪問了!
【張明】財務部也正常了!
【王總監】@所有人故障排除完畢,辛苦了。相關技術人員寫一份事故報告,明天上午十點前發給我。
王總監的訊息後麵沒有感歎號,語氣平靜得像什麽都沒發生過。
但路容知道,有什麽已經發生了。
臨時討論組裏,吳建國發來最後一條訊息。
【吳建國】行了,散了吧。明天還得早起。
周哲迴複了一個簡單的“嗯”。
路容盯著螢幕,手指在鍵盤上懸停了幾秒,然後敲出兩個字。
【若溪】謝謝兩位老師。
她退出討論組,關閉遠端支援係統,合上膝上型電腦。螢幕暗下去,房間裏唯一的光源消失了,隻剩下床頭燈那團暖黃色的光暈。
路容靠在椅背上,閉上眼睛。
腦海裏複盤剛才的每一個細節。
故障表現——針對性的資源鎖死,像測試又像警告。
故障源頭——測試伺服器test-05,管理員許可權變更。
解決過程——她引導了排查方向,但控製在了“新人該有的水平”。
周哲的反應——那個“?”,還有後續的沉默。
吳建國的反應——“眼挺尖啊”。
最後一個,最值得玩味。
路容睜開眼睛,拿起手機。螢幕還亮著,停留在企業聊天軟體的界麵。她退出群聊,迴到主界麵,然後看到了一條未讀私信。
傳送者:吳建國。
時間:淩晨一點四十六分。
內容隻有一句話:
“小姑娘,手挺生,路子挺野。明天下午三點,b2層備用機房,換過濾網。”
路容盯著這條訊息,看了整整一分鍾。
手挺生——指的是她打字的速度和指令的輸入方式,還不夠熟練,有生疏感。
路子挺野——指的是她解決問題的思路,不按常規,直接切中要害。
換過濾網——一個再普通不過的雜活,it部最基礎的維護任務。
但約定地點:b2層備用機房。
那個地方路容知道。在地下二層,靠近停車場入口,平時很少有人去。機房沒有監控——至少明麵上沒有。因為裏麵存放的都是淘汰的舊裝置,價值不高,安保級別很低。
一個絕佳的,私下談話的場所。
路容放下手機,走到窗邊。她拉開窗簾,看著窗外深港市的夜景。高樓大廈的燈光像無數雙眼睛,在黑暗中靜靜注視。遠處,星耀集團的大廈還亮著幾盞燈,在樓群中像一個沉默的巨人。
淩晨的風從窗戶縫隙鑽進來,帶著潮濕的涼意。路容能聞到空氣中淡淡的汽車尾氣味,能聽見高架橋上偶爾駛過的貨車的轟鳴,能感覺到玻璃窗傳來的輕微震動。
三種感官資訊在腦海裏交織。
她轉身迴到書桌前,開啟抽屜,取出一個黑色的筆記本。翻開,裏麵是她這一個月來記錄的所有資訊——李劍的行程規律,王總監的派係關係,部門的人員架構,還有她發現的那些異常資料模式。
她在新的一頁寫下:
“淩晨故障。測試伺服器test-05。王總監許可權。吳建國邀約。b2機房。”
寫完,她合上筆記本,放迴抽屜。
床頭櫃上的電子鍾顯示:淩晨兩點零七分。
路容關掉床頭燈,躺迴床上。黑暗重新籠罩房間,隻有窗外遠處的燈光在天花板上投下模糊的光影。她閉上眼睛,但大腦還在運轉。
明天的會麵,是機會,也是風險。
吳建國看出了什麽?他是什麽立場?是李劍的人,還是孫明遠的人?或者,他隻是個看不慣公司現狀的老技術員?
路容不知道。
但她知道一點——在星耀集團這座布滿監控的迷宮裏,她終於找到了第一個,可能不是敵人的身影。
窗外的城市漸漸安靜下來。
路容在黑暗中調整呼吸,讓心跳慢慢平複。她的手指無意識地攥緊了被角,布料粗糙的觸感從指尖傳來。她能聽見自己的呼吸聲,平穩,綿長,像潮汐。
淩晨兩點二十三分。
她睡著了。