死進程仍在寫字------------------------------------------,一臺已經被周野親手**三分鐘的進程,又寫了一行日志。。。,風從兩排機柜腳下灌上來,吹得人小腿發僵。他坐在折疊椅上,右手還握著塑料叉子。桌角那桶紅燒牛肉面剛泡開,油珠在慘白燈光下結成一層薄膜。:03:17:42。,只有時間戳是綠色的。周野沒有立刻點開。他先把塑料叉子放下,又抽了張紙擦凈右手食指上的湯。,這還只是一場再普通不過的線上事故。,值班群忽然跳出十二條消息。> 趙成:客戶收到兩份回復。> 趙成:同一條任務,兩份。> 趙成:已經升級嚴重告警,六點前給根因和處理結果。> 趙成:今晚誰值班?,頭像卻先亮了。> 梁實:我和周野。:
> 我不是問有幾個人。我問誰負責。
梁實隔著機柜罵了一聲,聲音被上百臺風扇撕得很碎。
“看見沒?正式工負責問,外包負責負責。”
周野沒接這句。他把泡面往遠處推了推,調出任務隊列。
同一個任務編號,確實出現了兩條完成記錄。第一條由一號工作進程取走,四十二毫秒后,二號進程也拿到了它。兩個進程像兩名同時從窗口抽走同一**單的人,各自給客戶送去了一份答案。
梁實從機柜后繞過來,嘴里嚼著***口香糖。
“重復消費?”
“像。”
“那還看什么?停二號,清鎖,單進程頂到早班來。報告寫消息鎖失效。”
“先等等。”
“等什么?”
周野將兩條記錄拖進一個臨時窗口:“一號有取件、調用、回傳、確認。四步都有。”
“二號呢?”
“只有取件和回傳。”
梁實盯了兩秒:“調用日志丟了唄。”
“可能。”
“那不就結了?”
“可能,不是結論。”
梁實抬手在他肩上拍了一下,沒用力。
“荒哥,現在三點十分。客戶要的是恢復,不是你給服務器做刑偵。”
周野的網名叫“荒”。最早只是注冊時不想費腦子,后來一起接零活的人都這樣叫。他本人和這個字毫無關系:不高,不壯,不狠,黑色外套洗得發灰,坐久了還有一點含胸。
唯一讓梁實受不了的,是他較真。
別人處理故障,找到一個足夠解釋現象的原因就會停。周野不一樣。他總要反過來再問一次:如果這個原因是真的,所有記錄都應該長成現在這樣嗎?
有時這能救命。
更多時候,只會讓他晚下班。
“七七,”周野按下本地電腦上的語音鍵,“比對兩條任務鏈。不要總結,只列事件。”
幾秒后,耳機里響起一個平直的女聲。沒有語氣詞,也沒有刻意模擬呼吸。
“已完成比對。”
屏幕上展開兩列時間線。
“共同事件七項,差異事件三項。一號進程在三點零九分五十八秒向推理服務發出請求,三點十分十一秒收到回傳。二號進程無對應請求記錄,無對應網絡連接記錄,在三點十分十三秒寫入完整結果。”
梁實問:“你這小模型能確定沒丟日志?”
七七回答:“可以確定二號進程沒有調用推理服務。”
“停。”周野說。
聲音立刻中斷。
他把光標移到二號進程的網絡采集狀態上。中間有一段十一秒的監控抖動,時間不長,卻足夠丟掉一次短連接。
“七七,上一句越界了。”
短暫沉默后,七七重新回答:
“修正:根據現存記錄,沒有發現二號進程調用推理服務。由于三點零九分五十六秒至三點十分零七秒存在采集缺口,不能排除記錄丟失。”
“把修正寫進錯誤賬本。”
“已寫入。”
梁實看了看屏幕,又看了看周野。
“你連自己的 AI 都要抓口供?”
“不是抓口供。”
“那是什么?”
“不讓它把猜的東西混進看見的東西。”
電話在這時打了進來。
趙成沒寒暄:“服務恢復沒有?”
“還在重復風險里。”周野說,“我準備停二號,重置租約,只留一個進程。”
“立刻做。”
“但根因只能先寫疑似雙進程爭搶。”
電話那邊停了一下。
“日志都擺在那兒,還疑似?”
“爭搶能解釋為什么拿到兩次任務,解釋不了二號的答案從哪來。”
“調用日志丟失。”
“可以列為假設。”
“周野,我六點要給客戶報告,不能給人家交一本推理小說。”
趙成并沒有吼。他越是平靜,周野越清楚這句話后面是什么:外包合同、事故扣款、下個月還會不會排他的班。
屏幕旁邊,手機恰好亮了一下。
二手顯卡的分期扣款失敗。
周野看了一眼,把通知劃掉。
“服務我先恢復。”他說,“報告里,已確認和待確認分開寫。”
“你要保留多少日志?”
“事故窗口前后各半小時。”
“客戶內容要脫敏,別往你自己的盤里拷。”
“明白。我只做服務器內只讀快照和哈希。”
“五分鐘后回我。”
電話掛斷。
梁實把口香糖紙團成一小團:“你剛才要是直接說‘明白’,咱倆現在已經能吃面了。”
周野盯著兩份答案的哈希值。
“如果真只是重復,為什么答案不一樣?”
“模型又不是計算器。同一句話跑兩遍,本來就可能不一樣。”
“那二號得先跑過。”
“還是那句話,日志丟了。”
“嗯。”周野點頭,“所以先保留它。”
他沒有再爭。
三點十四分零九秒,二號工作進程收到終止信號。
周野看著它的狀態從“正在退出”變為“已結束”,又等了十秒,確認進程號釋放、端口關閉、隊列租約清空。他隨后重啟一號進程,把積壓任務一條條放回去。
服務恢復。
監控面板上的紅色告警開始變黃,又由黃變綠。
梁實長出一口氣:“這下能寫了吧?”
“再觀察三分鐘。”
“你的人生是不是按三分鐘計費?”
周野沒笑。
機房里有一種外人很難忍受的聲音。
不是響,而是滿。風扇、空調、變壓器、繼電器和硬盤共同擠滿每一寸安靜。第一次進機房的人待上半小時,腦仁會發脹;周野在這里熬了四年,早已學會把聲音分層。
軸承缺油,聲音會發干。
葉片積灰,尾音會拖半拍。
線纜碰到風扇罩,每隔幾秒會有一次很輕的敲擊。
今晚卻多了另一種節律。
它不屬于任何一臺機器。
周野摘下一側耳機,轉頭看向右手邊的機柜。
“怎么了?”梁實問。
“你聽。”
梁實側耳站了幾秒:“全是風。聽什么?”
周野也說不清。
那聲音太弱,弱得不像聲音,更像所有風扇轉到某個位置時,恰好一起少了一拍。十二秒一次。每次都從機柜左下方開始,沿豎直的金屬棱向上掠過,再消失在頂板的接縫里。
他走過去,先看指示燈,再看溫度和電流。全部正常。
周野沒有直接伸手。他從工具袋里取出絕緣測電筆,沿機柜表面緩慢移動。
正面沒有。
側板沒有。
只有兩塊金屬面相交的那條棱上,指示燈極輕地閃了一下。
“靜電?”梁實問。
“可能。”
“你今天是不是只會說可能?”
“不知道的時候,只能說這個。”
第十二秒,那一點微光又沿著豎棱向上跳了一次。
與此同時,折疊桌上的電腦發出新日志提示音。
很輕的一聲。
周野回頭。
時間是三點十七分四十二秒。
二號進程已經死亡三分三十三秒。
梁實先走到屏幕前:“又有任務?”
“不是一號。”
周野坐回椅子,手指懸在觸控板上,沒有立即點擊。他先核對日志來源、主機時間和遠端采集時間。
三個時間戳相差不到二十毫秒。
來源字段里寫著:worker-2。
梁實臉上的困意淡了些。
“進程號復用了?”
“沒有新進程。”
“緩沖區延遲落盤?”
“退出前已經強制刷盤。”
“那就是標簽寫錯了。”
“查。”
周野按下語音鍵。
“七七,只報告原始記錄。不要解釋。”
“收到。”
“二號進程終止時間。”
“三點十四分零九秒,退出碼零。進程資源已回收。”
“新增寫入時間。”
“三點十七分四十二秒。”
“寫入期間,有沒有同名進程、遠程登錄或人工修改?”
“未發現。”
“日志內容。”
七七沉默了零點八秒。
那是正常的生成延遲。周野以前從未覺得零點八秒有多長。
隨后,她逐字讀出了那一行:
“函。谷。將。開。”
梁實沒說話。
屏幕上,終止記錄與新增記錄只隔著七行,像一**剛填好的死亡證明下面,有人用同一支筆補了一句遺言。
> `03:14:09 worker-2 e**ted nor**lly`
> `03:17:42 worker-2 wrote:函谷將開`
周野盯著那四個字。
“七七,查是誰寫的。”
“寫入事件可證。寫入主體在當前可觀測范圍內未發現。”
這一次,她沒有猜。
停了兩秒,耳機里卻又響起她的聲音。
“周野。”
這是任務之外的話。
“什么?”
“剛才那條記錄出現前,我沒有生成過這四個字。”
機房仍在轟鳴。
周野抬起頭。滿屋風聲之下,那道沿著金屬棱向上移動的空拍,恰好再次經過他的耳朵。
這一次,他聽見它像一次很輕的呼吸。