了解如何將用戶抱怨與系統(tǒng)活動(dòng)報(bào)告程序 (SAR) 關(guān)聯(lián),并使用 SAR 日志針對(duì)趨勢(shì)建立性能基準(zhǔn)。SAR 是系統(tǒng)管理員的理想工具。它以周期性的間隔捕獲系統(tǒng)性能度量。
用戶總是在出現(xiàn)性能問(wèn)題之后才想到它們。“為什么有些問(wèn)題以前并不重要,而現(xiàn)在卻變得重要了呢?”,如果忽略這樣的問(wèn)題,那么問(wèn)題就變成了“系統(tǒng)在出現(xiàn)所謂的問(wèn)題時(shí)狀態(tài)如何呢?”。通過(guò)周期性地獲取性能快照和查看數(shù)據(jù),您就離確定問(wèn)題的原因并創(chuàng)建相應(yīng)的解決方案更近了一步。
您的系統(tǒng)捆綁了 SAR 實(shí)用程序套件(事實(shí)上,大多數(shù)版本的 UNIX® 都安裝了 SAR),但可能還沒(méi)有啟用。要啟用 SAR,必須通過(guò) cron 工具以周期性的間隔運(yùn)行某些實(shí)用程序。在以 root 用戶身份運(yùn)行時(shí),使用 crontab -e 命令,然后提供如
清單 1 所示的配置。
# Collect measurements at 10-minute intervals 0,10,20,30,40,50 * * * * /usr/lib/sa/sa1 # Create daily reports and purge old files 0 0 * * * /usr/lib/sa/sa2 -A
第一個(gè)命令 sa1,是調(diào)用 sadc 以將性能數(shù)據(jù)收集到二進(jìn)制日志文件中的一個(gè) Shell 腳本。sa1 命令還確保了每天都使用不同的文件,我將在
時(shí)間是最重要的部分中對(duì)這一點(diǎn)進(jìn)行解釋。每隔十分鐘運(yùn)行一次該命令,這是粒度和系統(tǒng)性能影響之間的折衷辦法。
第二個(gè)命令 sa2,是將當(dāng)日二進(jìn)制日志文件中所有的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到文本文件的另一個(gè) Shell 腳本,然后它將清除七天之前的所有日志文件。參數(shù) -A 指定了從二進(jìn)制文件中提取哪些數(shù)據(jù)轉(zhuǎn)儲(chǔ)到文本文件中。盡管可以閱讀文本文件以查看系統(tǒng)該日的狀態(tài),但我將介紹如何更精確地查詢二進(jìn)制日志文件。
回頁(yè)首已經(jīng)收集到了相應(yīng)的數(shù)據(jù),但是必須通過(guò)查詢才能使其更有價(jià)值。不帶選項(xiàng)運(yùn)行 sar 命令,這將生成關(guān)于當(dāng)日 CPU 使用情況的基本統(tǒng)計(jì)信息。
清單 2 顯示了不帶任何選項(xiàng)的 sar 命令的輸出結(jié)果。(在不同的平臺(tái)中,可能會(huì)看到不同的列名。在一些 UNIX 版本中,sadc 命令將根據(jù)可用的信息來(lái)收集不同的數(shù)據(jù)。)這里的示例來(lái)自于 Sun Solaris 10,無(wú)論使用什么平臺(tái)都是類似的,但列名可能會(huì)稍有不同。
-bash-3.00$ sar SunOS unknown 5.10 Generic_118822-23 sun4u 01/20/2006 00:00:01 %usr %sys %wio %idle 00:10:00 0 0 0 100 . cut ... 09:30:00 4 47 0 49 Average 0 1 0 98
sar 命令輸出中的每一行都是一項(xiàng)單獨(dú)的度量,并且在最左邊的列中顯示了時(shí)間戳。其他列中則存放了相應(yīng)的數(shù)據(jù)。(根據(jù)命令行所使用參數(shù)的不同,這些列也會(huì)有所不同。)在
清單 2 中,CPU 使用情況被分解為四種類別:
%usr: CPU 花費(fèi)在用戶進(jìn)程(如應(yīng)用程序、Shell 腳本或與該用戶進(jìn)行的交互)上的時(shí)間的百分比。
%sys: CPU 用來(lái)執(zhí)行核心任務(wù)的時(shí)間的百分比。在本示例中該數(shù)字比較大,這是因?yàn)槲艺龔暮诵碾S機(jī)數(shù)生成器獲取數(shù)據(jù)。
%wio: CPU 等待塊設(shè)備(如磁盤(pán))輸入或輸出的時(shí)間的百分比。
%idle: CPU 未進(jìn)行任何有用操作的時(shí)間的百分比。
最后一行是所有數(shù)據(jù)點(diǎn)的平均值。然而,因?yàn)榇蠖鄶?shù)系統(tǒng)都會(huì)在忙時(shí)間段后經(jīng)歷空閑時(shí)間段,所以平均值并不能反映完整的情況。
同時(shí),對(duì)磁盤(pán)活動(dòng)也進(jìn)行了監(jiān)視。高磁盤(pán)使用率意味著,從磁盤(pán)請(qǐng)求數(shù)據(jù)的應(yīng)用程序更有可能會(huì)被阻塞(暫停),直到磁盤(pán)為該進(jìn)程做好準(zhǔn)備。通常,解決方案涉及到將文件系統(tǒng)拆分到不同的磁盤(pán)或陣列。然而,第一步是要知道出現(xiàn)了問(wèn)題。
sar -d 的輸出顯示了一個(gè)度量時(shí)間段內(nèi)各種與磁盤(pán)相關(guān)的統(tǒng)計(jì)數(shù)據(jù)。為了更加簡(jiǎn)潔,
清單 3 僅顯示了硬盤(pán)驅(qū)動(dòng)器的活動(dòng)。
$ sar -d SunOS unknown 5.10 Generic_118822-23 sun4u 01/22/2006 00:00:01 device %busy avque r+w/s blks/s avwait avserv . cut ... 14:00:02 dad0 31 0.6 78 16102 1.9 5.3 dad0,c 0 0.0 0 0 0.0 0.0 dad0,h 31 0.6 78 16102 1.9 5.3 dad1 0 0.0 0 1 1.6 1.3 dad1,a 0 0.0 0 1 1.6 1.3 dad1,b 0 0.0 0 0 0.0 0.0 dad1,c 0 0.0 0 0 0.0 0.0
和前面的示例一樣,最左邊的是時(shí)間。其他列如下:
device: 這是指正在進(jìn)行測(cè)量的磁盤(pán)或磁盤(pán)分區(qū)。在 Sun Solaris 中,必須通過(guò)查找 /etc/path_to_inst 中所報(bào)告的名稱將該磁盤(pán)轉(zhuǎn)換為物理磁盤(pán),然后將該信息交叉引用到 /dev/dsk 中的項(xiàng)目。在 Linux® 中,使用了磁盤(pán)設(shè)備的主從設(shè)備號(hào)。
%busy: 這是讀取或?qū)懭朐O(shè)備的時(shí)間的百分比。
avque: 這是用來(lái)串行化磁盤(pán)活動(dòng)的隊(duì)列的平均深度。avque 的值越大,發(fā)生的阻塞就越多。
r+w/s、blks/s:這分別是用每秒的讀或?qū)懖僮骱痛疟P(pán)盤(pán)塊來(lái)表示的磁盤(pán)活動(dòng)。
avwait:這是磁盤(pán)讀或?qū)懖僮鞯却龍?zhí)行的平均時(shí)間(單位為毫秒)。
avserv:這是磁盤(pán)讀或?qū)懖僮魉鶊?zhí)行的平均時(shí)間(單位為毫秒)。
其中的一些數(shù)值,如 avwait 和 avserv 值,直接關(guān)系到用戶體驗(yàn)。磁盤(pán)的高等待時(shí)間可能表示多個(gè)人正在競(jìng)爭(zhēng)使用該磁盤(pán),這一點(diǎn)可以通過(guò)高 avque 數(shù)值來(lái)證實(shí)。高 avserv 值表示磁盤(pán)的速度較慢。
同時(shí)還收集了許多其他的項(xiàng)目,可使用相應(yīng)的參數(shù)來(lái)查看它們:
-b 參數(shù)顯示了緩沖區(qū)信息和使用緩沖區(qū)與必須寫(xiě)磁盤(pán)的比率。
-c 參數(shù)顯示了系統(tǒng)調(diào)用分解為一些常用的調(diào)用,如 fork()、exec()、read() 和 write()。高進(jìn)程創(chuàng)建會(huì)導(dǎo)致較差的性能,并且這是可能需要將一些應(yīng)用程序轉(zhuǎn)移到其他計(jì)算機(jī)的信號(hào)。
-g、-p 和 -w 參數(shù)顯示了分頁(yè)(交換)活動(dòng)。高分頁(yè)操作是內(nèi)存缺乏的信號(hào)。特別地,-w 選項(xiàng)顯示了進(jìn)程切換的次數(shù):高的數(shù)值表示計(jì)算機(jī)上運(yùn)行的內(nèi)容過(guò)多,該計(jì)算機(jī)在切換任務(wù)上花費(fèi)了比實(shí)際工作更多的時(shí)間。
-q 參數(shù)顯示了運(yùn)行隊(duì)列的大小,它與當(dāng)時(shí)的平均負(fù)載相同。
-r 參數(shù)顯示了一段時(shí)間的可用內(nèi)存和交換空間。
每種 UNIX 版本都對(duì) sar 實(shí)現(xiàn)了自己的度量集合和命令行參數(shù)。我介紹的這些都是比較常見(jiàn)的,并且代表了更加有用的元素。
回頁(yè)首到此為止,示例顯示了當(dāng)日的數(shù)據(jù),它雖然具有相應(yīng)的作用,但也存在著兩個(gè)問(wèn)題:
感興趣的是一個(gè)小時(shí)內(nèi)的數(shù)據(jù),但獲得的是一整天的。
需要返回到不同的日期。
正如前面看到的,sa1 將每天的數(shù)據(jù)保存到不同的文件中。查看 sa1 腳本,會(huì)發(fā)現(xiàn)所使用的目錄,如果是 Sun Solaris 10,該目錄為 /var/adm/sa。該目錄中有一些文件,它們以“sa”或“sar”開(kāi)頭,后跟一個(gè)數(shù)字。這個(gè)數(shù)字表示一個(gè)月中的第幾天,以“sar”開(kāi)頭的文件是該日數(shù)據(jù)的文本轉(zhuǎn)儲(chǔ)(由夜間運(yùn)行的 sa2 所創(chuàng)建),而以“sa”開(kāi)頭的文件保存著數(shù)據(jù)的二進(jìn)制版本。實(shí)際上,包含當(dāng)前日期的文件是啟動(dòng) sar 時(shí)所讀取的文件。
為 sar 命令指定 -f 以選擇要讀取的文件。如果今天是一個(gè)月中的第 23 日,可以使用命令 sar -f /var/adm/sa/sa22 來(lái)讀取 sa22 以查看昨天的數(shù)據(jù)。還可以傳遞介紹過(guò)的其他參數(shù)以訪問(wèn)不同類型的數(shù)據(jù)。
可以做的第二件事情是,通過(guò)使用 -s 和 -e 參數(shù)(即開(kāi)始 和結(jié)束)來(lái)指定具體時(shí)間以縮小查詢的范圍。請(qǐng)注意,-s 并不是包含性的,所以必須從所選擇的開(kāi)始時(shí)間中多減去十分鐘。繼續(xù)前面的示例,
清單 4 顯示了交換文件的使用情況和從第 22 天的 2:30 p.m. 到 3:00 p.m 的運(yùn)行隊(duì)列。
# sar -f /var/adm/sa/sa22 -s 14:20 -e 15:00 -w -q -i 4 SunOS unknown 5.10 Generic_118822-23 sun4u 01/22/2006 14:20:00 swpin/s bswin/s swpot/s bswot/s pswch/s 14:30:00 0.00 0.0 0.00 0.0 140 14:40:01 0.00 0.0 0.00 0.0 144 14:50:01 0.00 0.0 0.00 0.0 140 15:00:00 0.00 0.0 0.00 0.0 139 Average 0.00 0.0 0.00 0.0 140 14:20:00 runq-sz %runocc swpq-sz %swpocc 14:30:00 10.5 100 0.0 0 14:40:01 10.5 100 0.0 0 14:50:01 10.4 100 0.0 0 15:00:00 10.5 100 0.0 0 Average 10.5 100 0.0 0
回頁(yè)首簡(jiǎn)單查看一下
清單 4,它顯示出交換活動(dòng)為零,每秒大約發(fā)生 140 次進(jìn)程切換,并且平均負(fù)載略高于 10。假設(shè)您當(dāng)時(shí)正在調(diào)查較差性能的要求,那么從這些數(shù)據(jù)中可以得到什么結(jié)論呢?
因?yàn)闆](méi)有發(fā)現(xiàn)交換過(guò)程,無(wú)論在運(yùn)行什么進(jìn)程,它們并沒(méi)有消耗大量的內(nèi)存。
該問(wèn)題可能是由一組長(zhǎng)時(shí)間運(yùn)行的進(jìn)程所導(dǎo)致,因?yàn)檫\(yùn)行隊(duì)列和進(jìn)程切換相對(duì)穩(wěn)定。如果以前并不是這樣,那么可以懷疑是應(yīng)用程序級(jí)的問(wèn)題,如繁忙的 Web 服務(wù)器。
由于了解到
清單 3 的輸出顯示了同一時(shí)間段的其他數(shù)據(jù),您可以查看某塊使用頻繁的磁盤(pán)(根據(jù) sar -b 為百分之 31,同時(shí)每秒 16,000 個(gè)盤(pán)塊)。該磁盤(pán)是 home 目錄分區(qū),根據(jù)用戶想要完成的任務(wù)不同,他/她可能會(huì)遇到較慢的響應(yīng)。
快速查看該時(shí)間段內(nèi)的 CPU 使用情況,顯示出系統(tǒng)大約占用了百分之 80 的 CPU,剩下的用于用戶任務(wù)。作為系統(tǒng)管理員,可以通過(guò)下面三種方式使用這一信息:
回到前幾天的日志中。在本例中,我發(fā)現(xiàn)問(wèn)題開(kāi)始于 1:00 p.m.,并于第二天早上結(jié)束。
嘗試將該活動(dòng)與任何可能在該日開(kāi)始的 cron 工作關(guān)聯(lián)。
嘗試找到其趨勢(shì)。查看另外幾天的數(shù)據(jù),我發(fā)現(xiàn)性能是正常的,這并不表示系統(tǒng)已經(jīng)達(dá)到其上限。
在本例中,看來(lái)已經(jīng)將問(wèn)題隔離出來(lái)了,出于該原因,我有意地使用 Shell 腳本來(lái)運(yùn)轉(zhuǎn)磁盤(pán)以創(chuàng)建一些有趣的 sar報(bào)告!然而發(fā)現(xiàn)了一個(gè)趨勢(shì),如在工作時(shí)間內(nèi) home 驅(qū)動(dòng)器比較繁忙,關(guān)于該問(wèn)題可能存在完成某項(xiàng)任務(wù)的調(diào)用??赡艿慕鉀Q方案包括,將 home目錄拆分到其他磁盤(pán)、安裝高速磁盤(pán)或?qū)⑵滢D(zhuǎn)移到其他地方,如 Network Attached Storage (NAS)。
回頁(yè)首以周期性的間隔獲取關(guān)于系統(tǒng)的定性數(shù)據(jù),這是查找性能瓶頸并確定是否需要進(jìn)一步操作的有效方法??梢允褂?SAR及其相關(guān)實(shí)用程序來(lái)完成這項(xiàng)任務(wù),每隔十分鐘獲取一次快照并使用前端工具來(lái)訪問(wèn)這些數(shù)據(jù)。盡管實(shí)際上需要一定的策略,但系統(tǒng)管理員可以使用所提供的大量信息來(lái)發(fā)現(xiàn)系統(tǒng)中出現(xiàn)的問(wèn)題,以及確定是否需要進(jìn)行進(jìn)一步的調(diào)查工作。
學(xué)習(xí)
您可以參閱本文在 developerWorks 全球站點(diǎn)上的
英文原文SAR 運(yùn)行于大多數(shù) UNIX 版本中,包括
AIX®、
HP-UX 和
Linux。
跟蹤最新的
developerWorks 技術(shù)事件與網(wǎng)絡(luò)廣播。
UNIX Insider Perfomance Q&A 欄目為 Solaris 性能優(yōu)化提供了一些有價(jià)值的建議,包括對(duì) sar 命令結(jié)果的更詳細(xì)的解釋。
如果您喜歡上了 sar,那么也有可能會(huì)喜歡 iostat 和 vmstat,您可以使用它們對(duì)當(dāng)前系統(tǒng)活動(dòng)進(jìn)行更深入地研究。
Solaris System Adminstration Guide 概述了這些工具的使用,以及關(guān)于 sar 更詳細(xì)的信息。和 sar 一樣,大多數(shù)的信息都適用于其他 UNIX 版本。
我曾撰寫(xiě)了關(guān)于
使用 vmstat 命令來(lái)監(jiān)視 Linux 當(dāng)前活動(dòng)的文章,它們也適用于 AIX、Solaris 和 HP-UX 等系統(tǒng)。
獲得產(chǎn)品和技術(shù)
使用
IBM 試用軟件開(kāi)發(fā)您的下一個(gè)項(xiàng)目,可直接從 developerWorks 下載這些試用軟件。
SarCheck® 具有以 SAR 為基礎(chǔ)提供數(shù)據(jù)圖形視圖的商業(yè)產(chǎn)品??梢垣@得其
免費(fèi)評(píng)估版。
討論
Sun Managers Mailing List 是討論 Solaris 性能優(yōu)化和其他 Solaris 問(wèn)題的好地方。
參與
developerWorks 博客,從而參加到 developerWorks 社區(qū)中來(lái)。
從 1994 開(kāi)始,Sean Walberg 就一直在學(xué)術(shù)、企業(yè)和 Internet 服務(wù)提供者環(huán)境中從事 Linux 和 UNIX 系統(tǒng)的研究。在過(guò)去幾年里,他撰寫(xiě)了大量有關(guān)系統(tǒng)管理的文章。您可以通過(guò)
sean@ertw.com 與 Sean 聯(lián)系。