伺服器負載暴漲以後…

技術小甜發表於2017-11-16

 伺服器負載暴漲以後

作者:田逸(sery@163.com) from:http://b.formyz.org/2011/1124/53.html
 
正在趕寫演講的ppt,突然聽到簡訊想起,沒理會,以為是廣告呢。剛放下念頭,簡訊接連不斷的響起來,不用想,準是哪個伺服器報警了。
 

開啟nagios監控見面,發現3個伺服器(3個伺服器處於同一個叢集下,業務為論壇,同時線上人數大概4萬人)的load過高,處於warning狀態

1、 先檢視訪問流量,通過對比,跟以前沒什麼差別。
2、 檢視每個伺服器的程式數和cpu使用情況,跟以前也沒什麼差別。

3、 檢視系統日誌,每個伺服器都有“TCP: Treason uncloaked! Peer 113.247.241.146:21345/80 shrinks window 2128147967:2128149427. Repaired.

4、 檢視php日誌,大量“[WARNING] fpm_request_check_timed_out(), line 158: child 25379, script `/mnt/html/bbs/forum.php` (pool default) execution timed out (120.306361 sec), terminating”。開啟論壇首頁,居然花了120多秒。我在php配置檔案裡設定的執行中斷時間是120秒,超過這個值則關閉該子程式。看來應該從這裡下手了。

 
先問問其他人,最近有沒有改程式,有沒有加外掛?答:“沒有”。我再仔細檢查了系統:

(1)       檢視有沒有檔案系統損壞而不能寫入

(2)       檢視分割槽是否滿(實際上滿了的話,有簡訊報警的)

(3)       檢視tcp連線狀態,還沒以前多呢,看來不是系統的問題

 
那麼,與之有關聯的還有資料庫、nfs檔案系統以及memchached。先檢查容易的,好!先檢查nfs,正常;再檢查memcached,正常。看來估計資料庫有什麼問題了。
 
登入資料庫,先檢視資料庫錯誤日誌,tail –f 一下,滾動輸出,看來問題找到了。輸入的內容主要有一下幾行:

[ERROR] Got error 134 when reading table `./uc_mumayi/cdb_uc_members`

[ERROR] Got error 134 when reading table `./uc_mumayi_net/cdb_uc_members`

[ERROR] /usr/local/mysql/libexec/mysqld: The table `pre_common_session` is full

接下來,從處理表滿開始,把它的行數值設定巨大一點,我設定的是1000萬,指令為:mysql>ALTER TABLE pre_common_session MAX_ROWS=10000000; 完畢後3web伺服器的負載馬上就下降了。從報錯資訊中,可以判斷有2個表可能損壞了。檢查一下,如果真壞了,就修復一下吧!

1)檢查第一個表:mysql> check table cdb_uc_notelist;輸出為+—————————+——-+———-+———————————————————–+
| Table                     | Op    | Msg_type | Msg_text                                                  |
+—————————+——-+———-+———————————————————–+

| uc_mumayi.cdb_uc_notelist | check | warning | 11 clients are using or haven`t closed the table properly |

| uc_mumayi.cdb_uc_notelist | check | warning | Size of datafile is: 260372       Should be: 259760       |

| uc_mumayi.cdb_uc_notelist | check | error    | Wrong bytesec: 101-114-110 at linkstart: 258412           |

| uc_mumayi.cdb_uc_notelist | check | error    | Corrupt                                                   |

+—————————+——-+———-+———————————————————–+
4 rows in set (0.04 sec)
真損壞了,修復一把:mysql> repair table cdb_uc_notelist; 輸出為+—————————+——–+———-+———————————————–+
| Table                     | Op     | Msg_type | Msg_text                                      |
+—————————+——–+———-+———————————————–+

| uc_mumayi.cdb_uc_notelist | repair | info     | Wrong bytesec: 101-114-110 at 258412; Skipped |

| uc_mumayi.cdb_uc_notelist | repair | warning | Number of rows changed from 5715 to 5742      |

| uc_mumayi.cdb_uc_notelist | repair | status   | OK                                            |

+—————————+——–+———-+———————————————–+
(2)修復第2個表,方法同上。
(3)再次檢查表狀態。
(4)讓管理員從後臺登入,檢視是否正常。


本文轉自sery51CTO部落格,原文連結: http://blog.51cto.com/sery/723220,如需轉載請自行聯絡原作者


相關文章