0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

馬哥Linux運(yùn)維 ? 2018-01-27 09:22 ? 次閱讀

60,000 毫秒內(nèi)對(duì) Linux 的性能診斷

當(dāng)你為了解決一個(gè)性能問題登錄到一臺(tái) Linux 服務(wù)器:在第一分鐘你應(yīng)該檢查些什么?

在 Netflix,我們有一個(gè)巨大的 EC2 Linux 云,以及大量的性能分析工具來監(jiān)控和診斷其性能。其中包括用于云監(jiān)控的 Atlas,以及用于按需實(shí)例分析的 Vector。雖然這些工具可以幫助我們解決大多數(shù)問題,但我們有時(shí)仍需要登錄到一個(gè)服務(wù)器實(shí)例,并運(yùn)行一些標(biāo)準(zhǔn) Linux 性能工具。

在這篇文章中,Netflix Performance Engineering 團(tuán)隊(duì)將會(huì)向你講解在命令行中進(jìn)行一次最佳的性能分析的前 60 秒要做的事,使用的是你應(yīng)該可以得到的標(biāo)準(zhǔn) Linux 工具。

前六十秒:總覽

通過運(yùn)行下面十個(gè)命令,你就能在六十秒內(nèi)粗略地了解系統(tǒng)正在運(yùn)行的進(jìn)程及資源使用情況。通過查看這些命令輸出的錯(cuò)誤信息和資源飽和度(它們都很容易看懂),你可以接下來對(duì)資源進(jìn)行優(yōu)化。飽和是指某個(gè)資源的負(fù)載超出了其能夠處理的限度。一旦出現(xiàn)飽和,它通常會(huì)在請(qǐng)求隊(duì)列的長(zhǎng)度或等待時(shí)間上暴露出來。

uptime

dmesg | tail

vmstat 1

mpstat -P ALL 1

pidstat 1

iostat -xz 1

free -m

sar -n DEV 1

sar -n TCP,ETCP 1

top

其中某些命令需要預(yù)先安裝 sysstat 軟件包。這些命令展示出來的信息能夠幫你實(shí)施 USE 方法(一種用于定位性能瓶頸的方法),比如檢查各種資源(如 CPU、內(nèi)存、磁盤等)的使用率、飽和度和錯(cuò)誤信息。另外在定位問題的過程中,你可以通過使用這些命令來排除某些導(dǎo)致問題的可能性,幫助你縮小檢查范圍,為下一步檢查指明方向。

下面的章節(jié)將以在一個(gè)生產(chǎn)環(huán)境上執(zhí)行這些命令作為例子,簡(jiǎn)單介紹這些命令。若想詳細(xì)了解這些工具的使用方法,請(qǐng)參考它們的 man 文檔。

1. uptime

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

這是一種用來快速查看系統(tǒng)平均負(fù)載的方法,它表明了系統(tǒng)中有多少要運(yùn)行的任務(wù)(進(jìn)程)。在 Linux 系統(tǒng)中,這些數(shù)字包含了需要在 CPU 中運(yùn)行的進(jìn)程以及正在等待 I/O(通常是磁盤 I/O)的進(jìn)程。它僅僅是對(duì)系統(tǒng)負(fù)載的一個(gè)粗略展示,稍微看下即可。你還需要其他工具來進(jìn)一步了解具體情況。

這三個(gè)數(shù)字展示的是一分鐘、五分鐘和十五分鐘內(nèi)系統(tǒng)的負(fù)載總量平均值按照指數(shù)比例壓縮得到的結(jié)果。從中我們可以看到系統(tǒng)的負(fù)載是如何隨時(shí)間變化的。比方你在檢查一個(gè)問題,然后看到 1 分鐘對(duì)應(yīng)的值遠(yuǎn)小于 15 分鐘的值,那么可能說明這個(gè)問題已經(jīng)過去了,你沒能及時(shí)觀察到。

在上面這個(gè)例子中,系統(tǒng)負(fù)載在隨著時(shí)間增加,因?yàn)樽罱环昼姷呢?fù)載值超過了 30,而 15 分鐘的平均負(fù)載則只有 19。這樣顯著的差距包含了很多含義,比方 CPU 負(fù)載。若要進(jìn)一步確認(rèn)的話,則要運(yùn)行 vmstat 或 mpstat 命令,這兩個(gè)命令請(qǐng)參考后面的第 3 和第 4 章節(jié)。

2. dmesg | tail

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

這條命令顯式了最近的 10 條系統(tǒng)消息,如果它們存在的話。查找能夠?qū)е滦阅軉栴}的錯(cuò)誤。上面的例子包含了 oom-killer,以及 TCP 丟棄一個(gè)請(qǐng)求。

