顯示具有 測試 標籤的文章。 顯示所有文章
顯示具有 測試 標籤的文章。 顯示所有文章

2012年3月1日 星期四

Linux運維不可不知的性能監控和調試工具(二)

1 nagios Nagios是一個開源監控解決方案,我覺得他可以監控一切 ,可以看一下我以前的文章:NAGIOS 2 ps #用來查看程式的運行情況 ps -ef |grep svr.py|grep -v grep |awk '{print $2}' #查看svr.py的進程pid號 14554 dongwm@linux-b8lh:~> ps -e -o pid,args --forest #層次結構中的進程ID 3 free #查看系統的物理(RAM)和交換記憶體的資訊 dongwm@linux-b8lh:~> free -mto #MB值顯示,顯示總計 total used free shared buffers cached Mem: 3196 2947 249 0 264 1436 Swap: 2053 88 1965 Total: 5250 3035 2215 4 top #顯示所有正在運行的進程的資訊,類似于windows的資源管理器 詳細的清參看:關於top命令的研究 5 pmap #顯示一個給定的進程的記憶體映射 dongwm@linux-b8lh:~> pmap 14443 14443: bash START SIZE RSS PSS DIRTY SWAP PERM MAPPING 08048000 580K 476K 74K 0K 0K r-xp /bin/bash 080d9000 4K 4K 4K 4K 0K r--p /bin/bash 080da000 8K 8K 8K 8K 0K rw-p /bin/bash 080dc000 1076K 976K 976K 976K 0K rw-p [heap] b744c000 8K 8K 8K 8K 0K rw-p [anon] b744e000 252K 32K 6K 0K 0K r--p /usr/lib/locale/zh_CN.utf8/LC_CTYPE b748d000 1344K 24K 2K 0K 0K r--p /usr/lib/locale/zh_CN.utf8/LC_COLLATE 6 nestat #顯示各種網路相關資訊,如網路連接,路由表,介面統計等,這個很常用,比如判斷某程式的埠是否在監聽 dongwm@linux-b8lh:~> sudo /bin/netstat -ap |grep ssh #-a 表示所有埠 -p顯示pid root's password: tcp 0 0 linux-b8lh.site:59073 mta1:61002 ESTABLISHED 29323/ssh tcp 0 0 linux-b8lh.site:35252 10.14.22.26:61300 ESTABLISHED 11986/ssh tcp 0 0 linux-b8lh.site:57146 mta1:61002 ESTABLISHED 9138/ssh tcp 0 0 linux-b8lh.site:32997 10.14.22.26:61300 ESTABLISHED 15122/ssh tcp 0 0 linux-b8lh.site:45807 10.14.22.26:61300 ESTABLISHED 29240/ssh tcp 0 0 linux-b8lh.site:35865 mta1:61002 ESTABLISHED 28751/ssh unix 2 [ ACC ] STREAM LISTENING 13182 2929/gnome-keyring- /tmp/keyring-TMukPL/ssh unix 3 [ ] STREAM CONNECTED 607118 29323/ssh unix 3 [ ] STREAM CONNECTED 607117 29326/sshfs unix 3 [ ] STREAM CONNECTED 608427 29240/ssh unix 3 [ ] STREAM CONNECTED 608426 29244/sshfs dongwm@linux-b8lh:~> sudo /bin/netstat -tunlp|grep name #我常用的命令 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 172.16.180.1:53 0.0.0.0:* LISTEN 5160/named tcp 0 0 172.16.110.1:53 0.0.0.0:* LISTEN 5160/named tcp 0 0 192.168.8.46:53 0.0.0.0:* LISTEN 5160/named tcp 0 0 127.0.0.2:53 0.0.0.0:* LISTEN 5160/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 5160/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 5160/named udp 0 0 172.16.180.1:53 0.0.0.0:* 5160/named udp 0 0 172.16.110.1:53 0.0.0.0:* 5160/named udp 0 0 192.168.8.46:53 0.0.0.0:* 5160/named udp 0 0 127.0.0.2:53 0.0.0.0:* 5160/named udp 0 0 127.0.0.1:53 0.0.0.0:* dongwm@linux-b8lh:~> netstat -r #顯示路由資訊類似於'route -n'的輸出 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 172.16.180.0 * 255.255.255.0 U 0 0 0 vmnet8 172.16.110.0 * 255.255.255.0 U 0 0 0 vmnet1 192.168.8.0 * 255.255.255.0 U 0 0 0 eth3 link-local * 255.255.0.0 U 0 0 0 eth3 loopback * 255.0.0.0 U 0 0 0 lo default 192.168.8.254 0.0.0.0 UG 0 0 0 eth3 7 IPTraf dongwm@linux-b8lh:~> sudo zypper install iptraf 網路流量即時監控工具,可以監控所有的流量,IP流量,按協議分的流量,還可以設置篩檢程式等 啟動需要root許可權,一個圖形化的工具,可以抓包,報告網卡流量情況,網卡資料包個數等,我也比較喜歡它來判斷一些網路問題 8 htop dongwm@linux-b8lh:~> sudo zypper install htop 彩色字體的top ,支援滑鼠點擊,對cpu使用情況。記憶體使用情況,當前負載情況等都直接顯示,替代了top 9 dstat dongwm@linux-b8lh:~> sudo zypper install dstat #彩色字體的vmstat dongwm@linux-b8lh:~> dstat -a ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 25 2 72 0 0 0| 43k 75k| 0 0 | 107B 839B|2066 7231 25 2 72 0 0 0| 0 40k|1328B 0 | 0 0 |2029 6175 27 2 70 1 0 0| 0 20k|2245B 1231B| 0 0 |2191 6545 28 1 70 0 0 0| 0 0 |1610B 0 | 0 0 |2243 6815 25 2 72 0 0 0| 0 104k|1224B 0 | 0 0 |2075 6610 10 Strace #i like it 用於調試和故障排除Linux環境下的可執行檔的執行。 它顯示了系統調用的進程所使用的過程中收到的信號,常用 *2 不會這個基本不要作運維了 #strace + 可執行程式 注:想要特定一個系統調用 使用‘-e’ 11 lsof #卸載移動存儲時經常提示device busy,也可能誤刪了一個正在打開的檔,lsof(list open files)是一個列出當前系統打開檔的工具.應用程式打開檔的描述符列表提供了大量關於這個應用程式本身的資訊,因此通過lsof工具能夠查看這個 清單有助於系統監測以及排錯 dongwm@linux-b8lh:~> lsof -a -u dongwm -d txt #查看所屬root使用者進程所打開的檔案類型為txt的文件 dongwm@linux-b8lh:~> lsof /home #在卸載檔案系統時,如果該檔案系統中有任何打開的檔,操作通常將會失敗。那麼通過lsof可以找出那些進程在使用當前要卸載的檔案系統 WebQQ\xe5 24090 dongwm 2u REG 8,7 7247256 12320783 /home/dongwm/.xsession-errors notificat 27261 dongwm mem REG 8,7 1512 12982245 /home/dongwm/.local/share/mime/mime.cache bluefish 29204 dongwm cwd DIR 8,7 12288 12320769 /home/dongwm bluefish 29204 dongwm DEL REG 8,7 12321855 /home/dongwm/.local/share/gvfs-metadata/home-4be5293d.log bluefish 29204 dongwm DEL REG 8,7 12320866 /home/dongwm/.local/share/gvfs-metadata/home 恢 複文件:當系統中的某個檔被意外地刪除了,只要這個時候系統中還有進程正在訪問該檔,那麼我們就可以通過lsof從/proc目錄下恢復該檔的內 容。思路就是lsof|grep 這個刪除了的檔,如果輸出了項,記住pid 和第4列的“數位+字母”其中的數位,然後, cat /proc/那個pid/fd/那個數字 > 刪掉的檔 就恢復了 12 w #查看當前登錄系統的使用者 13 uptime #查看當前負載的命令 dongwm@linux-b8lh:~> uptime 17:52 已啟動1 天 8:41,6 個使用者,平均負載:0.42, 0.26, 0.24 14 vnstat #用來統計網路流量 dongwm@linux-b8lh:~> sudo zypper install vnstat vnstati -i eth0 – -months – -output /dir/month.png #每月的流量統計圖,做成定時任務+html顯示就更OK了 dongwm@linux-b8lh:~> sudo vnstat-create-db eth0 root's password: Error: Unable to read database "/var/lib/vnstat/eth0". Info: -> A new database has been created. dongwm@linux-b8lh:~> vnstat --top10 #創建資料庫資訊,查看流量前10 15 ss #socket流量狀態情況, 我喜歡 dongwm@linux-b8lh:~> sudo /usr/sbin/ss -o state established #查看建立連接的socket Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.8.46:59073 60.2.235.195:61002 timer:(keepalive,60min,0) 0 0 192.168.8.46:52996 112.95.243.28:http 0 0 192.168.8.46:51066 128.121.22.144:http 0 0 192.168.8.46:38547 112.95.240.222:http 0 0 192.168.8.46:49295 74.125.71.154:http 0 0 192.168.8.46:46500 10.14.22.26:61300 timer:(keepalive,48min,0) dongwm@linux-b8lh:~> sudo /usr/sbin/ss -l #顯示所有的監聽通訊端 Recv-Q Send-Q Local Address:Port Peer Address:Port 0 3 172.16.180.1:domain *:* 0 3 172.16.110.1:domain *:* 0 3 192.168.8.46:domain *:* 0 3 127.0.0.2:domain *:* 0 3 127.0.0.1:domain *:* 0 128 127.0.0.1:ipp *:* 0 128 ::1:ipp :::* 0 128 127.0.0.1:953 *:* 0 50 *:mysql *:* 0 128 :::sunrpc :::* 0 128 *:sunrpc *:* 0 128 :::http dongwm@linux-b8lh:~> sudo /usr/sbin/ss -s #顯示根據類型劃分的總數值統計 Total: 719 (kernel 769) TCP: 62 (estab 5, closed 16, orphaned 4, synrecv 0, timewait 2/0), ports 42 Transport Total IP IPv6 * 769 - - RAW 1 1 0 UDP 12 10 2 TCP 46 43 3 INET 59 54 5 FRAG 0 0 0

