1. 程式人生 > >《Linux 性能及調優指南》2.3 監控工具

《Linux 性能及調優指南》2.3 監控工具

ger guid 帶來 功能 差異 l命令 交換內存 空閑 管理

翻譯:飛哥 (http://hi.baidu.com/imlidapeng)

版權所有,尊重他人勞動成果,轉載時請註明作者和原始出處及本聲明。

原文名稱:《Linux Performance and Tuning Guidelines》

原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html

-------------------------------------------------------------------------------------------

本章我們將討論監控工具,這些工具大部分都來源於Linux企業版。你應該熟練掌握這些工具。
?
?

2.3.1 top

top命令顯示實際進程的運行情況。在默認情況下,它顯示服務器上占用CPU最多的任務並每5秒刷新列表一次。
?你也可以按PID(數值)、age(最新的排第一)、time(累計的時間)、常駐內存或時間(自啟動開始進程所占用的CPU時間)排序。

技術分享圖片

你可以使用renice命令來修改進程的優先級。如果進程掛起或占據過多的CPU,你可以使用kill命令殺死此進程。

輸出的欄位有:

PID: 進程ID

USER: 進程所有者的用戶名

PRI: 進程優先級(參見1.1.4“進程優先級和Nice值”)

NI: Nice值(Whether the process tries to be nice by adjusting the priority by the number given. See below for details.)

SIZE: 進程使用的內存大小(code+data+stack),單位為KB

RSS: 所使用的物理內存大小,單位為KB

SHARE: 與其它進程共享的內存大小,單位為KB

STAT: 進程狀態:S=sleeping, R=running, T=stopped or traced,D=interruptible sleep, Z=zombie。在1.1.7“進程狀態”討論關於進程的狀態

%CPU: 使用的CPU百分比

%MEM: 物理內存百分比

TIME: 進程使用的CPU時間(自從此啟動)

COMMAND:啟動任務所使用的命令(包括參數)


?top支持多個有用的熱鍵,如下:

t: 隱藏或顯示摘要信息

m:隱藏或顯示內存信息

A:分類顯示各種系統資源,可用於快速找出系統中影響性能的任務。

o:在交互模式下選擇排序的欄位

r: renice命令

k: kill命令

?
?

2.3.2 vmstat

?vmstat能提供進程、內存、分頁、塊I/O、traps和CPU活動相關信息。
?vmstat命令可以顯示平均值或實際取樣值。使用取樣頻率和取樣時間等參數啟用vmstat取樣模式。

註意:在取樣模式中需要考慮實際數據搜集中存在誤差的可能,設定較低的取樣頻率能減少這樣的可能。


?實例2-2 vmstat輸出示例

技術分享圖片

註釋:vmstat輸出結果中第一行展示的是自最後一次啟動以來的平均值,所以此行可以忽略。

輸出欄位如下:

Process(procs)

r :等待運行時間的進程數。
b :處於不可中斷睡眠狀態的進程數。

Memory

swpd :虛擬內存使用量(KB)。
free :空閑內存量(KB)。
buff :用作buffer的內存量(KB)。
cache :用作cache的內存量(KB)。

swap

si :從硬盤交換到內存的數量(KBps)。
so :交換到硬盤的內存數量(KBps)。

IO

bi:發送到塊設備的塊的數量(blocks/s)。
bo:從塊設備獲取的塊的數量(blocks/s)。

System

in :每秒鐘的中斷數量,包括時鐘中斷。
cs :每秒鐘上下文交換的數量。

CPU(整個CPU時間的百分比)

us :花費在非內核代碼的CPU時間(用戶時間,包括Nice時間)。
sy :花費在內核代碼的CPU時間(系統時間)。
id :空閑時間。在2.5.41內核以前,還包括I/O等待時間。
wa :IO等待時間。在2.5.41內核以前,顯示為0。

vmstat命令提供了許多命令行參數,使用man手冊查看參數的詳細文檔。常用的參數有:

-m :顯示內核的內存使用情況(slabs)

-a :顯示活動和非活動內存分頁相關信息

-n :只顯示一次欄位名稱行,當在取樣模式通下將輸出信息存儲到文件時非常有用。(例如,root#vmstat –n 2 10 以每2秒鐘的頻率執行10次取樣)

當使用-p{分區}參數時,vmstat也可以提供I/O相關統計信息。?
?
?

2.3.3 uptime

uptime命令可以用來查看服務器已經運行了多久和曾經登錄過的用戶有多少,以及服務器的平均負載值是多少
?(參見1.6.1“處理器性能指標”)。
?它可以顯示過去1分鐘、5分鐘、15分鐘的系統平均負載值。

平均負載的最佳值是1,這意味著每個進程都可以立即執行不會錯過CPU周期。
?負載的正常值在不同的系統中有著很大的差別。在單處理器的工作站中,1或2都是可以接受的。然而在多處理器的服務器上你可能看到8到10。


?你能使用uptime來確定是服務器還是網絡出了問題。
?例如如果網絡應用程序運行,運行uptime來了解系統負載是否很高。如果負載不高,這個問題很有可能是由於網絡引起的而你也非服務器。

提示:你可以使用w命令來代替uptime。w也提供關於當前系統登錄用戶和用戶所進行工作的相關信息。


?例子2-3:uptime輸出示例

技術分享圖片

?

2.3.4 ps和pstree

ps和pstree是用於系統分析的基本命令。
?ps有3中不同風格的命令選項,UNIX風格、BSD風格和GNU風格。這裏我們只介紹UNIX風格選項。

ps命令可以顯示當前運行的進程列表。
?top命令也可以顯示進程信息,但ps可以提供更加詳細的內容。
?使用相應選項可以影響進程顯示的數量。
?ps -A命令可以列出所有進程及其相應的進程ID(PID),當我們使用如pmap或renice等工具時會用到此PID。

當系統運行java應用時,ps -A產生的輸出結果很容易填滿整個顯示區域,這導致很難得到所有運行中進程的完整視圖。
?
?在這種情況下,pstree命令就派上用場了,它使用樹狀顯示所有運行中的進程並合並所有的子進程(例如java線程),
?pstree命令有助於確認原始進程。還有另一個ps變種pgrep也非常有用。


?例子2-4:ps輸出示例

技術分享圖片

下面我們來了解一些常用的選項

-e :所有進程。等同於-A
-l :顯示長格式
-F :附加全格式
-H :顯示進程的層次結構
-L :顯示線程,可能出現LWP和NLWP欄位
-m :在進程後顯示線程


?下面的命令演示輸出進程的詳細信息:

ps -elFL

例子2-5:輸出進程詳細信息示例

技術分享圖片


?輸出欄位說明:

F :進程標誌
S :進程狀態。S=sleeping,R=running,T=stopped/traced,D=interruptable sleep,Z=zombie。參見1.1.7“進程狀態”中關於這些狀態的介紹。
UID :進程所有者(可能是啟動者)用戶名
PID :進程ID
PPID :父進程ID
LWP :LWP(輕量級進程【light weight process】,也稱作線程)ID
C :處理器使用率百分比
NLWP :進程中lwp(線程)的數量。(別名thcount)
PRI :進程的優先級。(參看1.1.4“進程優先級和Nice值”)
NI :Nice值(whether the process tries to be nice by adjusting the priority by the number given; see below for details)
ADDR :進程地址空間(不顯示)
SZ :進程所有內存(code+data+stack)總數,單位為KB。
WCHAN :內核功能名稱,如果進程正在運行中
RSS :常駐集大小,任務所使用的非交換物理內存(KB)
PSR :當前執行進程的處理器
STIME :開始時間
TTY :終端名稱
TIME :進程所用的CPU時間總數(自從啟動)
CMD :啟動任務的命令行(包括參數)

線程信息

你可以使用ps -L查看線程信息。

例子2-6:使用ps -L查看線程信息

技術分享圖片

?
??2.3.5 free
?命令/bin/free顯示系統中內存空閑及使用情況。它也包括內核使用的buffer與cache的相關信息。

例子2-7:free命令輸出結果示例

技術分享圖片

在使用free命令時,回憶一下Linux內存架構和虛擬內存管理方法。
?空閑內存值的用處市非常有限的,單純統計交換空間使用率也不表示存在內存瓶頸。


?圖2-1:描述了free命令輸出結果的基本含義。

技術分享圖片
圖2-1:free命令的輸出結果


?free命令常用的參數包括:

-b, -k, -m, -g :分別使用byte、KB、MB、GB為單位顯示。

-l :區分低內存和高內存(參見1.2“Linux內存架構”)

-c <count> :顯示輸出結果的次數


?內存區【Zone】中使用的內存

使用-l選項,你可以了解到在每個內存區中有多少內存被使用。
?例子2-8和例子2-9分別展示了在32位系統和64位系統中free -l的輸出結果。註意在64位系統中不再使用高內存。


?例子2-8:32位系統中free命令的輸出結果

技術分享圖片


?例子2-9:64位系統中free命令的輸出結果

技術分享圖片


?你可以從/proc/buddyinfo文件中了解到每個內存區中有多少塊內存可以使用。
?每列數值代表所需求大小的塊可用的數量。
?例子2-10中,在ZONE_DMA中有5塊2^2*PAGE_SIZE可用,在ZONE_DMA32中有16塊2^3*PAGE_SIZE可用。
?回憶一下夥伴系統是怎樣分配內存分頁的(參見“夥伴系統”)。
?下面輸出結果顯示系統內存碎片的具體情況並讓我們了解有到底多少分頁可以分配。


?例子2-10:64位系統中夥伴系統相關信息

技術分享圖片

?
?

2.3.6 iostat

iostat名利可以顯示自從系統啟動開始的CPU平均時間(與uptime相似)。

它也可以產生關於服務器硬盤子系統活動情況的報告,

報告包括兩部分內容:CPU使用情況和硬盤使用情況。

iostat可以用來獲得I/O瓶頸的詳細信息和系統性能調優,參見3.4.1“查找硬盤瓶頸”。

iostat是sysstat工具包的一部分。

例子2-11:iostat輸出結果

技術分享圖片

CPU使用情況分為四個部分:

%user :顯示用戶級別(應用)所占用CPU的百分比。
%nice :顯示擁有Nice優先級用戶級別所占用CPU的百分比。(優先級和nice級別會在2.3.7“nice,renice”中做相應介紹)
%sys :顯示系統級別(內核)所占用CPU的百分比。
%idle :顯示空閑CPU的百分比。


?設備使用情況分為下面幾個部分:

Device :塊設備名稱
tps :設備每秒鐘傳輸的數量(每秒鐘I/O請求數)。多個單獨的I/O請求可以合並到一個傳輸請求中,因為每個傳輸請求可以有不同的大小。
Blk_read/s,Blk_wrtn/s :每秒鐘塊設備讀寫塊的數量。可以設置不同的塊大小,一般為1024,2048,4048字節,這取決於分區的容量。
?例如使用下面的命令來獲得/dev/sda1的塊大小:
dumpe2fs -h /dev/sda1 |grep -F "Block size"
產生類似如下的輸出:
dumpe2fs 1.34 (25-Jul-2003)
Block size: 1024
Blk_read,Blk_wrtn :顯示自系統啟動後讀寫塊的總數。


?iostat提供很多選項,對於性能來說最為常用的就是-x,它可以顯示進階的統計信息,示例如下。

例子2-12:iostat -x輸出結果
?技術分享圖片

rrqm/s,wrqm/s :每秒鐘合並的讀寫請求數。多個單獨的I/O請求可以合並到一個傳輸請求中,因為每個傳輸請求可以有不同的大小。
r/s,w/s : 每秒鐘讀寫請求數。
rsec/s,wsec/s : 每秒鐘讀寫的扇區數。
rkB/s,wkB/s : 每秒鐘讀寫了多少KB。
avgrq-sz : 請求的平均大小,此值是以扇區為單位。
avgqu-sz : 請求隊列的平均長度。
await : 顯示系統級別(內核)所占用CPU的百分比。
svctm : I/O請求的平均服務時間(單位為毫秒)。
%util : I/O請求過程中CPU時間的百分比(設備的帶寬使用率)。當接近100%時設備處於飽和狀態。
?

計算I/O平均大小對於調整硬盤子系統訪問模式非常有用。如下使用iostat -x -d,只顯示有關於硬盤子系統的相關信息。

例子2-13:使用iostat -x -d分析I/O平均大小
?技術分享圖片

在例子2-13的輸出結果中,設備dasdc每秒鐘寫入12300.99KB的數據(kB_wrtn/s),這些數據被在一秒鐘內分為2502.97次(w/s)I/O寫入硬盤。
?I/O平均大小或請求平均大小為9.83塊(avgrq-sz),本例中塊大小為512字節。
?異步寫操作平均I/O大小通常為奇數,然而大多數應用程序是以4KB的倍數(例如4KB,8KB,16KB,32KB等)來執行讀寫操作的。
?在上面的例子中應用程序隨機寫操作請求的大小為4KB,然而iostat顯示平均請求大小為4.915KB,
?這種差別主要是由於Linux文件系統引起的,盡管我們執行的是隨機寫操作,確發現一些I/O被合並以便更有效地向硬盤寫入數據。

註釋:當文件系統使用默認的異步模式時,在iostat中只有請求平均大小的顯示是正確的。
?盡管應用程序在執行寫操作時求有明確請求的大小,但I/O層仍可能將大多數請求合並從而導致I/O平均大小的改變。

?
?

2.3.7 sar

?sar命令用來搜集、報告和保存系統活動信息。

sar命令由3個應用程序組成:sar,用來顯示數據;sa1和sa2,用來搜集和保存數據。

sar有非常多的選項,關於這些選項可以參看man手冊。sar是sysstat工具包的一部分。

利用sa1和sa2,可以配置獲得系統相關信息並記錄下來用於後續的分析。

提示:我們建議在你的絕大多數系統上運行sar。
?這樣一旦系統出現性能方面的問題,你手頭就可以有個非常詳細的系統信息,而這只需要少量的系統開銷而且並不會增加額外的成本。

為達成這樣的目的,需要在/etc/crontab添加相應配置(例子2-14)。在系統安裝sar後,會自動建立一個cron工作每天執行sar。


?例子2-14:使用cron啟動日誌自動報告

技術分享圖片

sar的原始數據保存於/var/log/sa/並根據月日分別保存在不同的文件中。
?要查閱你的結果,可以選擇日期和所需的性能數據。
?例如要想顯示從21日開始的網絡計數器,使用sar -n DEV -f sa21命令並通過管道傳給less,如例子2-15。


?例子2-15:使用sar顯示系統相關信息
?技術分享圖片

你也可以通過命令行執行sar獲得接近實時的報告(例子2-16)。


?例子2-16:監控特定CPU

技術分享圖片

通過搜集到的數據,你可以看到CPU使用率(%user,%nice,%system,%idle)、內存分頁、網絡I/O和傳輸情況、進程創建活動、塊設備活動和每秒鐘的中斷數量。
?
?

2.3.8 mpstat

在多處理器服務器上使用mpstat命令可以顯示所有可用處理器的使用情況,也會顯示所有CPU活動的平均值。
?mpstat是sysstat工具包的一部分。


?mpstat能顯示每個CPU的全面信息。mpstat也可以像vmstat命令設定取樣頻率和取樣次數來使用取樣模式生成相關統計信息。
?在例子2-17中執行mpstat -P ALL來顯示所有處理器的CPU平均使用率。


?例子2-17:多處理器系統中mpstat命令的輸出結果

技術分享圖片

使用下面的命令,每間隔一秒鐘顯示一次所有處理器的使用情況:

mpstat -P ALL 1 2


?例子2-18:在兩路服務器中mpstat的輸出示例

技術分享圖片

要了解mpstat完整的語法規則,輸入:

mpstat -?

?

?

2.3.9 numastat

?使用非一致性內存架構(NUMA)的系統如IBM System x 3950,如今NUMA架構在企業數據中心已經成為主流。

然而NUMA卻為性能調優過程帶來新的挑戰。如內存局部性問題在NUMA系統出現前是不用考慮的。

幸運的是,企業版Linux提供監控NUMA架構行為的工具。numastat能提供關於使用本地內存與遠端內存的比例和各節點內存配置的相關信息。

在numa_miss欄中顯示分配失敗的本地內存,在numa_foreign欄中顯示分配的遠端內存(較慢的內存)。

過多分配遠端內存會增加系統延遲並可能降低整體性能。綁定節點的進程使用本地RAM的內存映射可以大大提高系統性能。


例子2-19:numastat輸出結果示例

技術分享圖片

?

2.3.10 pmap

?pmap命令可以顯示一個或多個進程所使用的內存數量。

你可以使用這個工具來了解服務器上的某個進程分配了多少內存,並以此來判斷這是否是導致內存瓶頸的原因。

要得到更加詳細的信息,使用pmap -d選項。

例子2-20:init進程相關的內存信息

技術分享圖片

在輸出結果的最後一行顯示了一些重要的信息,如下:

mapped :映射到文件的內存數量

writable/private :進程所占用的私有地址空間數量

shared :與其它進程共享的地址空間數量

你也可以查看地址空間所存儲的信息。當分別在32位和64位系統中執行pmap,你能發現一個有趣差異。
?
?關於pmap的完整語法,請執行:

pmap -?

2.3.11 netstat

netstat是常用工具之一。

如果你在網絡環境中工作,應該對它非常熟悉。

它可以顯示許多網絡相關信息如套接字使用情況、路由、接口、協議、網絡數據統計等。

下面是以下基本的選項:

-a :顯示所有套接字信息

-r :顯示路由信息

-i :顯示網絡接口信息

-s :顯示網絡協議信息

還有很多其他有用的選項,請查看man手冊。下面的例子顯示了套接字相關信息的輸出結果。

例子2-21:使用netstat顯示套接字相關信息

技術分享圖片

套接字信息

Proto :套接字使用的協議(tcp,udp,raw)。

Recv-Q :連接此套接字的用戶程序為復制的字節數量。

Send-Q :遠程主機未確認的字節數量。

Local Address :本地套接字的地址和端口。除非使用--numeric(-n)選項,否則套接字地址將被解析成域名(FQDN)端口號則被轉換成相應的服務名稱。

Foreign Address :遠程主機套接字的地址和端口號。

State :套接字狀態。由於在原始模式【raw mode】和UDP沒有狀態,此列顯示為空。
?關於可能顯示的狀態,請參見圖1-28或者查看man手冊。
?

2.3.12 iptraf

iptraf可以實時監控TCP/IP網絡流量並實時產生相關報告。
?它可以以接口和協議來顯示每個會話的TCP/IP流量的統計信息。
?iptraf是由iptraf工具包提供的。

iptraf為我們提供如下信息:

? IP traffic monitor: TCP連接相關的網絡傳輸統計信息
? General interface statistics: 網絡接口的網絡傳輸統計信息
? Detailed interface statistics: 按協議分類顯示網絡傳輸統計信息
? Statistical breakdowns: 按TCP/UDP和封包大小分類顯示網絡傳輸統計信息
? LAN station monitor: 按第二層地址分類顯示網絡傳輸統計信息

下面是由iptraf產生的報告。
技術分享圖片

?圖2-2:使用iptraf按協議分類顯示TCP/IP網絡傳輸統計信息

技術分享圖片
圖2-2:使用iptraf按封包大小分類顯示TCP/IP網絡傳輸統計信息

?

2.3.13 tcpdump / ethereal

tcpdump和ethereal可以用來獲取和分析網絡通訊活動,他們都是使用libpcap庫來捕獲網絡封包的。
?在混雜模式下他們可以監控網絡適配器的所有通訊活動並捕獲網卡所接收的所有幀。
?要想設置網絡接口為混雜模式並執行這些命令來捕獲所有的網絡封包,需要具有超級用戶的權限。

你可以使用這些工具來探究網絡相關問題。你可以發現TCP/IP重發、窗口大小的縮放、名字解析的問題、網絡配置錯誤等。
?註意這些工具只能監控網絡適配器所接收到的幀,並不能監控到整個網絡的通訊情況。


?tcpdump

tcpdump是一個簡單卻很強大的工具。
?它提供基本協議的分析功能,讓你獲得網絡使用的概況。
?tcpdump支持許多選項和復雜的表達式用於過濾所要捕獲的幀(捕獲過濾器【Capture filter】),下面讓我們一起來了解一下。

選項:

-i <接口> :網絡接口

-e :打印鏈路層【link-level】頭信息

-s <snaplen> :從每個封包中截取<snaplen>字節

-n :不執行DNS解析

-w <文件名> :寫入文件

-r <文件名> :從文件中讀取

-v, -vv, -vvv :輸出詳細的結果


?捕獲過濾器表達式:

關鍵字:host dst, src, port, src port, dst port, tcp, udp, icmp, net, dst net, src net, 等

下面操作符可以用來合並多個Primitive:

非(‘!‘或者‘not‘)

與(‘&&‘或者‘and‘)

或(‘||‘或者‘or‘)


?常用表達式示例:

? DNS查詢封包

tcpdump -i eth0 ‘udp port 53‘


?? 連接192.168.1.10的FTP控制和數據會話。

tcpdump -i eth0 ‘dst 192.168.1.10 and (port ftp or ftp-data)‘


?? 連接到192.168.2.253的HTTP會話

tcpdump -ni eth0 ‘dst 192.168.2.253 and tcp and port 80‘


?? 連接到192.138.2.0/24子網的Telnet會話

tcpdump -ni eth0 ‘dst net 192.168.2.0/24 and tcp and port 22‘


?? 源地址與目的地址不在192.168.1.0/24子網內並且TCP SYN或TCP FIN標誌開啟(TCP連接建立或結束)

tcpdump ‘tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net 192.168.1.0/24‘


?例子2-22:tcpdump輸出結果示例

技術分享圖片

關於更多詳細內容參見man手冊


?ethereal

ethereal與tcpdump有著相似的功能但更加復雜,有進階的協議分析和報告功能。它可以通過圖形化界面或命令行來使用,
?它屬於ethereal工具包的一部分。

像tcpdump一樣它也可以使用捕獲過濾器,並且還支持顯示過濾器,這樣可以減少幀。
?
?這裏有一些常用表達式例子:

? IP

ip.version == 6 and ip.len > 1450
ip.addr == 129.111.0.0/16
ip.dst eq www.example.com and ip.src == 192.168.1.1
not ip.addr eq 192.168.4.1
?

? TCP/UDP

tcp.port eq 22
tcp.port == 80 and ip.src == 192.168.2.1
tcp.dstport == 80 and (tcp.flags.syn == 1 or tcp.flags.fin == 1)
tcp.srcport == 80 and (tcp.flags.syn == 1 and tcp.flags.ack == 1)
tcp.dstport == 80 and tcp.flags == 0x12
tcp.options.mss_val == 1460 and tcp.option.sack == 1
?

? Application

http.request.method == "POST
smb.path contains \\\\SERVER\\SHARE

技術分享圖片
圖2-4:ethereal圖形化界面

? ?2.3.14 nmon
?nmon是Nigel‘s Monitor的簡稱,由Nigel Griffitchs開發的一款常用系統性能監控工具。
?因為nmon包含多種子系統的性能信息,可以用作性能監控的單一來源。
?使用nmon可以多得任務的相關性能信息包括處理器使用率、內存使用率、運行隊列信息、硬盤I/O相關統計信息、網絡I/O相關統計信息、分頁活動情況和進程性能指標。


?要運行nmon,只需啟動該工具並輸入所感興趣子系統對應的字母即可。例如要獲得CPU、內存、硬盤的相關信息,啟動nmon並輸入c m d。

在nmon中一個非常有用的功能就是將性能相關統計信息保存到CSV文件中用於後續分析。
?在表格處理軟件中導入nmon輸出的CSV文件來產生圖形化報表。要達成這樣的目的,nmon啟動時需要使用-f參數(使用nmon -h查看詳細內容)。
?例如執行nmon每30秒鐘快照一次連續一個小時獲取數據,可以使用例子2-23的命令。


?例子2-23:使用nmon來記錄性能相關數據

技術分享圖片

上面例子的輸出結果將被存儲在當前目錄的一個文本文件中,文件名為<hostname>_date_time.nmon。

關於nmon的更多信息,我們建議你訪問

http://www-941.haw.ibm.com/collaboration/wiki/display/WikiPtype/nmon

下載nmon,訪問

http://www.ibm.com/collaboration/wiki/display/WikiPtype/nmonanalyser

?
?

2.3.15 strace

?strace命令可以攔截並記錄進程所使用的系統調用和進程所接收到的信號。
?這是一個非常有用的診斷、指導和調試工具。系統管理員使用其來解決應用程序相關問題。
?

要跟蹤某個進程,需要指定被監控進程的進程ID(PID):

strace -p <pid>

例子2-24展示了strace的輸出結果。

例子2-24:strace監控httpd進程的輸出結果

技術分享圖片

註意:當針對某個進程執行strace命令,此進程的性能將大大降低,所以只有在搜集數據時才執行此命令。

這裏有另外一個有趣的用法。此命令可以報告在執行某個命令時被系統調用消耗了多少內核時間。

strace -c <command>


?例子2-25:strace關於系統時間的計算結果

技術分享圖片

關於strace命令的完整用法,輸入:

strace -?

?
?

2.3.16 proc文件系統

?proc文件系統並不是一個實際的文件系統,然而他卻非常有用。
?它並不是用來存儲數據的,而是提供了運行中內核的接口。
?proc文件系統能讓管理員隨時監控和調整內核。
?
?圖2-5展示了proc文件系統的示例。大多數Linux性能量度工具都要依靠/proc所提供的信息。

技術分享圖片

在proc文件系統中,有幾個子目錄我們從名字就能辨別出他們的用途,但proc目錄中的大部分信息是很難讀懂的,
?你最好使用像vmstat這樣的工具通過更易讀的方式來顯示各種統計信息。
?註意在不同的系統架構中proc文件系統的布局和所包含信息有所不同。

? /proc目錄中文件
proc根目錄下的文件涉及多種有關系統的統計信息。你可以使用如vmstat和cpuinfo來顯示這些信息。

? 數字1到X
有一些以數字命名的子目錄,代表運行中進程和相應的進程ID(PID)。目錄結構總是以PID 1開始,它代表init進程。每個以數字命名的子目錄都存儲著所對應進程的統計信息,如進程所映射的虛擬內存。


?? acpi

ACPI表示高級配置和電源管理接口,大多數臺式電腦和筆記本電腦現在都支持此技術。因為ACPI主要為PC技術,在服務器系統中通常被禁用。關於更多ACPI的資料參考:http://www.apci.info


?? bus

這個子目錄包含總線子系統的相關信息,如PCI總線或USB接口。


?? net

net子目錄包含關於網絡接口的大量原始統計數據,如接收的廣播封包或每個網絡接口的路由信息。


?? scsi

此目錄包含SCSI子系統相關信息,如連接的設備或驅動的版本。在大多數IBM System x服務器中會有一個名叫ips的目錄用來記錄IBM ServeRAID控制器相關信息。


?? sys

在sys子目錄下你能找到可以調整的內核參數如虛擬內存管理或網絡堆棧。我將在4.3“Changing kernel parameters”中介紹一些選項和可調值。


?? tty

tty子目錄包含系統各虛擬終端相關信息和它們連接了哪些物理設備。

?

2.3.17 KDE System Guard

?KDE System Guard (KSysguard)是KDE的任務管理和性能監控工具。
?它采用client/server架構,可以監控本機也可以監控遠端主機。

技術分享圖片
圖2-6:KDE System Guard默認的窗口


?前端圖形界面使用傳感器(sensors)獲得要顯示的信息。傳感器返回的可以是一個簡單的數值或更復雜的信息如表格。
?針對不同的信息類型都提供了一個或多個顯示界面。這些顯示界面被組織在多個工作表中,工作表可以獨立存儲和加載。
?

KSysguard主窗體包括菜單欄、工具欄和狀態欄、傳感器瀏覽區以及工作區。
?當初次啟動後,你可以看到默認的界面:本機localhost列在傳感器瀏覽區中,在工作區中有兩個標簽。


?每個傳感器監控一個特定的系統值。所有的傳感器都可以拖拽至工作區。

? 在工作區中刪除和覆蓋傳感器
? 編輯工作表屬性,增加行和列的數量
? 創建一個新的工作表,放入你所需要的傳感器


?工作區【Workspace】

圖2-7中工作區有兩個標簽:

? 系統負載,首次啟動KSysguard時默認的視圖。
? 進程表

技術分享圖片
圖2-7:KDE System Guard傳感器瀏覽


?系統負載【System Load】

系統負載工作表有四個傳感器窗口:CPU負載,平均負載(1分鐘),物理內存,和交換內存。多個傳感器可以顯示在同一窗口中。
?要了解窗口顯示的是哪些傳感器,將鼠標移動到圖形上就會顯示對應的說明。你也可以在圖形上右鍵點擊Properties,然後點擊Sensors標簽(圖2-8)。
?這裏也顯示了各傳感器在圖形中所對應的顏色。

技術分享圖片

圖2-8:傳感器相關信息

進程表【Process Table】

點擊Process Table標簽可以顯示服務器中所有運行中進程的相關信息(圖2-9)。
?默認情況下此表格是按系統CPU使用率進行排序的,但也可以通過點擊不同表頭使用相應的欄位排序。

技術分享圖片
圖2-9:進程表視圖


?設置工作表
對於你希望監控的環境或特定區域,你可能需要使用多個不同的監控傳感器。最好的方法就是創建一個自定義的工作表。

在本節中,我們將一步步指導你創建圖2-12那樣的工作表。

1. 點擊File->New,創建一個空工作表。

技術分享圖片
圖2-10:新工作表的屬性


?2. 輸入標題和行列的數量;這將決定監控窗口的最大數量,在我們的示例中為4個。填完信息後,點擊OK創建一個空的工作表,如圖2-11。

註釋:刷新時間間隔為2秒鐘。

技術分享圖片
圖2-11:空工作表


?3. 要增加傳感器,只需從窗口左邊拖拽傳感器到右邊空閑區域。顯示的類型共有下面幾種:
- Signal Plotter:這種類型可以同時顯示一個或多個傳感器。
?如果需要顯示多個傳感器,會使用不同的顏色來標示。如果顯示屏足夠大,會使用網格來顯示所顯示數據的區間段。

默認情況下顯示為自動範圍模式【automatic range mode】,最小和最大值會自動設定。
?如果你想改變最小和最大值,你需要禁止自動範圍模式,然後在Properties對話框(在圖表中點擊右鍵)的Scales標簽中設置最小和最大值。

- Multimeter:以數字方式顯示傳感器的值。在Properties對話框中你可以定義上下限。如果超出限制時,使用警告色顯示。

- BarGraph:以條形顯示傳感器的值。在Properties對話框中你可以定義上下限。如果超出限制時,使用警告色顯示。

- Sensor Logger:不顯示任何值,而是將上述信息和日期時間一起記錄到文件中。

對於每個傳感器,你必須定義一個日誌文件,傳感器記錄的間隔時間和是否需要報警。

4. 點擊File->Save保存工作表
註釋:保存工作表,它將被存儲在用戶家目錄中,其它的管理員不能訪問你自定義的工作表。

技術分享圖片
圖2-12:工作表示例

要獲得更多關於KDE System Guard,請訪問:

http://docs.kde.org/

?
?

2.3.18 Gnome System Monitor

?盡管功能不像KDE System Guard那麽強大,但作為Gnome桌面環境的圖形化性能分析工具,
?Gnome System Monitor可以圖形化顯示性能相關系統資源用於發現可能的峰值和瓶頸。
?產生的所有統計信息都是實時,要想做長時間的性能分析需使用其它工具來完成。
?
?

2.3.19 Capacity Manager

??Capacity Manager是IBM Director系統管理套件中附帶的工具,需要ServerPlus Pach下運行。
?Capacity Manager讓跨系統平臺長期對進行性能度量變成可能。
?Capacity Manager可以進行容量計劃,評估未來系統容量需求。
?你可以將報告導出為HTML,XML和GIF文件,這些文件會被自動存儲在企業內存的web服務器上。
?IBM Director可以在不同的系統平臺中使用,這使得在復雜環境中搜集和分析數據變得容易。
?關於Capacity Manager的詳細內容請參考Tuning IBM System x Servers for Performance, SG24-587。

要使用Capacity Manager,你首先要安裝相應的RPM包。
?安裝RPM後,在IBM Director Console中選擇Capacity Manager->Monitor Activator

技術分享圖片
圖2-13:IBM Director Console任務列表
?

拖放Monitor Activator圖標到單獨或一組安裝有Capacity Manager包的系統上。
?在打開的窗口中你可以選擇需要監控的子系統。
?Linux版Capacity Manager不支持所有可用的性能計數器。系統統計信息受一些性能參數的限制。

技術分享圖片
圖2-14:啟用性能監控器
?

Monitor Activator窗口的右面顯示相關系統及當前狀態,在左面顯示各種可用的性能監控器。
?要添加新的監控器,選擇所需監控器並點擊On。關閉Monitor Activator窗口後所做改變立即生效。完成此步後,
?IBM Director開始搜集所需的性能指標並存儲在各系統的臨時位置中。

要創建搜集數據的報告,選擇Capacity Manager->Report Generator(參見圖2-13)並拖動圖標到單獨或一組系統上。
?IBM Director將詢問是否要立即產生還是排定後續執行(圖2-15)。

技術分享圖片
圖2-15:報告排程
?

在生產環境中,使用Capacity Manager定期產生報告是一個不錯的做法。我們的經驗是在每周末的非工作時間執行。
?立即產生報告還是排定時間產生報告取決於你的選擇。
?報告完成後會被存儲在中央IBM Director管理服務器上,可以使用Report Viewer來查看報告。圖2-16展示了Capacity Manager月報告的示例。

技術分享圖片
圖2-16:Capacity Manager報告示例

在Report Viewer窗口中你可以選擇不同的性能計數器。

Capacity Manager所搜集的數據可以導出成HTML或XML用來顯示在內部web服務器上或後續分析使用。

《Linux 性能及調優指南》2.3 監控工具