大型網站典型故障

大文件讀寫獨占磁盤引發的故障

故障現象:

某應用主要功能是管理用戶圖片,但是上傳圖片突然非常慢。

原因分析:

檢查存儲服務器,發現大部分文件只有幾百 KB,而有幾個文件非常大,有數百兆,讀寫這些大文件一次需要幾十秒,這段時間,磁盤基本被這個文件獨占,導致其他用戶的文件操作緩慢。

經驗教訓:

存儲的使用需要根據不同文件類型和用途進行管理,圖片都是小文件,應該使用專用的存儲服務器,不能和大文件共用存儲。批處理用的大文件可以使用其他類型的分布式文件系統。

高并發訪問數據庫引發的故障

故障現象:

某應用發布后,數據庫 Load 居高不下,遠超正常水平,持續報警。

原因分析:

檢查數據庫,發現報警是因為某條 SQL 引起的,這條語句執行頻率很高,遠超正常水平。追查這條 SQL,發現被網站首頁調用。

經驗教訓:

  • 首頁不應該訪問數據庫,首頁需要的數據可以從緩存服務器或者搜索引擎服務器獲取。
  • 首頁最好是靜態的。

高并發情況下鎖引發的故障

故障現象:

某應用服務器不定時地因為響應超時而報警,但是很快又超時解除,恢復正常,如此反復。

原因分析:

程序中某個單例對象中多處使用了synchronized(this),由于this對象只有一個,所有的并發請求都要排隊獲得這唯一的一把鎖。一般情況下,都是一些簡單操作,獲得鎖,迅速完成操作,釋放鎖,不會引起線程排隊。但是某個需要遠程調用的操作也被加了 synchronized(this),這個操作只是偶爾會被執行,但是每次執行都需要較長的時間才能完成,這段時間鎖被占用,所有的用戶線程都要等待,響應超時,這個操作執行完后釋放鎖,其他線程迅速執行,超時解除。

經驗教訓:

使用鎖操作要謹慎。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容