Linux運維不可不知的性能監控和調試工具(一)

sysstat組件,包含了:sar,iostat,mpstat,pidstat,nfsiostat 等命令 wget http://pagesperso-orange.fr/sebastien.godard/sysstat-10.0.3.tar.gz tar zxvf sysstat-10.0.3.tar.gz cd sysstat-10.0.3/ ./configure –enable-install-cron && make && sudo make install 1 sar 主要用來監控系統即時性能(CPU,記憶體,I / O等),以及在一個持續的基礎上上,在後臺性能資料收集並分析歷史資料,以確定瓶頸問題 1 所有CPU的CPU使用率 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -u 1 3 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 09時23分00秒 CPU %user %nice %system %iowait %steal %idle 09時23分01秒 all 23.87 0.00 3.27 0.00 0.00 72.86 09時23分02秒 all 22.94 0.00 2.49 0.00 0.00 74.56 09時23分03秒 all 23.50 0.00 3.00 2.00 0.00 71.50 平均時間: all 23.44 0.00 2.92 0.67 0.00 72.98 • sar -u 顯示CPU使用率,目前每天收集到這一點。 • sar -u 1 3顯示即時CPU使用率每隔1秒,3次。 • sar -u ALL 1 3“和 “sar -u 1 3”相同,還顯示了附加 欄位。 • sar -u -f /var/log/sa/sa10 顯示sa10檔中10天的CPU使用率。 2 單個CPU或核心的CPU使用率 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -P ALL 1 1 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 09時27分08秒 CPU %user %nice %system %iowait %steal %idle 09時27分09秒 all 24.31 0.00 2.51 0.00 0.00 73.18 09時27分09秒 0 34.00 0.00 4.00 0.00 0.00 62.00 09時27分09秒 1 47.00 0.00 3.00 0.00 0.00 50.00 09時27分09秒 2 12.00 0.00 1.00 0.00 0.00 87.00 09時27分09秒 3 4.00 0.00 2.00 0.00 0.00 94.00 平均時間: CPU %user %nice %system %iowait %steal %idle 平均時間: all 24.31 0.00 2.51 0.00 0.00 73.18 平均時間: 0 34.00 0.00 4.00 0.00 0.00 62.00 平均時間: 1 47.00 0.00 3.00 0.00 0.00 50.00 平均時間: 2 12.00 0.00 1.00 0.00 0.00 87.00 • sar -P ALL 顯示當天所有核心CPU使用率。 • sar -P ALL 1 3 即時顯示的時間為每1秒3次的所有核心的CPU使用率。 • sar -P 1,顯示當前日期的CPU數1使用。 • sar- P 1 1 3 即時顯示的時間為核心的數字1,每1秒3次的CPU使用率。 • sar -P ALL –f / var/log/sa/sa10顯示CPU使用率,和上面解釋類似 3 記憶體使用和空閒 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -r 1 3 #表示即時顯示的時間為每1秒,3次的記憶體情況 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 09時31分59秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact 09時32分00秒 1282240 1991048 60.83 189256 979120 2308156 42.93 1091840 771404 09時32分01秒 1284348 1988940 60.76 189256 979120 2304796 42.87 1089208 771404 09時32分02秒 1282364 1990924 60.82 189272 979112 2308156 42.93 1091828 771412 平均時間: 1282984 1990304 60.80 189261 979117 2307036 42.91 1090959 771407 4 交換分區的使用情況 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -S 1 3 #表示即時顯示的時間為每1秒,3次的sawp使用情況 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 09時33分26秒 kbswpfree kbswpused %swpused kbswpcad %swpcad 09時33分27秒 2011680 91612 4.36 3076 3.36 09時33分28秒 2011680 91612 4.36 3076 3.36 09時33分29秒 2011680 91612 4.36 3076 3.36 平均時間: 2011680 91612 4.36 3076 3.36 5 I/O狀態 #表示即時顯示的時間為每1秒3次的I/O使用情況 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -b 1 3 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 09時35分43秒 tps rtps wtps bread/s bwrtn/s 09時35分44秒 2.00 0.00 2.00 0.00 32.00 09時35分45秒 97.00 0.00 97.00 0.00 1192.00 09時35分46秒 6.00 0.00 6.00 0.00 144.00 平均時間: 35.00 0.00 35.00 0.00 456.00 6 單個dev設備的I/O狀態 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -d 1 3 注:也可以顯示成sda,sdb這樣的形式: dongwm@linux-b8lh:~/sysstat-10.0.3> sar -p -d 1 3 7 顯示每秒的上下文切換 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -w 1 3 8 報告運行佇列和平均負載(個人最喜歡) dongwm@linux-b8lh:~/sysstat-10.0.3> sar -q 1 3 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 09時41分02秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 09時41分03秒 0 416 0.25 0.26 0.39 0 09時41分04秒 0 416 0.25 0.26 0.39 0 09時41分05秒 1 416 0.25 0.26 0.39 0 平均時間: 0 416 0.25 0.26 0.39 0 注:blocked顯示目前封鎖和等待I / O操作完成的任務數量 9 報告網路統計資訊 sar -n KEYWORD KEYWORD可能是DEV(比如eth0,eth1),NFS,SOCK,IP,TCP.ICMP,UDP,ALL等值 dongwm@linux-b8lh:~/sysstat-10.0.3> sar -n DEV 1 1 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 09時45分12秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 09時45分13秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09時45分13秒 eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09時45分13秒 eth3 8.00 0.00 1.73 0.00 0.00 0.00 0.00 09時45分13秒 vmnet1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09時45分13秒 vmnet8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均時間: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 平均時間: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均時間: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均時間: eth3 8.00 0.00 1.73 0.00 0.00 0.00 0.00 平均時間: vmnet1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均時間: vmnet8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10 sadc 的意思是“系統活動資料收集”。 這是sar的後端工具,它的資料收集。 sa1 存儲系統的活動,二進位資料檔。 為此,SA1取決於sadc。 SA1從cron運行。例如,如果今天是26號,SA1寫入到/ var/log/sa/sa26,這文件是二進位檔案 sa2 創建每日匯總收集的統計資訊。 SA2從cron運行。創建的檔是一個ASCII檔,可以在文字編輯器編輯。 sadf 可以生成CSV,XML和其他各種格式特區的報告。 使用此與其他工具相結合的SAR資料。 設計定時任務: cat /etc/cron.d/sysstat */10 * * * * root /usr/local/lib/sa/sa1 1 1 53 23 * * * root /usr/local/lib/sa/sa2 -A 2 iostat 顧名思義,這個會生成CPU,I / O統計 dongwm@linux-b8lh:~> iostat Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 26.46 0.00 2.10 0.45 0.00 70.99 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 7.15 52.35 71.16 4660976 6335976 注:使用特定盤的實現 可以這樣 iostat -p sda 3 mpstat 主要報告處理器統計 dongwm@linux-b8lh:~> mpstat -I ALL -u -P ALL 4 vmstat 報告虛擬記憶體統計資訊 dongwm@linux-b8lh:~> vmstat 1 3 #這個命令很常用了 表示即時顯示一秒鐘,三次然後自動停止 procs ———–memory———- —swap– —–io—- -system– —–cpu—— r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 91596 1222220 195704 1036060 0 0 13 18 17 98 26 2 71 0 0 0 0 91596 1221344 195712 1036092 0 0 0 84 1871 5774 9 2 88 1 0 0 0 91596 1221228 195712 1036092 0 0 0 108 1987 6060 18 3 79 0 0 5 pidstat #進程性能監測,這個我很喜歡,因為他是vmstat,top,iostat的一個結合: pidstat -d 1 #列出當前 active 進程的 io dongwm@linux-b8lh:~> pidstat -d 1 -p $(pidof gnome-terminal) #單個進程的狀態,這裡是gnome終端 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 10時04分06秒 PID kB_rd/s kB_wr/s kB_ccwr/s Command 10時04分07秒 9428 0.00 0.00 0.00 gnome-terminal 10時04分08秒 9428 0.00 0.00 0.00 gnome-terminal 10時04分09秒 9428 0.00 0.00 0.00 gnome-terminal 10時04分10秒 9428 0.00 0.00 0.00 gnome-terminal dongwm@linux-b8lh:~> pidstat -r -p $(pidof WebQQ增強版) 1 #單個進程記憶體使用情況 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 10時05分27秒 PID minflt/s majflt/s VSZ RSS %MEM Command 10時05分28秒 24090 21133.00 0.00 654272 246492 7.53 WebQQ增強版 10時05分29秒 24090 18880.00 0.00 654272 246492 7.53 WebQQ增強版 dongwm@linux-b8lh:~> pidstat -u -p $(pidof WebQQ增強版) 1 #單個進程CPU使用情況 Linux 2.6.37.6-0.7-default (linux-b8lh) 2011年12月14日 _i686_ (4 CPU) 10時06分01秒 PID %usr %system %guest %CPU CPU Command 10時06分02秒 24090 67.00 5.00 0.00 72.00 1 WebQQ增強版 10時06分03秒 24090 64.00 4.00 0.00 68.00 1 WebQQ增強版

