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





















