干貨:如何監(jiān)控服務(wù)器性能實(shí)踐篇
監(jiān)控服務(wù)器非常重要。無(wú)論是在部署或調(diào)試生產(chǎn)服務(wù)器時(shí),及時(shí)在測(cè)試環(huán)境中發(fā)現(xiàn)問(wèn)題。這些需要管理員訪問(wèn)服務(wù)器上的內(nèi)容,以便能夠辨識(shí)出錯(cuò)的地方。
在更早的時(shí)候,監(jiān)視服務(wù)器是一個(gè)非常困難的過(guò)程,依賴(lài)于人來(lái)靠手工檢查問(wèn)題,包括有哪些人登錄到服務(wù)器,打開(kāi)日志,運(yùn)行單個(gè)命令,查看上述任何一個(gè)的輸出是否產(chǎn)生預(yù)期的結(jié)果。幸運(yùn)的是,工具發(fā)展到今天,讓這個(gè)過(guò)程變得簡(jiǎn)便和集中化,但我們?nèi)匀恍枰宄枰占男┓?wù)器的信息。
雖然可以直接潛入并檢查服務(wù)器的每次故障,但為了自己的時(shí)間價(jià)值與故障排除能力,退后一步制定希望獲得的信息。以下是一些較重要的匯總:
了解應(yīng)用程序
在設(shè)置應(yīng)用程序時(shí),應(yīng)該確保對(duì)所期望的行為有一個(gè)非常好的了解。具體來(lái)說(shuō),當(dāng)內(nèi)存,CPU,磁盤(pán)或其他系統(tǒng)資源變少時(shí),你應(yīng)該非常清楚應(yīng)用程序的執(zhí)行方式。它會(huì)變慢嗎?它會(huì)變得遲鈍嗎?它會(huì)不加載嗎?這些行為的閾值是什么?“blip”(如CPU峰值)和真正的問(wèn)題之間有什么區(qū)別?
這些都不是容易回答的問(wèn)題,但是我們需要知道期望什么以及防止過(guò)敏的警報(bào)系統(tǒng)。
迎接變化的需求
隨著時(shí)間的推移,我們的需求會(huì)發(fā)生變化,可能會(huì)實(shí)現(xiàn)新功能,刪除無(wú)用功能或其他可能會(huì)改變應(yīng)用程序預(yù)期行為的轉(zhuǎn)換等。當(dāng)發(fā)生這種情況時(shí),您需要重新評(píng)估應(yīng)用程序在服務(wù)器上運(yùn)行的方式,以便了解使用的資源以及在這些資源減少時(shí)可以預(yù)測(cè)的處理和行為。
貼著地面跑
當(dāng)我們監(jiān)控*nix服務(wù)器時(shí),通常會(huì)查看以下之內(nèi)容:
CPU使用率:檢查CPU使用情況,查看正在處理器使用的百分比。根據(jù)具體需求,你可能需要了解CPU總體使用情況以及按流程或用戶(hù)劃分的細(xì)節(jié),查看流程和用戶(hù)的額外顆粒度,在問(wèn)題出現(xiàn)時(shí)更容易進(jìn)行故障排除。
內(nèi)存使用情況:總共用了多少內(nèi)存以及單個(gè)進(jìn)程和用戶(hù)進(jìn)和。根據(jù)需要,可以按百分比和/或GB/MB監(jiān)控內(nèi)存之使用情況。
磁盤(pán)使用情況:使用了多少磁盤(pán)空間。與內(nèi)存使用情況類(lèi)似,可以按百分比或空間來(lái)監(jiān)控磁盤(pán)使用情況。還應(yīng)該跟蹤inode的使用情況,Inode用于存儲(chǔ)*ix系統(tǒng)中文件系統(tǒng)對(duì)象的信息。耗盡inode不常見(jiàn),但還是要檢查一下,如果你碰巧知道服務(wù)器上運(yùn)行的應(yīng)用程序往往有很多小文件,就像一些CI/CD工具那樣。
頁(yè)面錯(cuò)誤:簡(jiǎn)單地說(shuō),頁(yè)面是一塊虛擬內(nèi)存。如果您正在監(jiān)視由云服務(wù)提供商(例如AWS,GCP,Azure,DigitalOcean或Linode,Aliyun,TengCent Cloud)托管的服務(wù)器,那么服務(wù)器正在使用分頁(yè)系統(tǒng)將服務(wù)器實(shí)例的虛擬內(nèi)存映射到物理內(nèi)存來(lái)托管它的硬件。頁(yè)面錯(cuò)誤本質(zhì)上是當(dāng)操作系統(tǒng)嘗試從物理內(nèi)存向虛擬內(nèi)存加載某些內(nèi)容時(shí),不存在與該對(duì)象關(guān)聯(lián)的物理內(nèi)存地址時(shí)發(fā)生的情況。雖然操作系統(tǒng)有一個(gè)內(nèi)置的頁(yè)面錯(cuò)誤處理程序來(lái)管理少量的頁(yè)面錯(cuò)誤并不少見(jiàn),但是如果你經(jīng)常看到頁(yè)面錯(cuò)誤,該是開(kāi)始尋找更深層次問(wèn)題的時(shí)候了。
正常運(yùn)行時(shí)間:對(duì)于虛擬服務(wù)器,正常運(yùn)行時(shí)間是服務(wù)器運(yùn)行的時(shí)間。監(jiān)控主要是為了查看服務(wù)器是否經(jīng)歷了意外重啟。
網(wǎng)絡(luò)活動(dòng):監(jiān)控網(wǎng)絡(luò)流量需要哪些精確度,取決于服務(wù)器托管的內(nèi)容。在通常情況下,即使運(yùn)行靜態(tài)站點(diǎn)但未主動(dòng)訪問(wèn)的服務(wù)器也會(huì)看到運(yùn)行在其上的其他進(jìn)程的I/O,服務(wù)器網(wǎng)絡(luò)不應(yīng)該降到0。
Swap使用:Swap交換空間是保留的磁盤(pán)空間,是在可用內(nèi)存不足時(shí)補(bǔ)充內(nèi)存使用量。你的系統(tǒng)如何積極地使用交換空間取決于如何在1(低)到100(高)的范圍內(nèi)配置它的“swappiness”。如果要在系統(tǒng)內(nèi)出現(xiàn)內(nèi)存問(wèn)題時(shí)允許進(jìn)行一些交換而不完全禁用它(為0),使用10或更小的值是一個(gè)常態(tài)。當(dāng)查看“交換空間使用情況”時(shí),我們通常會(huì)看交換空間使用情況是否顯著上升。如果真是如此,需要查內(nèi)存和其他資源,看看自己是否可以挖掘到原因。
使用命令行
經(jīng)常在管理服務(wù)器時(shí),除了使用的任何監(jiān)視警報(bào)工具之外,更多時(shí)候要使用命令行??紤]到這一點(diǎn),我們總結(jié)出一些命令行工具,可以使用這些來(lái)查看剛才說(shuō)的一些信息。需要注意的是,并非所有這些命令都安裝在所有Linux發(fā)行版中,你可能需要使用軟件包安裝程序或源代碼來(lái)安裝,具體取決于你用的Linux發(fā)行版本。
top - 一個(gè)很方便的工具,允許我們查看正常運(yùn)行時(shí)間,內(nèi)存使用情況,CPU使用情況以及交換空間等內(nèi)容。我們還可以查看其它信息:包括其它正在運(yùn)行的進(jìn)程,用于運(yùn)行該進(jìn)程的命令等。通過(guò)按q鍵退出top命令行。
htop - htop 是Linux系統(tǒng)中的一個(gè)互動(dòng)的進(jìn)程查看器,一個(gè)文本模式的應(yīng)用程序(在控制臺(tái)或者X終端中),需要ncurses。與傳統(tǒng)的top相比,htop更加人性化。它可讓用戶(hù)交互式操作,支持顏色主題,可橫向或縱向滾動(dòng)瀏覽進(jìn)程列表,并支持鼠標(biāo)操作。
與top相比,htop有如下的優(yōu)點(diǎn):
可以橫向或縱向滾動(dòng)瀏覽進(jìn)程列表,以便看到所有的進(jìn)程和完整的命令行。
在啟動(dòng)上,比top 更快。
殺進(jìn)程時(shí)不需要輸入進(jìn)程號(hào)。
htop 支持鼠標(biāo)操作。
top 有那么一點(diǎn)老了。。。與top類(lèi)似,可以通過(guò)按q鍵退出。
tcpdump - 這是一個(gè)監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)包的強(qiáng)大工具。例如,我們可以使用它來(lái)偵聽(tīng)服務(wù)器實(shí)例上的所有網(wǎng)絡(luò)流量,或限制為僅偵聽(tīng)來(lái)自特定源和/或目標(biāo)端口的流量??梢允褂胏trl + C退出。
netstat - 允許我們查看服務(wù)器上的網(wǎng)絡(luò)連接的內(nèi)容和方式,包括將表信息路由為T(mén)CP/UDP連接及其進(jìn)程。后者的常見(jiàn)組合是-tlnpu。如果你需要,還可以使用-c運(yùn)行命令以進(jìn)行連續(xù)監(jiān)控。
nmon - a.k.a. Nigel的監(jiān)控器,允許我們查看有關(guān)服務(wù)器的更詳細(xì)的信息。與htop命令類(lèi)似,nmon也是交互式的,因此需要通過(guò)一系列菜單來(lái)查看有關(guān)CPU處理器,磁盤(pán)等的信息。退出時(shí),請(qǐng)使用q或ctrl + C。
uptime - 查看服務(wù)器運(yùn)行時(shí)間的簡(jiǎn)便方法。如果你希望查看持續(xù)時(shí)間的正常運(yùn)行時(shí)間而不是服務(wù)器啟動(dòng)的時(shí)間戳,請(qǐng)使用 -pretty參數(shù)。
/proc/meminfo - 可以使用自己喜歡的編輯器來(lái)查看此文件,能夠深入了解當(dāng)前的活動(dòng)/可用內(nèi)存的使用情況。
free - 要查看沒(méi)有進(jìn)程信息的空閑與已用內(nèi)存,請(qǐng)使用free命令。默認(rèn)情況下,這些值以字節(jié)為單位,如果你希望以兆字節(jié)或千兆字節(jié)的形式查看輸出,建議附加-h 參數(shù)。
df - 允許管理員查看系統(tǒng)上安裝的所有卷的總磁盤(pán)使用情況。默認(rèn)為1K塊大小,建議附加-h以查看兆字節(jié)和/或千兆字節(jié)的輸出結(jié)果 df -h。
du - 以指定目錄中的所有對(duì)象(文件,目錄)遞歸打印文件系統(tǒng)對(duì)象的磁盤(pán)使用情況。要注意:如果沒(méi)有指定目錄,則使用root根目錄(/),結(jié)果很快超過(guò)你的終端!如果只想查看目錄中項(xiàng)目使用了多少磁盤(pán),請(qǐng)使用-sh。
再提示大家留意,根據(jù)不同的Linux發(fā)行版,你可能需要在軟件包管理器中手動(dòng)安裝一些工具。