千萬不要錯(cuò)過這一步!dmesg 命令永遠(yuǎn)值得一試。

3. vmstat 1

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

vmstat(8) 是虛擬內(nèi)存統(tǒng)計(jì)的簡(jiǎn)稱,其是一個(gè)常用工具(幾十年前為了 BSD 所創(chuàng)建)。其在每行打印一條關(guān)鍵的服務(wù)器的統(tǒng)計(jì)摘要。

vmstat 命令指定一個(gè)參數(shù) 1 運(yùn)行,來打印每一秒的統(tǒng)計(jì)摘要。(這個(gè)版本的 vmstat)輸出的第一行的那些列,顯式的是開機(jī)以來的平均值,而不是前一秒的值?,F(xiàn)在,我們跳過第一行,除非你想要了解并記住每一列。

檢查這些列:

r:CPU 中正在運(yùn)行和等待運(yùn)行的進(jìn)程的數(shù)量。其提供了一個(gè)比平均負(fù)載更好的信號(hào)來確定 CPU 是否飽和,因?yàn)槠洳话?I/O。解釋:“r”的值大于了 CPU 的數(shù)量就表示已經(jīng)飽和了。

free:以 kb 為單位顯式的空閑內(nèi)存。如果數(shù)字位數(shù)很多,說明你有足夠的空閑內(nèi)存?!癴ree -m” 命令,是下面的第七個(gè)命令,其可以更好的說明空閑內(nèi)存的狀態(tài)。

si, so:Swap-ins 和 swap-outs。如果它們不是零,則代表你的內(nèi)存不足了。

us, sy, id, wa, st:這些都是平均了所有 CPU 的 CPU 分解時(shí)間。它們分別是用戶時(shí)間(user)、系統(tǒng)時(shí)間(內(nèi)核)(system)、空閑(idle)、等待 I/O(wait)、以及占用時(shí)間(stolen)(被其他訪客,或使用 Xen,訪客自己獨(dú)立的驅(qū)動(dòng)域)。

CPU 分解時(shí)間將會(huì)通過用戶時(shí)間加系統(tǒng)時(shí)間確認(rèn) CPU 是否為忙碌狀態(tài)。等待 I/O 的時(shí)間一直不變則表明了一個(gè)磁盤瓶頸;這就是 CPU 的閑置,因?yàn)槿蝿?wù)都阻塞在等待掛起磁盤 I/O 上了。你可以把等待 I/O 當(dāng)成是 CPU 閑置的另一種形式,其給出了為什么 CPU 閑置的一個(gè)線索。

對(duì)于 I/O 處理來說,系統(tǒng)時(shí)間是很重要的。一個(gè)高于 20% 的平均系統(tǒng)時(shí)間,可以值得進(jìn)一步的探討:也許內(nèi)核在處理 I/O 時(shí)效率太低了。

在上面的例子中,CPU 時(shí)間幾乎完全花在了用戶級(jí),表明應(yīng)用程序占用了太多 CPU 時(shí)間。而 CPU 的平均使用率也在 90% 以上。這不一定是一個(gè)問題;檢查一下“r”列中的飽和度。

4. mpstat -P ALL 1

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

這個(gè)命令打印每個(gè) CPU 的 CPU 分解時(shí)間,其可用于對(duì)一個(gè)不均衡的使用情況進(jìn)行檢查。一個(gè)單獨(dú) CPU 很忙碌則代表了正在運(yùn)行一個(gè)單線程的應(yīng)用程序。

5. pidstat 1

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

pidstat 命令有點(diǎn)像 top 命令對(duì)每個(gè)進(jìn)程的統(tǒng)計(jì)摘要,但循環(huán)打印一個(gè)滾動(dòng)的統(tǒng)計(jì)摘要來代替 top 的刷屏。其可用于實(shí)時(shí)查看,同時(shí)也可將你所看到的東西(復(fù)制粘貼)到你的調(diào)查記錄中。

上面的例子表明兩個(gè) Java 進(jìn)程正在消耗 CPU。%CPU 這列是所有 CPU 合計(jì)的;1591% 表示這個(gè) Java 進(jìn)程消耗了將近 16 個(gè) CPU。

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

這是用于查看塊設(shè)備(磁盤)情況的一個(gè)很棒的工具,無論是對(duì)工作負(fù)載還是性能表現(xiàn)來說。查看個(gè)列:

