了解最新公司動(dòng)態(tài)及行業(yè)資訊
一、盡可能清楚問(wèn)題的前因后果
不要直接跳到服務(wù)器前面,你需要弄清楚對(duì)服務(wù)器的了解程度以及故障的具體情況。否則,你很可能會(huì)漫無(wú)目的。
必須澄清的問(wèn)題有:
·失敗的表現(xiàn)是什么?沒(méi)有反應(yīng)?錯(cuò)誤?
·故障是什么時(shí)候發(fā)現(xiàn)的?
·故障可重現(xiàn)嗎?
·有沒(méi)有規(guī)律性(比如一小時(shí)一次)
·整個(gè)平臺(tái)(代碼、服務(wù)器等)的最后一次更新是什么?
·受故障影響的具體用戶群有哪些(登錄、注銷、在某個(gè)區(qū)域……)?
·能否找到基礎(chǔ)設(shè)施(物理的、邏輯的)文檔?
·有監(jiān)控平臺(tái)嗎? (例如服務(wù)器運(yùn)維技術(shù),Munin、、、、New Relic……任何東西)
·有日志可以查看嗎? (例如,...)
最后兩個(gè)是最方便的信息來(lái)源,但不要抱太大希望,基本上沒(méi)有。只能繼續(xù)探索。
二、誰(shuí)在那兒?
$ w
$ last
使用這兩個(gè)命令可以查看誰(shuí)在線以及訪問(wèn)了哪些用戶。這不是關(guān)鍵步驟,但最好不要在其他用戶工作時(shí)調(diào)試系統(tǒng)。俗話說(shuō),一山不能容二虎。 (沒(méi)有廚師。)
三、之前發(fā)生了什么?
$ history
查看以前在服務(wù)器上執(zhí)行的命令。看看總是對(duì)的服務(wù)器運(yùn)維技術(shù),加上之前誰(shuí)登錄過(guò)的信息,應(yīng)該很有用。此外,作為管理員,請(qǐng)注意不要利用自己的權(quán)限侵犯他人的隱私。
在此提醒一下,稍后您可能需要更新環(huán)境變量以顯示這些命令的執(zhí)行時(shí)間。是的,否則,看到一堆不知道何時(shí)執(zhí)行的命令也會(huì)讓人抓狂。
四、現(xiàn)在正在運(yùn)行什么進(jìn)程?
$ pstree -a
$ ps aux
這都是關(guān)于查看現(xiàn)有流程的。 ps aux的結(jié)果比較亂,-a的結(jié)果比較簡(jiǎn)單明了,可以看到運(yùn)行的進(jìn)程和相關(guān)的用戶。
五、監(jiān)控網(wǎng)絡(luò)服務(wù)
$ netstat -ntlp
$ netstat -nulp
$ netstat -nxlp
我通常分別運(yùn)行這三個(gè)命令,并且不希望一次看到一大堆所有服務(wù)都列出來(lái)。 -nalp 也很好。但我永遠(yuǎn)不會(huì)使用選項(xiàng)(我的拙見(jiàn):IP 地址似乎更方便)。
查找所有正在運(yùn)行的服務(wù)并檢查它們是否應(yīng)該運(yùn)行。查看每個(gè)監(jiān)聽(tīng)端口。顯示的服務(wù)列表中的PID與ps aux進(jìn)程列表中的PID相同。
如果服務(wù)器上同時(shí)運(yùn)行多個(gè) Java 或其他進(jìn)程,那么能夠通過(guò) PID 單獨(dú)找到每個(gè)進(jìn)程非常重要。
一般來(lái)說(shuō),我們建議每臺(tái)服務(wù)器運(yùn)行較少的服務(wù),必要時(shí)添加更多服務(wù)器。如果您看到服務(wù)器上打開(kāi)了 30 或 40 個(gè)偵聽(tīng)端口,請(qǐng)做一個(gè)記錄,有空時(shí)清理它,然后重新組織服務(wù)器。
六、CPU 和內(nèi)存
$ 自由 -m
$
$頂
$htop
注意以下幾點(diǎn):
·有空閑內(nèi)存嗎?服務(wù)器在內(nèi)存和硬盤之間交換嗎?
·還有CPU嗎?服務(wù)器有多少個(gè)核心?某些 CPU 內(nèi)核是否過(guò)載?
·最大的服務(wù)器負(fù)載來(lái)自哪里?平均負(fù)載是多少?
七、硬件
$ lspci
$
$
還有很多服務(wù)器還是裸機(jī)的,大家可以看看:
·找到RAID卡(帶BBU備用電池?)、CPU、空閑內(nèi)存插槽。根據(jù)這些情況,您可以大致了解硬件問(wèn)題的根源以及提高性能的方法。
·網(wǎng)卡設(shè)置好了嗎?它是否以半雙工運(yùn)行?速度是多少?是否有任何 TX/RX 錯(cuò)誤?
八、IO 性能
$ -kx 2
$2 10
$2 10
$ dstat --top-io --top-bio
這些命令對(duì)于調(diào)試后端性能很有用。
·檢查磁盤使用情況:服務(wù)器硬盤是否已滿?
·交換模式是否啟用(si/so)?
·誰(shuí)占用CPU:系統(tǒng)進(jìn)程?用戶進(jìn)程?虛擬機(jī)?
·dstat 是我的最愛(ài)。用它來(lái)看看誰(shuí)在做 IO:MySQL 是不是在吃掉所有的系統(tǒng)資源?還是你的 PHP 進(jìn)程?
九、掛載點(diǎn)和文件系統(tǒng)
$mount
$ cat /etc/fstab
$vgs
$pvs
$lvs
$ df -h
$ lsof +D / /* 不殺你的盒子*/
·總共掛載了多少個(gè)文件系統(tǒng)?
·服務(wù)是否有專用的文件系統(tǒng)? (例如 MySQL?)
·文件系統(tǒng)的掛載選項(xiàng)有哪些: ? 是否有任何文件系統(tǒng)被重新掛載為只讀?
·還有磁盤空間嗎?
·大文件是否被刪除但未清空?
·如果磁盤空間有問(wèn)題,你還有空間擴(kuò)展分區(qū)嗎?
十、內(nèi)核、中斷和網(wǎng)絡(luò)
$ -a | grep ...
$ cat /proc/
$ cat /proc/net/ /* 忙時(shí)可能會(huì)計(jì)時(shí) */
$
$ ss -s
· 你的中斷請(qǐng)求是否平均分配給 CPU 處理,或者是否有 CPU 內(nèi)核被大量的網(wǎng)絡(luò)中斷請(qǐng)求或 RAID 請(qǐng)求超載?
·SWAP兌換有哪些設(shè)置? 60 對(duì)工作站來(lái)說(shuō)很好,但對(duì)服務(wù)器來(lái)說(shuō)很糟糕:你最好永遠(yuǎn)不要讓服務(wù)器做 SWAP,否則對(duì)磁盤的讀寫(xiě)會(huì)鎖定 SWAP 進(jìn)程。
·它是否足以處理您的服務(wù)器的流量?
·不同狀態(tài)下的TCP連接時(shí)間設(shè)置是什么(,...)?
·如果要顯示所有現(xiàn)有的連接,會(huì)比較慢??梢韵扔胹s看大局。
您還可以查看 Linux TCP,了解有關(guān)網(wǎng)絡(luò)性能調(diào)整的一些要點(diǎn)。
十個(gè)一、系統(tǒng)日志和內(nèi)核消息
$dmesg
$ 少 /var/log/
$ 少 /var/log/
$ 少 /var/log/auth
·檢查錯(cuò)誤和警告信息,例如是否存在過(guò)多的連接數(shù)?
·看看有沒(méi)有硬件錯(cuò)誤或者文件系統(tǒng)錯(cuò)誤?
·分析這些錯(cuò)誤事件能否及時(shí)與之前發(fā)現(xiàn)的可疑點(diǎn)進(jìn)行比較。
十個(gè)二、計(jì)劃任務(wù)
$ ls /etc/cron* + cat
$ 中的用戶 $(cat /etc/ | cut -f1-d:);做-l -u $用戶;完成
·是否有運(yùn)行過(guò)于頻繁的計(jì)劃任務(wù)?
·是否有用戶提交了隱藏的定時(shí)任務(wù)?
·發(fā)生故障時(shí),是否有恰好執(zhí)行的備份任務(wù)?
十個(gè)三、應(yīng)用系統(tǒng)日志
這里要分析的東西比較多,但作為運(yùn)維人,恐怕沒(méi)有時(shí)間仔細(xì)研究。注意明顯的問(wèn)題,比如在典型的LAMP(Linux++Mysql+Perl)應(yīng)用環(huán)境中:
·&Nginx;查找訪問(wèn)和錯(cuò)誤日??志,直接查找5xx錯(cuò)誤,然后看看有沒(méi)有錯(cuò)誤。
·MySQL;在 mysql.log 中查找錯(cuò)誤消息,查看是否有任何結(jié)構(gòu)損壞的表,是否正在運(yùn)行修復(fù)過(guò)程,是否存在磁盤/索引/查詢問(wèn)題。
·PHP-FPM;如果設(shè)置了 php-slow 日志,則直接查找錯(cuò)誤消息(php、mysql、...)。如果沒(méi)有設(shè)置,請(qǐng)快速設(shè)置。
·;在 和 中,檢查命中/未命中率。配置中是否缺少任何允許最終用戶直接攻擊您的后端的規(guī)則?
·HA-Proxy;后臺(tái)狀態(tài)如何?健康檢查是否成功?前端或后端隊(duì)列大小是否已達(dá)到最大值?
結(jié)論
這 5 分鐘后,您應(yīng)該知道以下內(nèi)容:
·服務(wù)器上正在運(yùn)行什么?
·此故障似乎與 IO/硬件/網(wǎng)絡(luò)或系統(tǒng)配置(有問(wèn)題的代碼、系統(tǒng)內(nèi)核調(diào)整……)有關(guān)。
·這個(gè)故障是否有一些你熟悉的特征?例如,數(shù)據(jù)庫(kù)索引使用不當(dāng),或后臺(tái)進(jìn)程過(guò)多。
您甚至可以找到失敗的真正根源。就算你還沒(méi)有找到,在你弄清楚上面的情況之后,你現(xiàn)在已經(jīng)具備了深入挖掘的條件了。繼續(xù)努力!
24小時(shí)免費(fèi)咨詢
請(qǐng)輸入您的聯(lián)系電話,座機(jī)請(qǐng)加區(qū)號(hào)