2012年2月15日 星期三

用tcpreplay對網路程式進行壓力測試


以前tcpdump用的比較多,主要用在診斷的時候。tcpreplay則是把tcpdump記錄下來的包原樣發回去這樣tcpreplay就可以用來以極快的速度複現記錄下來的資料從而實現壓力測試,好處在於資料比較真實

先是在實際環境中用tcpdump記錄資料用於複現
例如記錄發往某ip某埠的報文一百萬個
1
tcpdump 'dst aa.aa.aa.aa and dst port xxx' -c 1000000 -w log.pcap
假設這些報文要在機器bb.bb.bb.bb上複現然後發給cc.cc.cc.cc,從bb.bb.bb.bb發往cc.cc.cc.cc的源mac地址為bb:bb:bb:bb:bb:bb 目的mac位址為cc:cc:cc:cc:cc:cc
首先tcpprep預處理下
1
tcpprep -p --pcap=log.pcap --cachefile=input.cache
先修改mac位址使之有效
1
tcprewrite --enet-dmac="cc:cc:cc:cc:cc:cc" --enet-smac="bb:bb:bb:bb:bb:bb" --infile=log.pcap --outfile=pcap.tmp
然後修改ip位址使之有效
1
tcprewrite --cachefile=input.cache --endpoints="cc.cc.cc.cc:bb.bb.bb.bb" --infile=pcap.tmp --outfile=replay.pcap
然後就可以用來複現了 -l參數是說迴圈多少次 -p參數是說每秒發多少個包 -i是說從那個網卡發
1
tcpreplay -l 10 -p 1000 -i eth0 replay.pcap