r/s, w/s, rkB/s, wkB/s:這些分別代表該設(shè)備每秒的讀次數(shù)、寫次數(shù)、讀取 kb 數(shù),和寫入 kb 數(shù)。這些用于描述工作負(fù)載。性能問題可能僅僅是由于施加了過大的負(fù)載。

await:以毫秒為單位的 I/O 平均消耗時(shí)間。這是應(yīng)用程序消耗的實(shí)際時(shí)間,因?yàn)樗伺抨?duì)時(shí)間和處理時(shí)間。比預(yù)期更大的平均時(shí)間可能意味著設(shè)備的飽和,或設(shè)備出了問題。

avgqu-sz:向設(shè)備發(fā)出的請(qǐng)求的平均數(shù)量。值大于 1 說明已經(jīng)飽和了(雖說設(shè)備可以并行處理請(qǐng)求,尤其是由多個(gè)磁盤組成的虛擬設(shè)備。)

%util:設(shè)備利用率。這個(gè)值是一個(gè)顯示出該設(shè)備在工作時(shí)每秒處于忙碌狀態(tài)的百分比。若值大于 60%,通常表明性能不佳(可以從 await 中看出),雖然它取決于設(shè)備本身。值接近 100% 通常意味著已飽和。

如果該存儲(chǔ)設(shè)備是一個(gè)面向很多后端磁盤的邏輯磁盤設(shè)備,則 100% 利用率可能只是意味著當(dāng)前正在處理某些 I/O 占用,然而,后端磁盤可能遠(yuǎn)未飽和,并且可能能夠處理更多的工作。

請(qǐng)記住,磁盤 I/O 性能較差不一定是程序的問題。許多技術(shù)通常是異步 I/O,使應(yīng)用程序不會(huì)被阻塞并遭受延遲(例如,預(yù)讀,以及寫緩沖)。

7. free -m

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

右邊的兩列顯式:

buffers:用于塊設(shè)備 I/O 的緩沖區(qū)緩存。

cached:用于文件系統(tǒng)的頁面緩存。

我們只是想要檢查這些不接近零的大小,其可能會(huì)導(dǎo)致更高磁盤 I/O(使用 iostat 確認(rèn)),和更糟糕的性能。上面的例子看起來還不錯(cuò),每一列均有很多 M 個(gè)大小。

比起第一行,-/+ buffers/cache 提供的內(nèi)存使用量會(huì)更加準(zhǔn)確些。Linux 會(huì)把暫時(shí)用不上的內(nèi)存用作緩存,一旦應(yīng)用需要的時(shí)候就立刻重新分配給它。所以部分被用作緩存的內(nèi)存其實(shí)也算是空閑的內(nèi)存。為了解釋這一點(diǎn), 甚至有人專門建了個(gè)網(wǎng)站: linuxatemyram。

如果你在 Linux 上安裝了 ZFS,這一點(diǎn)會(huì)變得更加困惑,因?yàn)?ZFS 它自己的文件系統(tǒng)緩存不算入free -m。有時(shí)候發(fā)現(xiàn)系統(tǒng)已經(jīng)沒有多少空閑內(nèi)存可用了,其實(shí)內(nèi)存卻都待在 ZFS 的緩存里。

8. sar -n DEV 1

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

這個(gè)工具可以被用來檢查網(wǎng)絡(luò)接口的吞吐量:rxkB/s 和 txkB/s,以及是否達(dá)到限額。上面的例子中,eth0 接收的流量達(dá)到 22Mbytes/s,也即 176Mbits/sec(限額是 1Gbit/sec)

我們用的版本中還提供了 %ifutil 作為設(shè)備使用率(接收和發(fā)送的最大值)的指標(biāo)。我們也可以用 Brendan 的 nicstat 工具計(jì)量這個(gè)值。一如 nicstat,sar 顯示的這個(gè)值是很難精確取得的,在這個(gè)例子里面,它就沒在正常的工作(0.00)。

9. sar -n TCP,ETCP 1

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

這是一些關(guān)鍵的 TCP 指標(biāo)的匯總視圖。這些包括:

active/s:每秒本地發(fā)起 TCP 連接數(shù)(例如,通過 connect())。

passive/s:每秒遠(yuǎn)程發(fā)起的 TCP 連接數(shù)(例如,通過 accept())。

retrans/s:每秒重傳 TCP 次數(shù)。

active 和 passive 的連接數(shù)往往對(duì)于描述一個(gè)粗略衡量服務(wù)器負(fù)載是非常有用的:新接受的連接數(shù)(passive),下行連接數(shù)(active)??梢岳斫鉃?active 連接是對(duì)外的,而 passive 連接是對(duì)內(nèi)的,雖然嚴(yán)格來說并不完全正確(例如,一個(gè) localhost 到 localhost 的連接)。

