天天看點

伺服器當機原因排查思路

作為運維工程師來說,日常工作中肯定會遇到伺服器當機的問題,除了快速恢複業務之外,排查當機原因有時候也很麻煩,以下是自己對當機可能的原因及排查思路的一個簡單總結,比較正常,還不涉及系統參數配置的優化,僅供參考,後續有新的思路會再補充。

1.真假當機

  真當機

  伺服器确确實實當機了,導緻服務不可用,無法通路。

  假當機

  由于硬體資源暫時性地被消耗殆盡,因而無法對外部指令進行響應的現象,比如CPU和記憶體被占滿,表明有軟體正在大量的占用伺服器的記憶體和CPU,或者網站處于通路高峰期,帶寬資源跑滿等,這時隻需要等待一定的時間,待伺服器騰出更多的硬體資源即可恢複正常,如果長時間恢複不了,可能需要我們手動處理下,比如殺死程序。

  那麼,如何解決這個問題呢?第一,要從網站着手,看看是不是網站程式有不合理的地方,資料查詢,是否有死循環。盡可能的用html靜态網頁顯示,減輕資料庫的壓力。第二,更新伺服器硬體配置,例如:加大伺服器記憶體,更新伺服器CPU,加大伺服器帶寬,這樣就可以解決伺服器假當機的問題。

2.當機可能原因

  • 通路量過高,超出系統承載能力,包括正常的短暫性突增,或者異常通路,比如黑客攻擊等;
  • 伺服器配置過低,導緻即便通路量不算太高也超出了系統承載能力,需要提高配置;
  • 應用程式本身存在bug,比如死循環,消耗系統資源的邏輯導緻資源耗盡;
  • 某些系統參數配置不合理,比如fd個數或允許連接配接數過低等;
  • 多線程造成的死鎖現象,互相等待對方釋放資源;
  • 伺服器硬體故障,比如記憶體故障,需要更換;
  • 系統核心bug,比如軟死鎖等,需要更新核心;
  • 當然,也有可能是人為誤操作導緻的;

3.排查思路  

  首先判斷是真死還是假死,如果假死,那等一段時間或手動殺死程序即可,如果真死則需要進一步排查;

  檢視系統日志 /var/log/messages,分析當機時間前後的系統日志,看看是否有明顯的報錯,比如oom或核心bug;

  如果啟用了kdump,也可以檢視當機生成的crash檔案,預設/var/crash目錄下,注意生成時間是否對應;

  檢視監控資料,在當機前有沒有名額異常,比如CPU或記憶體突增,可能短暫突發上量超過系統承載能力;

  也有可能是硬體故障,可以看下/var/log/dmesg,或者登入遠控檢視系統日志,比如記憶體故障等,可能需要更換;

4.如何處理

  首先恢複業務、

  分析問題,排查原因、

  制定解決方案、

  完善監控,及時發現、

  複盤總結,避免再次發生,

  經驗積累,知識庫

5.沒有辦法的辦法

  萬能的重新開機

所有日志檔案

/var/log/messages — 包括整體系統資訊,其中也包含系統啟動期間的日志。此外,mail,cron,daemon,kern和auth等内容也記錄在var/log/messages日志中。
/var/log/dmesg — 包含核心緩沖資訊(kernel ring buffer)。在系統啟動時,會在螢幕上顯示許多與硬體有關的資訊。可以用dmesg檢視它們
/var/log/boot.log — 包含系統啟動時的日志。
/var/log/daemon.log — 包含各種系統背景守護程序日志資訊。
/var/log/dpkg.log – 包括安裝或dpkg指令清除軟體包的日志。
/var/log/kern.log – 包含核心産生的日志,有助于在定制核心時解決問題。
/var/log/lastlog — 記錄所有使用者的最近資訊。這不是一個ASCII檔案,是以需要用lastlog指令檢視内容。
/var/log/maillog /var/log/mail.log — 包含來着系統運作電子郵件伺服器的日志資訊。例如,sendmail日志資訊就全部送到這個檔案中。
/var/log/user.log — 記錄所有等級使用者資訊的日志
/var/log/Xorg.x.log — 來自X的日志資訊
/var/log/alternatives.log – 更新替代資訊都記錄在這個檔案中
/var/log/btmp – 記錄所有失敗登入資訊。使用last指令可以檢視btmp檔案。例如,”last -f /var/log/btmp | more“
/var/log/cups — 涉及所有列印資訊的日志
/var/log/anaconda.log — 在安裝Linux時,所有安裝資訊都儲存在這個檔案中
/var/log/yum.log — 包含使用yum安裝的軟體包資訊
/var/log/cron — 每當cron程序開始一個工作時,就會将相關資訊記錄在這個檔案中
/var/log/secure — 包含驗證和授權方面資訊。例如,sshd會将所有資訊記錄(其中包括失敗登入)在這裡
/var/log/wtmp或/var/log/utmp — 包含登入資訊。使用wtmp可以找出誰正在登陸進入系統,誰使用指令顯示這個檔案或資訊等
/var/log/faillog – 包含使用者登入失敗資訊。此外,錯誤登入指令也會記錄在本檔案中
/var/log/httpd/或/var/log/apache2 — 包含伺服器access_log和error_log資訊
/var/log/lighttpd/ — 包含light HTTPD的access_log和error_log
/var/log/mail/ – 這個子目錄包含郵件伺服器的額外日志
/var/log/prelink/ — 包含.so檔案被prelink修改的資訊
/var/log/audit/ — 包含被 Linux audit daemon儲存的資訊
/var/log/samba/ – 包含由samba存儲的資訊
/var/log/sa/ — 包含每日由sysstat軟體包收集的sar檔案
/var/log/sssd/ – 用于守護程序安全服務      

繼續閱讀