2012年2月9日 星期四

Loadrunner 性能測試伺服器監控指標


伺服器資源監控指標:
記憶體:
1 UNIX資源監控中指標記憶體頁交換速率(Paging rate),如果該值偶爾走高,表明當時有執行緒競爭記憶體。如果持續很高,則記憶體可能是瓶頸。也可能是記憶體訪問命中率低。
2 Windows資源監控中,如果Process\Private Bytes計數器和Process\Working Set計數器的值在長時間內持續升高,同時Memory\Available bytes計數器的值持續降低,則很可能存在記憶體洩漏。
記憶體資源成為系統性能的瓶頸的徵兆:
很高的換頁率(high pageout rate);
進程進入不活動狀態;
交換區所有磁片的活動次數可高;
可高的全域系統CPU利用率;  
記憶體不夠出錯(out of memory errors)
處理器:
1 UNIX資源監控(Windows作業系統同理)中指標CPU佔用率(CPU utilization),如果該值持續超過95%,表明瓶頸是CPU。可以考慮增加一個處理器或換一個更快的處理器。如果伺服器專用於SQL Server,可接受的最大上限是80-85%  
合理使用的範圍在60%70%
2 Windows資源監控中,如果System\Processor Queue Length大於2,而處理器利用率(Processor Time)一直很低,則存在著處理器阻塞。
CPU資源成為系統性能的瓶頸的徵兆:  
很慢的回應時間(slow response time)  
CPU閒置時間為零(zero percent idle CPU)  
過高的用戶佔用CPU時間(high percent user CPU)  
過高的系統佔用CPU時間(high percent system CPU)  
長時間的有很長的運行進程佇列(large run queue size sustained over time)
磁片I/O
1 UNIX資源監控(Windows作業系統同理)中指標磁片交換率(Disk rate),如果該參數值一直很高,表明I/O有問題。可考慮更換更快的硬碟系統。
2 Windows資源監控中,如果 Disk TimeAvg.Disk Queue Length的值很高,而Page Reads/sec頁面讀取操作速率很低,則可能存在磁片瓶徑。
I/O資源成為系統性能的瓶頸的徵兆 :
過高的磁片利用率(high disk utilization)  
太長的磁片等待佇列(large disk queue length)  
等待磁片I/O的時間所占的百分率太高(large percentage of time waiting for disk I/O)  
太高的物理I/O速率:large physical I/O rate(not sufficient in itself)  
過低的緩存命中率(low buffer cache hit ratio(not sufficient in itself))  
太長的運行進程佇列,但CPU卻空閒(large run queue with idle CPU)
4.資料庫伺服器:
SQL Server資料庫:
1 SQLServer資源監控中指標緩存點擊率(Cache Hit Ratio),該值越高越好。如果持續低於80%,應考慮增加記憶體。
2 如果Full Scans/sec(全資料表掃描/秒)計數器顯示的值比12高,則應分析你的查詢以確定是否確實需要全資料表掃描,以及SQL查詢是否可以被優化。  
3 Number of Deadlocks/sec(鎖死的數量/):鎖死對應用程式的可伸縮性非常有害,並且會導致惡劣的用戶體驗。該計數器的值必須為0
4 Lock Requests/sec(鎖請求/),通過優化查詢來減少讀取次數,可以減少該計數器的值。
Oracle資料庫:
1 如果自由記憶體接近於0而且庫快存或資料字典快存的命中率小於0.90,那麼需要增加SHARED_POOL_SIZE的大小。
快存(共用SQL區)和資料字典快存的命中率:  
select(sum(pins-reloads))/sum(pins) from v$librarycache;  
select(sum(gets-getmisses))/sum(gets) from v$rowcache;  
自由記憶體: select * from v$sgastat where name=’free memory’;  
2 如果資料的緩存命中率小於0.90,那麼需要加大DB_BLOCK_BUFFERS參數的值(單位:塊)。
緩衝區快取記憶體命中率:
select name,value from v$sysstat where name in (’db block gets’,
‘consistent gets’,'physical reads’) ;
Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))
3 如果日誌緩衝區申請的值較大,則應加大LOG_BUFFER參數的值。
日誌緩衝區的申請情況
select name,value from v$sysstat where name = ‘redo log space requests’ ;
4 如果記憶體排序命中率小於0.95,則應加大SORT_AREA_SIZE以避免磁片排序
記憶體排序命中率
select round((100*b.value)/decode((a.value+b.value), 0, 1, (a.value+b.value)), 2)from v$sysstat a, v$sysstat b where a.name=’sorts (disk)’ and b.name=’sorts (memory)’
注:上述SQL ServerOracle資料庫分析,只是一些簡單、基本的分析,特別是Oracle資料庫的分析和優化,是一門專門的技術,進一步的分析可查相關資料。