重傳是出現(xiàn)一個(gè)網(wǎng)絡(luò)和服務(wù)器問題的一個(gè)征兆。其可能是由于一個(gè)不可靠的網(wǎng)絡(luò)(例如,公網(wǎng))造成的,或許也有可能是由于服務(wù)器過載并丟包。上面的例子顯示了每秒只有一個(gè)新的 TCP 連接。

10. top

60秒內(nèi)對(duì) Linux 的性能診斷的方法解析

top 命令包含了很多我們之前已經(jīng)檢查過的指標(biāo)??梢苑奖愕膱?zhí)行它來查看相比于之前的命令輸出的結(jié)果有很大不同,這表明負(fù)載是可變的。

top 的一個(gè)缺點(diǎn)是,很難看到數(shù)據(jù)隨時(shí)間變動(dòng)的趨勢(shì)。vmstat 和 pidstat 提供的滾動(dòng)輸出會(huì)更清楚一些。如果你不以足夠快的速度暫停輸出(Ctrl-S 暫停,Ctrl-Q 繼續(xù)),一些間歇性問題的線索也可能由于被清屏而丟失。

后續(xù)的分析

還有更多命令和方法可以用于更深入的分析。查看 Brendan 在 Velocity 2015 大會(huì)上的 Linux 性能工具教程,其中包含了超過 40 個(gè)命令,涵蓋了可觀測(cè)性、標(biāo)桿管理、調(diào)優(yōu)、靜態(tài)性能調(diào)優(yōu)、分析,和跟蹤等方面。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209537
  • TOP
    TOP
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    32141

