solstice 回復于:2003-06-25 16:18:51 |
第十一章 性能監視
目標 完成本章的學習后,你將能夠: l 描述監視系統,網絡和應用級別負荷的命令 l 計算網絡帶寬消耗的百分比 l 測試NFS客戶/服務器的效率 介紹 本章描述的命令可以幫助你定位和查找網絡,應用程序和系統級瓶頸的故障點。 監視服務器 ——關于命令: /usr/bin/iostat ————磁盤負荷 命令:iostat 報告了終端和(更多有用的)磁盤的I/O活動。Iostat 用來測定一個服務器系統的磁盤負荷。 在下面的例子中,iostat 每5秒來測定一個磁盤的 I/O: # iostat –D 5 輸出的第一行總結了自系統第一次啟動后,I/O的統計。隨后的每行則表現了每隔一個具體的時間的活動。 以下的例子顯示了一個磁盤負荷不平衡的服務器: # iostat –D 5 sd0 sd1 sd2 sd3 rps wps util rps wps util rps wps util rps wps util 0 0 0.0 0 0 0.2 0 0 0.2 19 0 56.5 0 1 2.6 0 0 0.0 0 0 0.0 0 17 99.2 4 0 8.0 0 0 0.0 0 0 0.0 14 0 89.3 0 2 2.3 0 0 0.0 0 0 0.0 7 17 78.0 . . 對比 sd0,sd1,sd2和sd3的util字段。注意,磁盤sd3被高負荷的使用著,并且讀和寫的I/O是混合的。其它磁盤 sd0,sd1,和sd2未被充分使用。 下面的這個例子是一個磁盤負荷比較平衡的服務器: # iostat –D 5 sd0 sd1 sd2 sd3 rps wps util rps wps util rps wps util rps wps util 6 8 8.0 10 9 40.2 7 6 20.2 9 0 25.5 0 1 2.6 8 4 36.8 5 14 45.0 7 9 39.2 4 0 8.0 7 4 27.0 6 12 37.0 4 7 29.3 0 2 2.3 4 6 23.0 0 8 23.3 7 1 38.6 . . iostat 是一個有用的服務器配置命令。用來在每個磁盤上測量利用的程度和活動(讀/寫)的類型,管理員可以為服務器上的數據選擇最佳位置來共享給使用NFS的客戶端。 例如,當配置一個服務器來支持額外的客戶時,可以iostat 來識別磁盤的可選用的級別。為了保持全部磁盤的負荷平衡,管理員可以使用 iostat 統計來為客戶端的根區,交換區,和體系統結構區,以及終端用戶的home目錄分配空閑的位置。 ——關于命令:/usr/bin/vmstat 命令:vmstat 報告關于進程,虛擬內存,磁盤,中斷,及CPU活動的統計。 更為重要的是, vmstat 可以用來快速的發現CPU和內存的瓶頸,以下舉個例子來說明 vmstat 的輸出。 # vmstat 1 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s3 s6 in sy cs us sy id 1 0 5 516 0 0 1 0 0 0 0 0 0 0 9 60 48 4 2 94 0 0 3 75980 0 0 13 184 4 236 0 76 1 0 187 245 127 6 14 80 1 0 4 75984 0 0 0 96 0 40 0 60 0 0 148 152 100 7 5 88 0 0 2 75984 0 0 0 120 0 176 0 53 0 0 131 84 86 6 5 89 ————執行隊列 在字段 procs 下的列描述了在可執行隊列中的進程號。字段 r 表示進程已經裝入內存中。下一個字段 b 描述了不能被執行的進程號,因為這些進程要等待磁盤,終端或網絡的I/O操作來完成。在字段 w 中所表示的是進程已經被交換出去。 ————虛擬內存 字段 sr 指出了每秒中頁守護進程的循環次數。這個進程只在有效的內存很少的情況下才運行。如果每秒的連續值大于20,則說明內存已經不足。 ————CPU的利用率 字段cpu所在的列描述了基于用戶和系統調用的CPU的利用率。連續的低值在cpu的id字段(值低于10)說明CPU非常忙。 許多可獵取的進程被交換出去(如在procs字段中所指明的那樣),內存中的少量的可獵取進程指出了物理內存的缺點。 在例子中,虛擬內存的大負荷使用,磁盤的I/O可能會是系統的瓶頸。 # vmstat 1 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s3 s6 in sy cs us sy id 1 0 5 516 0 0 1 0 0 0 0 0 0 0 9 60 48 4 2 94 0 0 3 75980 0 0 13 184 4 236 0 76 1 0 187 245 127 6 14 80 1 0 4 75984 0 0 0 96 0 40 0 60 0 0 148 152 100 7 5 88 0 0 2 75984 0 0 0 120 0 176 0 53 0 0 131 84 86 6 5 89 ——關于命令:/usr/sbin/sar 命令:sar 是系統活動的指示器。Sar 可以交互式的或用批處理方式來報告系統資源的利用率。 ————交互式的報告 以下這個交互式的例子測試了CPU的利用率并且每隔10秒取得一個樣本,共兩個。 # sar 10 2 SunOS bear 5.5 Generic sun4m 01/20/96 01:53:14 %usr %sys %wio %idle 01:53:24 0 0 0 100 01:53:34 0 1 2 97 Average 0 1 99 # ————批處理方式報告 如果指定 –o ,那么樣本將會保存在一個二進制格式的文件中。 # sar –o /tmp/sar.file 10 2 # 文件中收集的信息也許可以用選項 –f 來重新進行。 # sar –f /tmp/sar.file SunOS bear 5.5 Generic sun4m 01/20/96 01:53:14 %usr %sys %wio %idle 01:53:24 0 0 0 100 01:53:34 0 1 2 97 Average 0 1 99 # 下面使用 sar 的選項來幫助你發現關鍵性系統資源的利用率。 ————磁盤利用率 使用 –d 選項來發現不平衡的磁盤負荷。注意在下面的例子中,字段 %busy 中的磁盤 sd3 比所有其它的設備都要忙。 # sar –d 10 2 SunOS bear 5.5 Generic sun4m 01/20/96 02:03:05 device %busy evque r+w/s biks/s avwait avsery 02:03:15 fd0 0 0.0 0 0 0.0 0.0 sd2 0 0.0 0 0 0.0 0.0 sd3 67 0.7 9 2206 0.0 75.5 02:03:25 fd0 0 0.0 0 0 0.0 0.0 sd2 2 0.2 1 22 88.5 46.1 sd3 69 0.7 9 2182 0.0 79.7 Average fd0 0 0.0 0 0 0.0 0.0 Sd2 1 0.1 1 11 88.5 46.1 Sd3 68 0.7 9 2194 0.0 77.6 # ————虛擬內存 使用選項 –g 來監視虛擬內存的使用。字段 pgscan /s 指出了由守護進程 pageout執行的每秒搜索的頁面數。這個守護進程只運行在有效內存很低的情況下。連續的值大于20每秒說明內存已經不足。 # sar –g 10 2 SunOS bear 5.5 Generic sun4m 01/20/96 02:22:34 pgout /s ppgout /s pgfree /s pgscan /s %ufs_ipf 02:22:44 1.20 12.08 21.06 23.85 7.06 02:22:54 1.10 9.00 19.30 21.30 10.81 Average 1.15 10.54 20.18 22.58 7.35 # ————執行隊列 使用 –q 選項來查找執行隊列中有多少進程在排隊。字段 runq-sz 中指出了內存中等待執行的進程線數。如果值始終大于2,那么系統限制于CPU。 字段 %runoclearcase/" target="_blank" >cc 表示運行隊列是否被占用。較小的值是比較可取的,因為它表明每個隊列中的進程都被較好的分配了時間。 # sar –q 10 2 SunOS bear 5.5 Generic sun4m 01/20/96 02:35:31 runq-sz %runocc swpq-sz %swpocc 02:35:41 12.6 100 0 02:35:51 12.0 100 0 Average 12.3 100 0 # ————自由內存 使用 –r 選項來查找可用內存頁和交換文件磁盤塊的平均數量。 Freemem 字段指出了每個間隔中能為用戶進程有效使用的內存(在 SPARC結構中為4K)頁的平均數量。 Freeswap 字段顯示了有多少個512字節的扇區是可以為交換使用的。 Freemem 的連續低值(少于安裝內存的6%)則表示有效的內存不夠,和一個可能的瓶頸。 # sar –r 10 2 SunOS bear 5.5 Generic sun4m 01/20/96 02:55:11 freemem freeswap 02:55:22 2686 178006 02:55:32 2208 160269 Average 2447 169151 # ——命令:/usr/sbin/swap 命令:swap 用來顯示使用的交換空間,和在磁盤上增加和移動交換區。 ————顯示交換空間 下面這個例子使用選項 –l 在每個交換設備上顯示全部的磁盤扇區(塊)列表和未使用的扇區(自由)。 # swap –l swapfile dev swaplo blocks free /dev/dsk/e0t3d0s1 32,25 8 187912 127088 # 默認的交換區是第二個磁盤設備分區包括根分區,就象在例子中顯示的那樣。 ——創建和增加交換區 附加的交換分區可以是規則文件(由命令 mkfile 創建)也可以是磁盤分區。下面的例子用命令: mkfile 來創建一個10M的交換分區。 # mkfile 10m /exp/swap # 附加的交換空間也可以使用命令:swap 的選項 –a 。下面的例子增加一個交換文件,然后更新交換空間列表。 # swap –a /exp/swap # swap –l swapfile dev swaplo blocks free /dev/dsk/c0t3d0s1 32,25 8 187912 126920 /exp/swap 8 20472 20472 # ————移除交換區 使用選項 –d 來移除交換區。在這個例子中,先前增加的交換區被移除,并核實調整之后的交換空間。 # swap –d /exp/swap # swap –l swapfile dev swaplo blocks free /dev/dsk/c-t3d0s1 32,25 8 187912 126920 # 如果交換區有任何活動的磁盤扇區包含交換到進程中的數據,命令: swap 在移除交換區前會安全的對數據進行重新定位。 ——命令:/usr/bin/ps 命令:ps 打印所有活動進程的信息。更重要的是,ps 命令可以查找進程的ID號(PID),(可用來向進程發送終止或掛起的信號),進程狀態(進程是否已經被裝入內存等待執行,交換到磁盤等等),累計的CPU資源消耗(通常用來捕獲失控的進程)。 下面舉例說明 ps 的輸出: # ps –el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CO 8 R 7198 22028 19551 80 1 30 ff7c0000 349 ? 83:53 xl 19 S 0 3 0 80 0 SY ff19d000 0 f00c26ae ? 265:00 fsfl 8 O 0 26070 26053 14 1 20 ff78c000 142 pts/4 0:00 p 字段S來描述每個進程的狀態(從剩余的秒來說)。下面對每個可能出現的進程狀態做一個描述。 ————進程狀態 l O 進程正在被處理器運行 l S 睡眠狀態:進程正在等待一個事件來完成 l R 可捕獲的:進程正在運行隊列中 l I 空閑的:進程正準備創建 l Z 僵尸進程:進程終止,父進程不必等待 l T 追蹤:進程被一個信號停止,因為父進程正在追蹤于它 l X SXBRK 狀態:進程正在等待更多的主內存 ——命令:/usr/bin.netstat 命令:netstat 顯示了多種網絡關系信息,包括每個網絡接口的傳輸統計。 ————沖突比率 在下面的例子中使用 10秒的間隔來測試包沖突的比率。 # netstat –i 10 input le0 output input (Total) output packets errs packets errs colls packets errs packets errs colls 1929138 0 1590861 3 73176 1946182 0 1607905 3 73176 16 0 1 0 0 16 0 1 0 0 3 0 3 0 0 3 0 3 0 0 一個單一主機的沖突比率是輸出沖突的數量除以總共的輸出包的量。網絡沖突比率按如下的方式計算: l 在所有活動主機上運行這個命令來收集網絡的統計量,用總共的沖突數除以總共的輸出包數就可以得出網絡的沖突比率。 l 沖突的比率被定義為:輸出的沖突數除以總共的輸出包,再乘以100。拿上個例子來說: 73176 / 1590861 * 100=4.6% 的沖突比率。 沖突比率超過5%,則要先考慮網絡的負荷是否過重。 沖突比率超過10%,這是一個超負荷的網絡,要考慮把它分段。 ——命令:/usr/sbin/snoop 命令: snoop 在網絡上捕獲和顯示包的內容。Snoop 可以用來定位許多網絡異常的源和目標如NFS的重發。 這個命令的輸出可以用它所捕獲的大量數據快速的淹沒磁盤的可用空間。超負荷的有用信息包括如下: l 捕獲一個二進制文件 # snoop –o packet.file # CTRL-c 顯示這個二進制文件的內容 # snoop –i packet.file l 只捕獲有關的信息如包含在前120個字節內的包的頭文件 # snoop –s 120 l 捕獲指定的包的數量 # snoop –c 1000 l 捕獲 tmpfs 來避免因磁盤瓶頸撤消的包信息 # snoop –o /tmp/packet.file l 指定過濾器來捕獲指定類型網絡活動 # snoop broadcast l 使用 awk ,sed ,grep ,來解釋和總結 snoop 輸出。 ——命令:/usr/bin/nfsstat 命令:nfsstat 顯示了關于NFS和RPC的內核接口的統計信息。 NFS對決定NFS的客戶/服務器的一個時期內的工作負荷也是很有用的。字段 calls 顯示了NFS的操作數量,也就是服務器提供的服務或客戶端的請求。 # nfsstat –rc Client rpc: Calls badcalls retrans badxid timeout wait newcred timers 186992 7 225 170 166 0 0 370 . # 字段 badxid 顯示了客戶端接收了多少次關于一個單一請求的肯定應答。 字段 retrans 指明了在一個時間周期內,客戶端因沒有接收到一個肯定的應答而重新發送請求的次數。 ————評價NFS的客戶/服務器統計 如果 badxid 和 retrans 值都關閉的話,那么,服務器對客戶端的響應則不夠快速。優化服務器的性能也就相應提高了網絡的性能。 客戶端可查覺到的性能可以通過增加客戶的文件系統表或映射的time-out(timeo)選項值來提高。默認值為11(1.1秒)。網絡的響應時間不會提高,但客戶會體驗到更少的timeout,重新發送,和并發的錯誤信息。 如果 badxid的值比retrans的值小得許多或為0,那么,混合了NFS,RCP的信息沒有到達服務器,網絡或服務器上的網卡是可疑的。 如果重新發送的與全部的調用的比率大于5%(retans/calls *100),重傳率就過高。這可能表示客戶端正在存取一個不同子網或網段的服務器。如果客戶端的數據報在它們到達目標服務器之前導致了過多的重傳,那么它們有可能會被中間的路由或橋取消。 為了更好的適應中間結點的數據報大小的處理能力,NFS的傳輸信息大小可以減少。讀和寫的大小可以通過 nfsstat 加選項 –m 來測定。 # nfsstat –m /mnt/opt from zebra:/opt Flags:vers=3,proto=udp,auth=unix,hard,intr,link,sylink,acl, rsize=32768,waize=32768,retrans=5 Lookups: srtt=7 (17ms), dev=3 (15ms), cur=2 (40ms) Reads: srtt=1 (2ms), dev=1 (5ms), cur=0 (0ms) All: srtt=7 (17ms), dev=3 (15ms), cur=2 (40ms) 注意:如果使用NFS版本3,那么TCP協議將會自動的降低段大小一直到它適合通過”bad routers”。這是在路由器不支持 back-to-back的IP碎片時發行的,這些碎片是由NFS版本2的8k字節的讀和寫產生的。但,只有在客戶端使用UDP時,rsize/wsize會被設小來適應一個MTU,如512或1k字節。 ——重新初始化統計 在命令:nfsstat 中使用選項 -z 來重新初始化統計報告。在下面的例子中,客戶的RPC統計被設置為0。 # nfsstat –rcz Client rpc: Calls badcalls retrans badxid timeout wait newcred timers 5815 0 0 0 0 0 0 39 # ——守護進程 /usr/lib/nfs/nfsd 在Solaris 2.x操作系統中,nfsd 是一個使用內核線程來處理所有的NFS請求的單一進程。如果服務器上沒有足夠的可用線程來服務每個客戶端的請求,客戶端性能也是可以忍受的。 你可以配置兩個線程為每個活動的客戶端機器,或32個每以太網絡。默認為16個線程給每個偶然的NFS用戶。但是,如果一個低終端SPARC類的服務器同時運行幾百個線程還是有些負荷過重的。 調整系統啟動時的nfsds數在腳本:/etc/rc3.d/S15nfs.server或 /etc/init.d/nfs.server ——總結 在本章中,你已經學會: l 描述用來監視系統,網絡和應用級別負荷的命令 l 決定消耗網絡帶寬的比率 l 測試NFS客戶/服務器的效率 |
lycxlove 回復于:2003-06-25 17:57:37 |
好呀,怎么沒人頂 |
Bimm 回復于:2003-06-25 19:06:30 |
非常有用! |
weinylee 回復于:2003-06-25 19:15:21 |
ding |
jye 回復于:2003-06-25 23:09:56 |
GOOD, VERY GOOD, VERY VERY GOOD.
EXCELLENT. AMAGING. |
moocher 回復于:2003-06-26 22:07:31 |
基礎中見精華! |