|
當(dāng)你登錄到一臺(tái)存在性能問(wèn)題的Linux服務(wù)器上時(shí),在頭一分鐘,你會(huì)檢查什么? 我們看看Netflix的性能工程師是怎么做的。 Netflix大量使用EC2 Linux服務(wù)器,很多時(shí)候是用一些較為高層的工具做云或?qū)嵗龑哟蔚姆治?。不過(guò)有時(shí)仍然需要登錄到某個(gè)實(shí)例上,運(yùn)行一些標(biāo)準(zhǔn)的Linux性能工具。 在最開(kāi)始的一分鐘內(nèi),可以先利用手頭的標(biāo)準(zhǔn)Linux工具大致了解性能狀況。借助如下10條命令(有些命令需要安裝sysstat包),了解系統(tǒng)資源使用狀況和正在運(yùn)行的進(jìn)程。先檢查錯(cuò)誤(errors)和飽和度(saturation),再檢查資源利用率(resource utilization)。飽和度指的是負(fù)載已經(jīng)超過(guò)處理能力,像請(qǐng)求隊(duì)列的長(zhǎng)度,等待時(shí)間等。
這里要提一下定位性能瓶頸的USE方法。在Brendan Gregg的《System Performance: Enterprise and the Cloud》(中譯本:《性能之巔:洞悉系統(tǒng)、企業(yè)與云計(jì)算》)一書中有具體的描述。 如果手頭有這本書的中譯本,可以看一下36頁(yè):
下面具體看一下這10條命令。
快速查看平均負(fù)載(任務(wù)對(duì)CPU資源的需求)。輸出中的“l(fā)oad average:”后面的三個(gè)數(shù)字,是系統(tǒng)在1分鐘、5分鐘和15分鐘內(nèi)的平均負(fù)載。表示負(fù)載隨時(shí)間的變化情況。 它給出的只是一個(gè)較為高層的情況,往往需要借助其他工具進(jìn)一步確認(rèn)性能問(wèn)題,有時(shí)候需要通過(guò)其他一些指標(biāo)來(lái)了解CPU負(fù)載,例如vmstat或mpstat。 2. dmesg | tail 查看最后10條系統(tǒng)消息。查找可能會(huì)引發(fā)性能問(wèn)題的錯(cuò)誤。千萬(wàn)不要漏掉這一步。 3. vmstat 1 統(tǒng)計(jì)虛擬內(nèi)存信息。參數(shù)1指的是打印1秒內(nèi)的統(tǒng)計(jì)信息。 要檢查的列:
將用戶態(tài)時(shí)間和系統(tǒng)態(tài)時(shí)間相加,可以判斷CPU是否忙碌。如果一直有等待I/O,表明存在磁盤瓶頸。因?yàn)槿蝿?wù)阻塞等待磁盤I/O,此時(shí)CPU是空閑的??梢詫⒌却?/span>I/O看作另一種形式的CPU空閑。 I/O處理一定會(huì)消耗系統(tǒng)態(tài)時(shí)間。如果系統(tǒng)時(shí)間平均占比很高,比如說(shuō)超過(guò)20%,或許可以深入研究一下:可能是內(nèi)核處理I/O的效率不高。 4. mpstat -P ALL 1 打印每個(gè)CPU的狀況??梢詸z查各CPU的負(fù)載是否均衡。比如,如果一個(gè)CPU很熱,可能是單線程應(yīng)用造成的。 5. pidstat 1 pidstat按進(jìn)程打印CPU的使用情況。循環(huán)輸出活動(dòng)進(jìn)程的信息??捎糜谟^察模式隨時(shí)間的變化情況。用戶也可以把觀察到的信息記錄下來(lái),以供分析研究。 像圖中的例子,可以看到有2個(gè)Java進(jìn)程消耗了大部分CPU時(shí)間。“%CPU”這一列是所有CPU的整體情況,“1591%”這個(gè)值表明這2個(gè)Java進(jìn)程幾乎占用了16個(gè)CPU。 6. iostat -xz 1 這是了解塊設(shè)備的一個(gè)極佳工具,能看到實(shí)際負(fù)載和性能信息。
如果存儲(chǔ)設(shè)備是后面有多塊磁盤支撐的邏輯磁盤,即使設(shè)備使用率是100%,后端磁盤也可能遠(yuǎn)沒(méi)有飽和,而是還能處理更多工作。 7. free -m 主要看最右邊的兩列:
我們只需要檢查這兩個(gè)值,如果它們接近0,則會(huì)導(dǎo)致更高的磁盤I/O(可以使用iostat確認(rèn)),性能更糟。圖中的例子,這個(gè)狀況看上去還不錯(cuò)。 8. sar -n DEV 1 使用該工具檢查網(wǎng)絡(luò)接口的吞吐量,以rxkB/s和txkB/s為手段測(cè)量負(fù)載。 9. sar -n TCP,ETCP 1 這是一些關(guān)鍵TCP指標(biāo)的總結(jié)。其中包括:
active和passive連接數(shù)通常用于粗略地測(cè)量服務(wù)器負(fù)載。方便起見(jiàn),可以把a(bǔ)ctive看作向外的連接,把passive看作向內(nèi)的連接;不過(guò)也有不嚴(yán)格之處,比如考慮從localhost到localhost的連接。 重傳數(shù)是網(wǎng)絡(luò)或服務(wù)器問(wèn)題的一個(gè)信號(hào):可能是網(wǎng)絡(luò)不可靠;也可能是服務(wù)器過(guò)載和丟包。像圖中的例子,每秒只有一個(gè)新的TCP連接。 10. top top命令包含很多前面檢查過(guò)的指標(biāo)??梢杂脗€(gè)命令來(lái)檢查是不是有指標(biāo)和之前命令的輸出差距很大。 top命令有個(gè)缺點(diǎn),很難看出某個(gè)指標(biāo)隨時(shí)間的變化模式,這種情況下用像vmstat和pidstat這樣的命令可能更清楚,它們能提供滾動(dòng)輸出。間歇性問(wèn)題的一些跡象,如果不能足夠快地暫停輸出(Ctrl-S暫停,Ctrl-Q繼續(xù)),可能會(huì)錯(cuò)過(guò)。 后續(xù)分析 可以借助更多命令繼續(xù)深入挖掘。重點(diǎn)推薦Brendan Gregg的《性能之巔:洞悉系統(tǒng)、企業(yè)與云計(jì)算》)一書。 本文根據(jù)Netflix的技術(shù)博客編譯整理,結(jié)合自己讀書的一些心得寫就。更多細(xì)節(jié),可以點(diǎn)擊閱讀原文,查看相關(guān)博客,或者閱讀《性能之巔》一書。 |
|
|
來(lái)自: 昵稱28748685 > 《待分類》