原文標(biāo)題:一秒內(nèi)診斷 Linux 服務(wù)器的性能

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    怎樣記錄10秒內(nèi)的數(shù)據(jù)

    請(qǐng)問哪位神人可以告訴我下 怎樣記錄10秒內(nèi)的數(shù)據(jù)?
    發(fā)表于 04-20 21:49

    如何設(shè)計(jì)5秒內(nèi)沒聲音發(fā)出警示的電路

    如何設(shè)計(jì)5秒內(nèi)沒聲音發(fā)出警示的電路
    發(fā)表于 10-14 16:38

    怎么用已用時(shí)間函數(shù)設(shè)置程序在前三秒內(nèi)亮布爾一,當(dāng)三時(shí)間過后亮布爾二

    怎么用已用時(shí)間函數(shù)設(shè)置程序在前三秒內(nèi)亮布爾一,當(dāng)三時(shí)間過后亮布爾二,求程序演示
    發(fā)表于 12-18 10:20

    為什么33521上的對(duì)數(shù)掃描會(huì)在超過20的時(shí)間內(nèi)以對(duì)數(shù)方式掃描在最后一秒內(nèi)進(jìn)入停止頻率

    除了有缺陷的產(chǎn)品之外,還有什么理由為什么33521上的對(duì)數(shù)掃描會(huì)在超過20的時(shí)間內(nèi)以低于對(duì)數(shù)的方式掃描,然后在最后一秒內(nèi)進(jìn)入停止頻率。我只是開箱即用。對(duì)于長(zhǎng)掃描來說尤其令人震驚。當(dāng)從10 Hz到
    發(fā)表于 03-27 14:32

    為什么我不能在PIC16F883第一秒內(nèi)開始任何交流?

    內(nèi)(在Vdd上升之后)不算。所以我不能在第一秒內(nèi)開始任何交流。在簡(jiǎn)化了我的代碼之后,我提出了這些代碼:這個(gè)代碼使用內(nèi)部的OSCCulter HFIFToC…我發(fā)現(xiàn)在Vdd被設(shè)置==>這是否意味著
    發(fā)表于 08-06 08:51

    如何讓鍵盤10秒內(nèi)無操作進(jìn)入休眠狀態(tài)

    如何讓鍵盤10秒內(nèi)無操作進(jìn)入休眠狀態(tài)?鍵盤2毫刷新,按鍵松手時(shí)定時(shí)器清零開始計(jì)時(shí),當(dāng)計(jì)數(shù)到5000開始休眠
    發(fā)表于 01-13 06:16

    CH573主從握手速度能做到1秒內(nèi)完成嗎?

    用的官方主從+從機(jī)例程,指定了連接mac,從連接到可以通訊,能做到1秒內(nèi)完成嗎?
    發(fā)表于 08-05 07:54

    夏普 PM2.5小型檢測(cè)傳感器 10秒內(nèi)檢測(cè)PM2.5濃度

    夏普量產(chǎn)能在10秒內(nèi)檢測(cè)出PM2.5濃度的小型傳感器。該傳感器的工作原理為,從飄浮于空氣中的灰塵里分離出肉眼看不見的PM2.5,并利用搭載紅色發(fā)光二極管(LED)的傳感器來進(jìn)行檢測(cè)。
    發(fā)表于 04-20 17:28 ?5898次閱讀
    夏普 PM2.5小型檢測(cè)傳感器 10<b class='flag-5'>秒內(nèi)</b>檢測(cè)PM2.5濃度

    戴爾易安信攜手中醫(yī)行業(yè)將中醫(yī)治療數(shù)字化,在80秒內(nèi)就可破解人體經(jīng)絡(luò)的密碼

    作為經(jīng)絡(luò)檢測(cè)儀計(jì)算核心的Dell EMC Embedded Box PC 5000配置了英特爾?酷睿TM i3處理器、8GB DDR4內(nèi)存和128GB固態(tài)硬盤,擁有良好的計(jì)算能力,可以在80秒內(nèi)完成診斷分析,并提供個(gè)性化的經(jīng)絡(luò)報(bào)告,使經(jīng)絡(luò)辨證數(shù)字化成為現(xiàn)實(shí),將中醫(yī)智能
    發(fā)表于 08-18 11:13 ?3908次閱讀

    02:采取什么措施來提高啟動(dòng)性能,在一秒內(nèi)啟動(dòng)系統(tǒng)

    希望平臺(tái)一秒內(nèi)啟動(dòng)……客戶是否需要?即使在某些用例中沒有這么快……我們?nèi)詫⒂懻摽梢圆扇∈裁创胧﹣硖岣邌?dòng)性能。向?qū)<伊私馊绾渭軜?gòu)和優(yōu)化從引導(dǎo)ROM、引導(dǎo)加載程序一直到操作系統(tǒng)和應(yīng)用的啟動(dòng)流程。
    的頭像 發(fā)表于 01-10 07:46 ?2640次閱讀
    02:采取什么措施來提高啟動(dòng)<b class='flag-5'>性能</b>,在一<b class='flag-5'>秒內(nèi)</b>啟動(dòng)系統(tǒng)

    AI技術(shù)測(cè)骨齡 醫(yī)療服務(wù)全面升級(jí)

    “骨齡讀片智能時(shí)代已經(jīng)來臨!5秒內(nèi)返回骨齡結(jié)果,10秒內(nèi)返回評(píng)價(jià)報(bào)告!”
    發(fā)表于 03-01 14:52 ?1280次閱讀

    AI可識(shí)別語音情感模型 在1.2秒內(nèi)判斷你的憤怒

    亞馬遜的Alexa可根據(jù)語音判斷你需要的選擇,但是人工智能(AI)卻可以感知你是否生氣。麻省理工學(xué)院媒體實(shí)驗(yàn)室的分支機(jī)構(gòu)Affectiva的聲聯(lián)網(wǎng)系統(tǒng),可在短短1.2秒內(nèi)從音頻數(shù)據(jù)中分辨出你的憤怒。無論是什么語言,這個(gè)時(shí)間剛好超過人類感知憤怒所需的時(shí)間。
    發(fā)表于 02-12 17:10 ?3326次閱讀

    替代Windows有望 國(guó)產(chǎn)UOS系統(tǒng)30秒內(nèi)開機(jī)辦公體驗(yàn)流暢

    在OS操作系統(tǒng)行業(yè),微軟的Windows是一座難以逾越的大山,PC是離不開的,辦公市場(chǎng)還得靠Win7/10等系統(tǒng)。在國(guó)產(chǎn)替代方面,統(tǒng)信軟件總經(jīng)理劉聞歡表示,國(guó)產(chǎn)UOS系統(tǒng)可以做到30秒內(nèi)開機(jī),辦公體驗(yàn)流暢。
    的頭像 發(fā)表于 03-17 09:04 ?2174次閱讀

    UV LED 30秒內(nèi)成功殺死99.9%的新型冠狀病毒 首爾偉傲世表示即將提供解決方案

    昨(2)日,首爾偉傲世(Seoul Viosys)與SETi宣布Violeds UV LED技術(shù)成功在30秒內(nèi)殺死99.9%的新型冠狀病毒(COVID-19)。
    發(fā)表于 04-03 14:20 ?1271次閱讀

    EMS的診斷技巧與案例解析綜述

    EMS的診斷技巧與案例解析綜述
    發(fā)表于 08-27 10:35 ?42次下載