Linux下性能监控工具介绍
本章解釋如何使用適用于Linux的大量性能工具及每個工具中信息的意義。即使已經使用top或者sar,也可能從本章學到相關知識。
應該養成使用這些工具的習慣。當然要知道如何診斷性能問題,但也應該定期尋找可能指示問題的關鍵指標的變化。可以使用這些工具衡量新應用程序對性能的影響。就如同查看車內的溫度表一樣,要注意Linux系統的性能指標。本章介紹的工具有:
·?? top
·?? sar
·?? vmstat
·?? iostat
·?? free
可以作為普通用戶運行這些工具。它們都利用/proc文件系統得到它們的數據。這些性能工具和幾個rpm一起提供。procps rpm提供top、free和vmstat。sysstat rpm提供sar和iostat。
top命令是一個優秀的交互式實用工具,用于監視性能。它提供關于整體Linux性能的幾個概要行,但是報告進程信息才是top真正的長處。可以廣泛自定義進程顯示,也可以添加字段,按照不同指標排序進程列表,甚至從top注銷進程。
sar實用工具提供監視每一事件的能力。它至少有15個單獨的報告類別,包括CPU、磁盤、網絡、進程、交換區等等。
vmstat命令報告關于內存和交換區使用的廣泛信息。它也報告CPU和一些I/O信息。iostat報告存儲輸入/輸出(I/O)統計資料。
這些命令覆蓋許多相同的地方。本節討論如何使用這些命令并解釋每個命令產生的報告,并不討論所有15種sar語法,但是介紹了其中最常見的。
3.1? top
top命令是最流行的性能工具之一。大多數系統管理 員運行top查看Linux和UNIX系統的運行情況。top實用工具提供一種監視進程和Linux整體性能的理想方法。將Linux進程稱作任務更準 確,但是在本章中我們還是將它們稱作進程,因為這個工具也這樣稱呼它們。1普通用戶和root用戶都可以運行top。圖3-1顯示一個空閑系統的典型top輸出。
圖3-1 ?top輸出
top顯示有兩個部分。大約前三分之一顯示關于Linux的整體信息,其余行為各個進程信息。如果擴展窗口則顯示更多進程而填充整個屏幕。
更全面的Linux信息可以通過使用top之外的幾 個命令來得到。不過,通過一個命令在一個屏幕上顯示所有信息比較理想。第一行顯示最近1分鐘、5分鐘和15分鐘的負載平均值。負載平均值表示在CPU上運 行或者等待運行多少進程。uptime命令也可以用來顯示負載平均值。接下來是進程信息,之后是CPU、內存和交換區。內存和交換區信息與free命令輸 出類似。在我們確定內存和CPU使用之后的下一個問題是哪些進程正在使用它。
大部分進程信息也可以通過ps命令得到,但是top提供一種更易于閱讀的格式。最有用的是用于提供幫助的h,它列出top的其他交互式命令。
3.1.1 ?添加和移除字段
字段可以從顯示中添加或移除。進程輸出可以按照CPU、內存或者其他指標排序。這是一個查看什么進程搶奪內存的理想方法。各個Linux發布版本的top語法和交互式選項不同,幫助命令可以快速列出什么命令可用。有許多交互式選項可用,用戶應該花費一些時間來試驗它們。
圖3-2顯示Red Hat Enterprise Linux ES release 3的幫助屏幕。
圖3-2? top的幫助屏幕
f命令用來從top輸出中添加或者移除字段。圖3-3是一個Red Hat Enterprise Linux ES release 3的幫助屏幕,顯示什么字段可以添加。
圖3-3? top添加/移除字段的屏幕
圖3-4顯示一個SUSE Linux 9.0 top的幫助屏幕,可見它們提供的命令差別非常大。
圖3-4? SUSE top的幫助屏幕
3.1.2? 解釋輸出
讓我們研究top信息的意義,以top的如下輸出為例:
top輸出的第一行顯示負載平均值信息:
這個輸出與uptime的輸出類似。從中可看到Linux已經運行時間、當前時間和用戶數量,以及1分鐘、5分鐘和15分鐘負載平均值。接下來顯示進程概要:
我們看到總共有73個進程,其中72個進程正在休 眠,一個進程正在運行,沒有僵化進程或者被停止的進程。當一個進程退出并且它的父進程沒有通過wait(2)或者waitpid(2)函數等待它時,它就 會成為僵化進程。這通常是由于父進程在它的子進程之前退出造成的。不同于進程表中的項,僵化進程不使用資源。停止的進程是已經向它發送STOP信號的進 程。更多信息,請參見signal(7)手冊頁。
接下來是CPU信息:
CPU行描述CPU如何使用它們的CPU周期。 top命令報告CPU在用戶或者內核模式、運行良好進程以及處在空閑狀態時所花費時間的百分比。iowait列顯示沒有進程在CPU上運行時,處理器等待 I/O完成的時間的百分比。irq和softirq列表示處理硬件和軟件中斷所花費的時間。早于2.6版本的Linux內核不報告irq、softirq 和iowait。
接下來是內存信息:
前三個指標提供內存使用的概要,列出了總的可用內存、已使用內存和自由內存,它們都是確定對于Linux內存是否足夠所需信息。
接下來五個指標標識已使用的內存如何分配。shrd 字段顯示共享的內存使用,buff是緩沖使用的內存。分配給內核或者用戶進程的內存可以處在三種不同狀態:活動(active)、不活動臟 (inactive dirty)和不活動干凈(inactive clean)。活動在top中用aotv表示,表示該內存最近被使用。不活動臟在top中用in_d表示,表示該內存最近沒有使用,可以回收。要回收內 存,必須將它的內容寫到磁盤,這個進程命名為“清洗”,也可稱作內存的第四種臨時狀態。一旦被清洗,不活動臟內存成為不活動干凈內存,在top中用 in_c表示。由Norm Murray和Neil Horman合著的Understanding Virtual Memory in Red Hat Enterprise Linux 3是一本優秀的參考書,網址為http:people.redhat.com/nhorman/papers/ rhel3_vm.pdf。
接下來是交換區信息:
av字段是可用的交換區總量,之后是已用數量和自由數量,最后是內核用于緩存的內存數量。
top顯示的其余部分是進程信息:
top顯示盡可能多的能適合屏幕的進程。top(1)手冊頁中提供了字段說明的描述。表3-1提供了這些字段的概要。
表3-1????????????????????????????????????????????????????? top進程字段
| 字??? 段 | 說??? 明 |
| PID | 進程id編號 |
| USER | 進程所有者的用戶名 |
| PRI | 進程的優先級 |
| SIZE | 進程大小,包括它的代碼、棧和數據區域,以千字節為單位 |
| RSS | 進程使用的內存總量,以千字節為單位 |
| SHARE | 進程使用的共享內存數量 |
| STAT | 進程的狀態,通常R表示運行,S表示休眠 |
| %CPU | 自從最近的屏幕更新以來,這個進程使用的CPU百分比 |
| %MEM | 這個進程使用的內存百分比 |
| TIME | 自從進程啟動以來,這個進程使用的CPU時間量 |
| CPU | 最近執行進程的CPU |
| COMMAND | 正在執行的命令 |
3.1.3 ?保存自定義
一個非常好的top功能是保存當前配置。可以使用交互式命令s任意更改顯示,然后按w保存該視圖。
top在用戶的主目錄中寫入一個.toprc文件,用來保存配置,以便下一次這個用戶啟動top時使用相同的顯示選項。
top也尋找默認配置文件/etc/toprc。這 是一個全局配置文件,當任何用戶運行實用工具時,top將讀取該文件。這個文件可以使top以安全模式運行,也可以設置刷新延遲。安全模式阻止非root 用戶注銷或者更改進程的正常值,也阻止非root用戶更改top的刷新值。Red Hat Enterprise Linux ES release 3的一個/etc/toprc示例文件如下所示:
s表示安全模式,3定義三秒鐘刷新間隔。其他發布版 本可能有不同的/etc/toprc格式。注銷進程是一個非常實用的功能。如果用戶有一個失控的進程,通過top命令可以輕易找到并注銷它,具體步驟為: 運行top,通過u命令顯示用戶的所有進程,然后使用k注銷它。top不只是一個優秀的性能監視工具,它也可以用來通過注銷那些產生問題的進程從而改進性 能。
3.1.4? 批處理模式
top也可以以批處理模式運行。嘗試運行以下命令:
-n 1告訴top只顯示一次迭代,-b選項表示以適合寫入文件的文本形式輸出或者定向到另一個程序(例如less)。類似以下兩行腳本的命令可以順利完成cron工作:
可以將它添加到crontab,并每隔15分鐘收集一次輸出。
通過批處理可以輕松完成所有任務,無需用戶的干涉。 所有進程都被列出,輸出并不是每5秒鐘刷新一次。如果用戶的主目錄中存在一個.toprc配置文件,那么它用來格式化顯示。以下是在一個多CPU Linux服務器上運行top批處理模式的輸出。注意,其中沒有顯示top輸出的所有258個進程。
現在讀者可能明白了為什么top會如此流行。top的交互式本質和容易自定義輸出的能力使它成為診斷問題的優秀工具。
?
3.2? sar
sar是一個優秀的一般性能監視工具,它可以輸出 Linux所完成的幾乎所有工作的數據。sar命令在sysetat rpm中提供。示例中使用sysstat版本5.0.5,這是穩定的最新版本之一。關于版本和下載信息,請訪問sysstat主頁 http://perso.wanadoo.fr/sebastien.godard/。
sar可以顯示CPU、運行隊列、磁盤I/O、分頁 (交換區)、內存、CPU中斷、網絡等性能數據。最重要的sar功能是創建數據文件。每一個Linux系統都應該通過cron工作收集sar數據。該 sar數據文件為系統管理員提供歷史性能信息。這個功能非常重要,它將sar和其他性能工具區分開。如果一個夜晚批處理工作正常運行兩次,直到下一個早上 才會發現這種情況(除非被叫醒)。我們需要具備研究12小時以前的性能數據的能力。sar數據收集器提供了這種能力。有許多報告語法,我們首先討論數據收 集。
3.2.1 ?sar數據收集器
sar數據收集通過/usr/lib/sa中的一個 二進制可執行文件和兩個腳本來完成。sar數據收集器是一個位于/usr/lib/sa/sadc的二進制可執行文件。sadc的工作是寫入數據收集文件 /var/1og/sa/。可以為sadc提供幾個選項。常見語法是:
間隔是取樣間的秒數,iterations是要取得 的樣本數量,file name定義輸出文件。簡單的sadc語法是/usr/lib/sa/sadc 360 5/tmp/sadc.out。這個命令在5分鐘間隔取得5個樣本并將它們保存在/tmp/sadc.out。我們應該定期收集樣本,因此需要一個由 cron運行的腳本。應該把樣本放在一個有意義的地方,如在前一節中使用top腳本時那樣。sysstat rpm提供/usr/lib/sa/sa1腳本來完成所有這些事情。
sa1(8)手冊頁比sa1腳本本身要長得多。 /usr/lib/sa/sa1是一個非常簡單的腳本,使用語法sadc -F -L 1 1 /var/log/sa/sa##來運行sadc,其中##是某月的日期。較老版本的sa1使用date+.%Y_%m_%d的輸出作為文件后綴。如果需 要,可以使用-F選項使sadc強制創建輸出文件。-L在寫入輸出文件之前鎖定它,以防止兩個sadc進程同時運行時損壞該文件。較老版本的sadc沒有 -L選項,因此sa1腳本執行手工鎖定。sa1腳本的選項只是樣本之間的間隔和取樣迭代的次量。cron文件(/etc/cron.d/sysstat) 和sysstat一起提供,在各sysstat版本之間它有所不同。以下是5.0.5版本的sysstat的條目:
可見,在sysstat rpm安裝之后,sadc開始取得樣本。sysstat主頁是http://perso.wanadoo.fr/ sebastien.godard/2。文檔鏈接提供以下類似2006年1月14日的crontab方案:
Sebastien Godard的網站的crontab示例建議周一至周五從早晨8點到下午6點每10分鐘取一次樣本,其他時間每小時取得一個樣本(注意,crontab注 釋為下午7點,但實際上是18:00,即下午6點)。如果/var中的磁盤空間足夠,可以每天都每小時的每10分鐘取樣一次。如果周末備份較慢,每小時一 次sadc取樣可能幫助不大。
現在讓我們研究更流行的報告語法。
3.2.2? CPU統計數據
sar -u輸出顯示CPU信息。-u選項是sar的默認選項。該輸出以百分比顯示CPU的使用情況。表3-2解釋該輸出。
表3-2 ???????????????????????????????????????????????????? sar -u字段
| 字?? ?段 | 說? ??明 |
| CPU | CPU編號 |
| %user | 在用戶模式中運行進程所花的時間 |
| %nice | 運行正常進程所花的時間 |
| %system | 在內核模式(系統)中運行進程所花的時間 |
| %iowait | 沒有進程在該CPU上執行時,處理器等待I/O完成的時間 |
| %idle | 沒有進程在該CPU上執行的時間 |
這些看起來應該比較熟悉,它和top報告中的CPU信息內容相同。以下顯示輸出格式:
其中的5 10導致sar以5秒鐘間隔取得10個樣本。任何sar報告的第一列都是時間戳。
我們本來可以研究使用-f選項通過sadc創建的文件。這個sar語法顯示sar -f/var/log/ sa/sa21的輸出:
在多CPU Linux系統中,sar命令也可以為每個CPU分解該信息,如以下sar -u -P ALL 5 5輸出所示:
3.2.3 ?磁盤I/O統計數據
sar是一個研究磁盤I/O的優秀工具。以下是sar磁盤I/O輸出的一個示例。
第一行-d顯示磁盤I/O信息,5?2選項是間隔和迭代,就像sar數據收集器那樣。表3-3列出了字段和說明。
表3-3?????????????????????????????????????????????????????? sar -d字段
| 字??? 段 | 說??? 明 |
| DEV | 磁盤設備 |
| tps | 每秒傳輸數(或者每秒IO數) |
| rd_sec/s | 每秒512字節讀取數 |
| wr_sec/s | 每秒512字節寫入數 |
512只是一個測量單位,不表示所有磁盤I/O均使 用512字節塊。DEV列是dev#-#格式的磁盤設備,其中第一個#是設備主編號,第二個#是次編號或者連續編號。對于大于2.5的內核,sar使用次 編號。例如,在sar -d輸出中看到的dev3-0和dev3-1。它們對應于/dev/hda和/dev/hdal。請看/dev中的以下各項:
/dev/hda有主編號3和次編號0。hda1有主編號3和次編號1。
3.2.4 ?網絡統計數據
sar提供四種不同的語法選項來顯示網絡信息。-n 選項使用四個不同的開關:DEV、EDEV、SOCK和FULL。DEV顯示網絡接口信息,EDEV顯示關于網絡錯誤的統計數據,SOCK顯示套接字信 息,FULL顯示所有三個開關。它們可以單獨或者一起使用。表3-4顯示通過-n DEV選項報告的字段。
表3-4 ???????????????????????????????????????????????? sar -n DEV字段
| 字??? 段 | 說?? 明 |
| IFACE | LAN接口 |
| rxpck/s | 每秒鐘接收的數據包 |
| txpck/s | 每秒鐘發送的數據包 |
| rxbyt/s | 每秒鐘接收的字節數 |
| txbyt/s | 每秒鐘發送的字節數 |
| rxcmp/s | 每秒鐘接收的壓縮數據包 |
| txcmp/s | 每秒鐘發送的壓縮數據包 |
| rxmcst/s | 每秒鐘接收的多播數據包 |
以下是使用-n DEV選項的sar輸出:
關于網絡錯誤的信息可以用sar -n EDEV顯示。表3-5列出了顯示的字段。
表3-5 ?????????????????????????????????????????????? sar -n EDEV字段
| 字??? 段 | 說??? 明 |
| IFACE | LAN接口 |
| rxerr/s | 每秒鐘接收的壞數據包 |
| txerr/s | 每秒鐘發送的壞數據包 |
| coll/s | 每秒沖突數 |
| rxdrop/s | 因為緩沖充滿,每秒鐘丟棄的已接收數據包數 |
| txdrop/s | 因為緩沖充滿,每秒鐘丟棄的已發送數據包數 |
| txcarr/s | 發送數據包時,每秒載波錯誤數 |
| rxfram/s | 每秒接收數據包的幀對齊錯誤數 |
| rxfifo/s | 接收的數據包每秒FIFO過速的錯誤數 |
| txfifo/s | 發送的數據包每秒FIFO過速的錯誤數 |
SOCK參數顯示IPCS套接字信息。表3-6列出顯示的字段及其意義。
表3-6 ?????????????????????????????????????????????? sar -n SOCK字段
| 字??? 段 | 說??? 明 |
| totsck | 使用的套接字總數量 |
| tcpsck | 使用的TCP套接字數量 |
| udpsck | 使用的UDP套接字數量 |
| rawsck | 使用的raw套接字數量 |
| ip-frag | 使用的IP段數量 |
sar可以產生許多其他報告。我們有必要仔細閱讀sar(1)手冊頁,查看是否有自己需要的其他報告。
?
3.3? vmstat
vmstat命令也是顯示Linux性能指標的方法,它報告了許多信息,理解這些信息有一定難度。
輸出分為6個類別:進程、內存、交換區、I/O、系統和CPU。與iostat類似,第一個樣本是從最近重新啟動以來的平均值。以下是一個典型的vmstat輸出:
-m選項使內存字段以兆字節為單位顯示。vmstat和許多其他性能命令一樣使用取樣間隔和計數參數。
進程(procs)信息有兩列。r列是可運行進程的數量,b列是阻塞進程的數量。
內存部分有4個報告虛擬內存如何使用的字段。表3-7列出這些字段及其意義。
表3-7 ???????????????????????????????????????????????? vmstat內存字段
| 字??? 段 | 說??? 明 |
| Swpd | 已用的交換空間數量 |
| free | 自由RAM數量 |
| buff | 緩沖使用的RAM數量 |
| cache | 文件系統緩存使用的RAM數量 |
接下來是交換(swap)指標。交換只是一個古老術 語,但是顯然不會消失。交換涉及分頁讀取或寫入磁盤的進程所消耗的所有內存。它將顯示系統達到的性能指標水平。而Linux所做的是,以小塊方式按照需要 對磁盤空間進行分頁操作。因此,我們可能應該停止說交換到磁盤的內存,并開始說分頁到磁盤的內存。對于任何一種方法,表3-8解釋了相關字段。
表3-8?????????????????????????????????????????????????? vmstat交換字段
| 字??? 段 | 說?? 明 |
| si | 從磁盤分頁到內存的數量 |
| so | 從內存分頁到磁盤的數量 |
在交換之后是兩個I/O字段。這部分提供了一個簡略介紹以幫助確定Linux是否正忙于完成許多磁盤I/O。vmstat只提供兩個字段,顯示出入磁盤的數據量(參見表3-9)。
表3-9 ????????????????????????????????????????????????? vmstat io字段
| 字??? 段 | 說?? ?明 |
| bi | 從磁盤讀入的塊 |
| bo | 寫入磁盤的塊 |
系統字段提供Linux內核進行進程管理的繁忙程度的摘要。中斷和上下文開關參見表3-10。上下文開關指進程移出CPU或者移入CPU。
表3-10 ????????????????????????????????????????????? vmstat系統字段
| 字?? ?段 | 說 ???明 |
| in | 系統中斷 |
| cs | 進程上下文開關 |
最后,CPU狀態信息用總CPU時間的百分比來表示,如表3-11所示。
表3-11 ????????????????????????????????????????????? vmstat cpu字段
| 字??? 段 | 說???? 明 |
| us | 用戶模式 |
| sy | 內核模式 |
| wa | 等待I/O |
| id | 空閑 |
?
3.4? iostat
iostat命令是另一個研究磁盤吞吐量的工具。和 sar類似,iostat可以使用間隔和計數參數。第一個間隔的輸出包含Linux總運行時間的指標。與其他性能命令比較,這可能是iostat最獨特的 功能。例如,以下是一個大部分時間處于空閑的系統的輸出。可見,從啟動以來hda設備已經讀取大約 9?158MB(18?755?572*512/1?024/1?024)。Blk列是512字節塊。
不使用選項,iostat只顯示覆蓋啟動以來全部時間的一組指標。
CPU信息包含基本上和top一樣的字段。iostat CPU輸出顯示在用戶模式中執行、執行正常進程、在內核(系統)模式中執行,進程等待I/O完成時處于空閑和沒有等待進程時處于空閑的CPU時間的百分比。CPU行是所有CPU的摘要。
磁盤信息與sar -d提供的信息類似。輸出包括每秒傳輸數(tps)、每秒512字節塊讀取數(Blk_read/s)、每秒512字節塊寫入數(Blk_wrtn/s)和512字節塊讀取(Blk_read)和寫入(Blk_wrtn)的總數量。
iostat提供幾個用于定制輸出的開關。最有用的有:
?? ?-c????? 只顯示CPU行
??? -d????? 顯示磁盤行
??? -k????? 以千字節為單位顯示磁盤輸出
??? -t?????? 在輸出中包括時間戳
??? -x????? 在輸出中包括擴展的磁盤指標
這些選項可以組合。iostat -tk 5 2的輸出是:
?
?
3.5? free
free命令輸出內存和交換信息,與top命令的作用非常相似。不使用選項,free以千字節為單位顯示信息:
free命令有少量選項,推薦使用-mt。-m開關使輸出以兆字節為單位,-t開關提供一個合計行:
?
?
3.6? 小結
如本章所示,Linux中的可用性能工具所提供的信 息有大量重復,例如內存信息可以通過top、vmstat、free和sar顯示。系統管理員不需要精通所有這些工具,重要的是知道如何找到并解釋需要的 所有性能信息而不是使用哪些工具。因此,我們推薦讀者多花一些時間來熟悉這些工具及其輸出。
閱讀(653) | 評論(0) | 轉發(0) | 0上一篇:提高 Linux 上 socket 性能
下一篇:sed&awk使用外部變量
相關熱門文章- 構建arm交叉編譯工具(toolchH...
- 論文 Password Interception i...
- Oracle中如何用一條SQL快速生...
- 只在佳捷倫^AnritsuMP1632C日...
- python實現抓取HTML,取出數據...
- linux 常見服務端口
- 【ROOTFS搭建】busybox的httpd...
- 什么是shell
- linux socket的bug??
- linux的線程是否受到了保護?...
- 我的ChinaUnix博客被鎖定了,...
- 虛擬機中ubuntu無線連接問題...
- IBM DS3400 盤陣怎么查看是單...
- 啟動auditd時,報錯如下,怎么...
- CGSL系統中root密碼正確,但無...
轉載于:https://www.cnblogs.com/aquester/p/9891702.html
總結
以上是生活随笔為你收集整理的Linux下性能监控工具介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用linux 的wget下载国外的域名
- 下一篇: linux学习之路之使用脚本来复制二进制