Linux主要性能指標監控


1.CPU&進程

1.1 top命令

top - 20:07:00 up 186 days,  3:47,  3 users,  load average: 0.01, 0.02, 0.00
Tasks:  82 total,   1 running,  80 sleeping,   1 stopped,   0 zombie
Cpu(s):  3.7% us,  0.0% sy,  0.0% ni, 96.3% id,  0.0% wa,  0.0% hi,  0.0% si

1 load average
系統負載,即任務佇列的平均長度。三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
2 進程情況
Tasks: 29 total
進程總數
1 running
正在運行的進程數
28 sleeping
睡眠的進程數
0 stopped
停止的進程數
0 zombie
僵屍進程數
3 cpu利用情況
多顆cpu的系統按"1"查看每顆cpu利用率
Cpu(s):
us
用戶空間佔用CPU百分比
sy
內核空間佔用CPU百分比
ni
使用者進程空間內改變過優先順序的進程佔用CPU百分比
id
空閒CPU百分比
wa
等待輸入輸出的CPU時間百分比
hi
硬體中斷 
si
軟體插斷
後面兩個參數我沒有深入瞭解過,也不是很明白.
關於top命令的詳細情況,請查閱top命令詳解文章


2.Memory

2.1 top 命令
Mem:   4149144k total,  3832668k used,   316476k free,   277592k buffers
Swap:  2096440k total,      144k used,  2096296k free,  2397028k cached

