網站變慢的時候,最常見的反應是「主機是不是不夠力,要不要升級」。
多數時候塞住的不是主機的力氣,是門口。
一個很有代表性的症狀
網站平常都正常,但偶爾會整個打不開,等個二十秒左右又自己好了。一天發生幾次,沒有固定時間,也跟流量高峰對不上。
最奇怪的地方是:主機的紀錄檔裡,完全找不到那幾次失敗的請求。
訪客確實連了、確實失敗了,但主機這邊一筆紀錄都沒有。
如果你描述的症狀是這一組,那幾乎可以直接跳過「主機不夠力」這個假設。
為什麼紀錄檔裡找不到
因為那些連線根本沒有進到主機裡面。
主機處理連線的方式,有點像餐廳門口的排隊。同時能服務的人數有限,多出來的先在門口排著,等裡面有空位再進去。
那個隊伍的長度是有上限的。排滿了之後,新來的客人連排隊都排不到,直接被擋在門外。
被擋在門外的人,不會出現在餐廳的點餐紀錄裡。所以你翻紀錄檔什麼都看不到。
而那個二十秒,就是客人站在門口等到放棄的時間 —— 那是瀏覽器的連線逾時,不是你的網站在慢慢跑。
為什麼升級主機沒有用
記憶體加倍、CPU 加倍,門口的隊伍長度還是同一個數字。
因為那是一個設定值,不是硬體規格。它寫在網站服務的設定檔裡,預設值在十幾年前訂下來,對現在的流量來說偏小。
我們遇過一個站換了更大的主機,問題一模一樣,因為搬家的時候把原本的設定檔一起帶過去了。硬體換了、設定沒換,等於什麼都沒改。
這一類問題改設定要幾分鐘,升級主機要幾千塊一個月,而且沒有效果。
另外兩種常被誤判的狀況
被爬蟲打。現在抓資料訓練 AI 的爬蟲非常多,有些完全不遵守規則,一秒鐘抓幾十頁。你的真實訪客要跟它們一起排隊。
這種的特徵很好認:半夜流量特別高,但業績沒有任何變化。看流量報表會覺得網站很紅,看訂單會覺得莫名其妙。
上游過濾。有些網路業者或 CDN 在機房前面有一層安全設備,它可能把某些正常流量誤判成攻擊而擋掉。
這種的特徵是:某些人永遠連不上,某些人完全正常,而且跟他們用哪一家網路有關。公司裡的人都好,客戶那邊打不開,就要往這個方向查。
這三種狀況的共同點是:問題不在主機裡面,所以在主機裡面怎麼查都查不到。這也是為什麼主機商常常回你「一切正常」—— 從他看得到的範圍來說,他沒有說錯。
不用懂技術的三步判斷法
下次網站又卡住的時候,做三件事:
第一,用手機關掉 Wi-Fi,改用行動網路連一次。
手機連得上、電腦連不上,那是你這邊或你的網路業者的問題,不是網站的問題。這一步就能排掉一半的誤判。
第二,問一下其他同事現在連不連得上。
全部的人都連不上,是網站整個掛了。只有部分人連不上,那通常是路上某一段的問題,往上面第四節那兩種方向查。
第三,記下發生的時間,精確到分鐘。
為什麼第三步最重要
「最近好像常常怪怪的」這種描述,工程師查不出東西。
紀錄檔是按時間排的,一天的量可能幾十萬行。沒有時間點,就只能從一片正常的資料裡猜哪裡不正常。
「昨天下午兩點十七分打不開,等了大概二十秒」可以直接跳到那個時間點,把前後五分鐘的所有紀錄攤開來看,連線數、佇列長度、回應時間一起比對。
有時間點,半小時能定位。沒有時間點,可能查一整天還在猜。
所以如果你的網站現在有這類間歇性問題,從今天開始做一件事就好:準備一張紙,每次出問題就寫下日期、時間到分鐘、你當時在看哪一頁。累積三筆就足夠查了。
這類問題的難處不是修起來困難,是要知道往哪裡看。我們在接手維護一個站的時候,佇列設定、爬蟲流量占比、上游是否有過濾,都是第一週就會檢查過一輪的項目。如果你手上的網站長期有說不出原因的卡頓,可以看一下我們的維護方案,或直接把症狀和時間點丟給我們看。
