我是英俊瀟灑,技術過硬的網盾運維攻城獅龜哥。今天咱們來聊聊伺服器出故障了如何排查。
伺服器運行過程中難免會出現非人為因素的故障,遇事不要慌,沉著冷靜,找出問題所在,對症下藥的來解決。下面給大家分享常見的排查方法。
一、 咱們得搞清楚問題的前因後果
醫生診斷講究「望聞問切」然後對症下藥,伺服器故障也一樣啊。
首先啊,搞清楚伺服器故障的「發病」時間、症狀表現是什麼?
然後查監控平臺,查日誌,很多問題都是在日誌系統中暴露出來的,。
二、有哪些用戶訪問?
1. $last
2. $w
在沒有其他用戶幹活的時候,可以用這兩個命令查看都有誰在線,誰訪問過,捕捉現場嫌疑人。
三、執行過什麼命令?
1.$history
根據前面看到的誰登錄過,查看一下之前伺服器上執行過的命令,更新HISTTIMEFORMAT環境變量來顯示這些命令被執行的時間,不過不該看的咱還是不要看哦,侵犯別人隱私知道的太多容易被滅口~~
四、查看正在運行的進程
1.$pstree-a
2.$psaux
這都是查看現有進程的。psaux的結果比較雜亂,pstree-a的結果比較簡單明了,可以看到正在運行的進程及相關用戶。
五、監聽的網絡服務
1.$netstat-ntlp
2.$netstat-nulp
3.$netstat-nxlp
找到所有正在運行的服務,檢查它們是否應該運行。查看各個監聽埠。在netstat顯示的服務列表中的PID和psaux進程列表中的是一樣的。
如果伺服器上有好幾個Java或者Erlang什麼的進程在同時運行,能夠按PID分別找到每個進程就很重要了。
六、CPU和內存
1.$free-m
2.$uptime
3.$top
4.$htop
還有剩餘的內存和CPU嗎?伺服器是否正在內存和硬碟之間進行swap?
是否有某些CPU核負載過多了?
伺服器最大的負載來自什麼地方?平均負載是多少?
七、硬體
1.$lspci
2.$dmidecode
3.$ethtool
網卡是否設置好?是否正運行在半雙工狀態?速度是10MBps?有沒有TX/RX報錯?
找到RAID卡、CPU、空餘的內存插槽。根據這些情況可以大致了解硬體問題的來源和性能改進的辦法。
八、IO性能
1.$iostat-kx2
2.$vmstat210
3.$mpstat210
4.$dstat--top-io--top-bio
這些命令對於調試後端性能非常有用。
檢查磁碟使用量:伺服器硬碟是否已滿?
是否開啟了swap交換模式(si/so)?
確認CPU被誰佔用,dstat可以看到誰在進行IO:看看是不是MySQL或者PHP進程佔用了所有的系統資源?
九、掛載點和文件系統
1.$mount
2.$cat/etc/fstab
3.$vgs
4.$pvs
5.$lvs
6.$df-h
7.$lsof+D//*bewarenottokillyourbox*/
確認一共掛載了多少文件系統。
有沒有某個服務專用的文件系統?(比如MySQL?)
文件系統的掛載選項是什麼:noatime?default?有沒有文件系統被重新掛載為只讀模式了?
磁碟空間是否有剩餘?大文件被刪除後有沒有清空?
十、內核、中斷和網絡
1.$sysctl-a|grep...
2.$cat/proc/interrupts
3.$cat/proc/net/ip_conntrack/*maytakesometimeonbusyservers*/
4.$netstat
5.$ss-s
你的中斷請求是否是均衡地分配給CPU處理,還是會有某個CPU的核因為大量的網絡中斷請求或者RAID請求而過載了?
SWAP交換的設置是什麼?對於工作站來說swappinness設為60就很好,不過對於伺服器就太糟了:你最好永遠不要讓伺服器做SWAP交換,不然對磁碟的讀寫會鎖死SWAP進程。
conntrack_max是否設的足夠大,能應付你伺服器的流量?
在不同狀態下(TIME_WAIT,…)TCP連接時間的設置是怎樣的?
如果要顯示所有存在的連接,netstat會比較慢,你可以先用ss看一下總體情況。
你還可以看一下LinuxTCPtuning了解網絡性能調優的一些要點。
十一、系統日誌和內核消息
1.$dmesg
2.$less/var/log/messages
3.$less/var/log/secure
4.$less/var/log/auth
查看錯誤和警告消息,比如看看是不是很多關於連接數過多導致?
看看是否有硬體錯誤或文件系統錯誤?
分析是否能將這些錯誤事件和前面發現的疑點進行時間上的比對。如果你有多臺機器,看起來很不方便,可以事先把日誌存儲在系統筆記的雲日誌伺服器上,支持全文模糊查找,
十二、定時任務
1.$ls/etc/cron*+cat
2.$foruserin$(cat/etc/passwd|cut-f1-d:);docrontab-l-u$user;done
查看是不是用戶提交了隱藏的定時任務或者運行某個定時任務過於頻繁等?
根據以上找出了問題所在,對應維護相應板塊就可以了。此處證明了找一個24*7小時的運營商租用伺服器多麼重要,畢竟伺服器故障解決的越迅速,避免風險的係數就越高。還有什麼不清楚的,歡迎各位聯繫龜哥探討。