Mem:
記憶體利用率
total
實體記憶體總量
used
使用的實體記憶體總量
free
空閒記憶體總量
buffers
用作內核緩存的記憶體量
Swap:記憶體交換區利用率Swap
total
交換區總量
used
使用的交換區總量
free
空閒交換區總量
cached
緩衝的交換區總量。記憶體中的內容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在於記憶體中的交換區的大小。相應的記憶體再次被換出時可不必再對交換區寫入。

2.2 free
free -m 記憶體資訊按照M單位顯示
                   total       used       free     shared    buffers     cached
Mem:          4051       3744        307          0        271       2340
-/+ buffers/cache:       1132       2919
Swap:         2047          0       2047

total 記憶體總數
used
已經使用的記憶體數
free
空閒的記憶體數
shared
當前已經廢棄不用,總是0
buffers
  Buffer緩存記憶體數,是塊設備的讀寫緩衝區
cached
  Page緩存記憶體數,檔案系統的cache
關係:total=used+free
第二部分(-/+ buffers/cache):
(-buffers/cache) used
記憶體數:(指的第一部分Mem行中的used - buffers-cached)
(+buffers/cache) free
記憶體數: (指的第一部分Mem行中的free + buffers+cached)
-buffers/cache
反映的是被程式實實在在吃掉的記憶體
+buffers/cache
反映的是可以挪用的記憶體總數
對應用程式來講是(-/+ buffers/cach).buffers/cached 是等同可用的,因為buffer/cached是為了提高程式執行的性能,當程式使用記憶體時,buffer/cached會很快地被使用。
關於buffercache的區別
A buffer is something that has yet to be "written" to disk
buffer
為有待寫入磁片的資料的緩衝區(供塊設備訪問,即隨機訪問資料片的設備)
A cache is something that has been "read" from the disk and stored for later use
cache
為已經被從磁片讀取和存儲有待使用的緩衝區
第三部分為虛擬記憶體緩衝區(swap),windows不同的是,linux在實體記憶體沒有耗盡的情況下,swap是不使用的.我曾經在做性能測試的過程中監控,發現伺服器物理free記憶體只剩下
15m時候,swap換入換出都仍然為0

2.3 vmstat n 動態監控記憶體使用情況(n為採樣間隔時間)
 在性能測試過程中,n最好不設置過小,以免耗費不必要的系統資源影響測試結果.

procs -----------memory-------------       -----swap---   ----io----   --system--  ------cpu----
 r  b   swpd    free    buff         cache        si   so         bi    bo    in     cs    us sy id wa
 1  0  144  312628  277612  2397268     0    0          1     9     1         0        2  0 98  0
 0  0  144  312628  277628  2397252     0    0          0    19    1006  869    5  0 95  0

procs:
r:
在運行佇列中等待的進程數
b:
在等待io的進程數

memory
swpd
切換到記憶體交換區的記憶體數量(k表示)。如果swpd的值不為0,或者比較大(比如超過了100m),代表曾經使用虛擬記憶體的數量,只要siso的值長期為0,說明資料從磁片到記憶體無換入換出,系統性能還是正常的.
free
當前的空閒頁面清單中記憶體數量(k表示)
buff
作為buffer cache的記憶體數量,一般對塊設備的讀寫才需要緩衝。
cache:
作為page cache的記憶體數量(k),一般作為檔案系統的cache,如果cache較大,說明用到cache的檔較多,如果此時IObi比較小,說明檔案系統效率比較好。

swap
si: 從磁片交換到記憶體的交換頁數量,單位:KB/
so: 從記憶體交換到磁片的交換頁數量,單位:KB/

io
bi: 發送到塊設備的塊數,單位:塊/
bo: 從塊設備接收到的塊數,單位:塊/
以上兩項數值高,表示磁片讀寫頻繁,排除是否程式在大量讀取檔。可以使用iostat進一步觀察磁片情況

system系統:
in: 每秒的中斷數,包括時鐘中斷。
cs: 每秒的環境(上下文)切換次數。
如以上兩項數值持續走高,說明程式引起的cpu調度出現問題,考慮程式處理邏輯的問題

cpu 
us
列顯示了使用者方式下所花費 CPU 時間的百分比。us的值比較高時,說明使用者進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化使用者的程式。
sy
列顯示了內核進程所花費的cpu時間的百分比。這裡us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
wa
列顯示了IO等待所佔用的CPU時間的百分比。這裡wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁片大量隨機訪問造成的,也可能磁片或者磁片存取控制器的頻寬瓶頸造成的(主要是塊操作)