linux性能調優命令精華 一、 查看硬盤讀取速度 命令:hdparm -t /dev/sda5 打印:Timing buffered disk reads: 254 MB in 3.01 seconds = 84.34 MB/sec 說明:能夠指定具體的哪塊硬盤進行查詢的哦! 二、 查找最耗iowait的進程 操作步驟: 1. /etc/init.d/syslog stop 2. echo 1 > /proc/sys/vm/block_dump 3. dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head 不要忘記在抓完之後關掉block_dump和啓動syslog 4. echo 0 > /proc/sys/vm/block_dump 5. /etc/init.d/syslog start 三、 iostat命令 格式:iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval 描述:iostat是I/O statistics(輸入/輸出統計)的縮寫,iostat工具將對系統的磁盤操作活動進行監視。它的特點是彙報磁盤活動統計情況,同時也會彙報出 CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。 參數: -c爲彙報CPU的使用情況; -d爲彙報磁盤的使用情況; -k表示每秒按kilobytes字節顯示數據; -p顯示所有存儲設備分區信息。 -t爲打印彙報的時間; -v表示打印出版本信息和用法; -x device指定要統計的設備名稱,默認爲所有的設備; interval指每次統計間隔的時間; count指按照這個時間間隔統計的次數。 輸出信息: rrqm/s: 每秒進行 merge 的讀操作數目。即 delta(rmerge)/s wrqm/s: 每秒進行 merge 的寫操作數目。即 delta(wmerge)/s r/s: 每秒完成的讀 I/O 設備次數。即 delta(rio)/s w/s: 每秒完成的寫 I/O 設備次數。即 delta(wio)/s rsec/s: 每秒讀扇區數。即 delta(rsect)/s wsec/s: 每秒寫扇區數。即 delta(wsect)/s rkB/s: 每秒讀K字節數。是 rsect/s 的一半,因爲每扇區大小爲512字節。 wkB/s: 每秒寫K字節數。是 wsect/s 的一半。 avgrq-sz: 平均每次設備I/O操作的數據大小 (扇區)。即 delta(rsect+wsect)/delta(rio+wio) avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因爲aveq的單位爲毫秒)。 await: 平均每次設備I/O操作的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio) svctm: 平均每次設備I/O操作的服務時間 (毫秒)。即 delta(use)/delta(rio+wio) %util: 一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間 I/O 隊列是 非空的。 CPU:表示機器內所有的CPU; %user 表示CPU的利用率; %nice 表示CPU在用戶層優先級的百分比,0表示正常; %system 表示當系統運行時,在用戶應用層上所佔用的CPU百分比; %iowait 表示請求硬盤I/0數據流出時,所佔用CPU的百分比; %idle 表示空閒CPU百分比,值越大系統負載越低 示例: avg-cpu: %user %nice %sys %iowait %idle 0.88 0.00 0.29 0.60 98.24 我發現IO處理這塊所佔用的CPU的百分比要比較高啊。因爲我正在做的就是記日誌處理與MV更改名稱所以CPU比較高! 示例: 1、 iostat -d -k 1 10 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 121.00 356.00 888.00 356 888 sda1 0.00 0.00 0.00 0 0 sda2 0.00 0.00 0.00 0 0 sda3 0.00 0.00 0.00 0 0 sda4 0.00 0.00 0.00 0 0 sda5 243.00 356.00 888.00 356 888 說明: -d 顯示設備(磁盤)使用狀態 -k 某些使用block爲單位的列強制使用kilobytes爲單位 Tps: 該設備每秒的傳輸次數(一次傳輸即一次IO請求) kB_read/s 每秒從設備讀取的數據量 kB_wrtn/s 每秒向設備寫入的數據量 kB_read 讀取的總數據量 kB_wrtn 寫入的總數據量 2、 iostat -d -x -k 1 10 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await sv ctm %util sda 2.00 0.00 15.00 0.00 600.00 0.00 300.00 0.00 40.00 0.25 15.53 7 .20 10.80 說明:rrqm/s 每秒這個設備相關的讀取請求有多少被merge了(當系統調用需要讀取數據的時候VFS會將請求發到各個FS, 如果FS發現不同的讀取請求讀取的相同BLOCK的數據FS會將請求作一次合併);wrqm/s 每秒這個設備相關的寫入請求有多少被merge了。 Rsec/s 每秒讀取的扇區數;wsec/s每秒寫入的扇區數 r/s await:每一個IO請求的處理的平均時間(單位爲微秒)說明:一般系統的IO響應時間應該低於5ms如果大於10ms就比較大了! %util:在統計時間內所有處理IO時間/總共統計時間 這個參數說明了設備的繁忙程序。如果此參數到了100%說明此設備接近満負荷運行 (如果是多磁盤即使到了100%因爲有併發也未必達到了瓶頸) 3、iostat -c 1 10 輸出: avg-cpu: %user %nice %sys %iowait %idle 65.30 0.00 1.61 2.23 30.86 能夠用來獲取CPU的性能數據! 實例分析: 1、iostat -d -k 1|grep sda5 輸出: sda5 7.48 17.44 22.41 527084575 677241228 sda5 20.79 380.20 0.00 384 0 sda5 132.65 367.35 428.57 360 420 sda5 39.60 582.18 0.00 588 0 說明:其中的sda5表示的是物理邏輯分區而不是物理硬盤。如果有多塊硬盤的話就表示爲sda sdb 這樣的多個物理硬盤
2、iostat -d -x -k 1 輸出: Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.05 6.46 1.85 2.43 35.34 71.15 17.67 35.57 24.87 0.10 22.25 6.20 2.66 磁盤平均響應時間在22.25 磁盤的使用率在2.66% 說明磁盤響應有點慢。
四、vmstat 名稱:報告虛擬內存的統計信息 格式:vmstat [-n] [延時[次數]] 描述:這個命令是非常有用的務必要熟練掌握! 選項: -n 開頭令第一次的信息只顯示一次而不是週期地產生 -S 單位大小 -a 顯示活躍和不活躍的內存信息 -s 顯示相關虛擬內存統計表 輸出信息簡介: Proc r:運行和等待(CPU時間片)運行的進程數,這個值也可以判斷是否需要增加CPU(長期大於1) b:處於不可中斷狀態的進程數。常見情況由IO引起 Memory swpd:切換到交換內存上的內存(默認以KB爲單位) 說明:如果它不爲0或者比較大比如超過100M,但是si so 的值長期爲0.這種情況不用擔心系統性能 free:空閒的物理內存 buff:作爲buffer cache的內存,對塊設備的讀寫作緩衝 cache:作page cache的內存,文件系統級的cache 如果cache值大的時候說明cache住的文件數多,如果頻繁訪問到的文件都能被cache住那磁盤的讀IO bi會非常小。 Swap si: 交換內存使用,由磁盤調入內存 so: 交換內存使用,由內存調入磁盤 說明:如果系統的內存夠用的時候這兩個值都是0,如果這兩個值長期大於0說明系統性能受到影響。 如果系統的內存free 很少,但是si so也很少,那系統性能不會受到影響的! IO bi:從塊設備讀入的數據總量(讀磁盤)(KB/s) bo:寫入到塊設備的數據總量(寫磁盤)(KB/s) System in: 每秒產生的中斷次數 cs: 每秒產生的上下文切換次數 說明:這兩個值越大,會看到由內核消耗的CPU時間會越多! CPU us: 用戶進程消耗的CPU時間百分比 us的值比較高時,說明用戶進程的消耗的CPU時間多,如果長期超過50%的使用那就要考慮優化程序算法或加速。 sy 內核進程消耗的CPU時間百分比 如果sy的值高時說明系統內核消耗的CPU資源多。要檢查原因 wa IO等待消耗的CPU時間百分比 wa值如果高時說明IO等待比較嚴重。可能是由於磁盤在做大量的隨機訪問造成,也可能是磁盤的帶寬出現瓶頸 id: CPU處於空閒狀態時間百分比 情景分析: 我們需要關心的有哪些方面? Procs r: 運行的進程比較多,系統很繁忙 Io bo: 磁盤寫的數據量稍大,如果是大文件的寫,10M以內基本不用擔心,如果是小文件寫2M以內基本正常 Cpu us: 持續大於50,如果是高峯期可以接受 Cpu wa: 稍微有些高 Cpu id: 持續小於50,高峯期可以接受
五、TOP命令 命令:top 輸出如下: top - 12:47:48 up 349 days, 21:50, 2 users, load average: 3.81, 4.23, 4.34 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 38.7% us, 0.6% sy, 0.0% ni, 58.9% id, 1.7% wa, 0.0% hi, 0.0% si Mem: 4147272k total, 4117996k used, 29276k free, 459344k buffers Swap: 1052248k total, 192k used, 1052056k free, 3174936k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2274 root 15 0 24976 18m 2436 S 62 0.4 151:00.05 python 第一行:top - 12:47:48 up 349 days, 21:50, 2 users, load average: 3.81, 4.23, 4.34 12:47:48 表示當前系統時間 349 days, 21:50 表示系統啓動後到現在的運作時間 2 users 登錄到用戶的終端數。同一用戶同一時間開多個終端認爲是多個用戶 load average: 3.81, 4.23, 4.34 當前系統的平均負載,後面三個值分別爲1分鐘前、5分鐘前、15分鐘前進程的平均數 一般可以認爲這個數值超過CPU數目時CPU將比較吃力了! 說明:查看當前服務器CPU數量的命令:cat /proc/cpuinfo |grep processor|wc -l 我的輸出:8 第二行:Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie Tasks: 112 total 表示當前系統進程總數 1 running 當前運行中的進程數 111 sleeping 爲當前等待狀態中的進程數 0 stopped 爲被停止的系統進程數 0 zombie 爲僵死的進程數 第三行:Cpu(s): 38.7% us, 0.6% sy, 0.0% ni, 58.9% id, 1.7% wa, 0.0% hi, 0.0% si 顯示CPU的利用率。如果有多個CPU按1就可以每行顯示一個CPU的信息。 第四行:Mem: 4147272k total, 4117996k used, 29276k free, 459344k buffers 顯示可用內存和已利用內存 第五行:Swap: 1052248k total, 192k used, 1052056k free, 3174936k cached 注意:交換分區被頻繁使用的話可以認爲是物理內存不足而造成的。 第六行開始列舉各個進程的相關信息 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND PID 進程ID USER 誰運行這個進程 PRI 進程的優先級 NI nice值:這個值越高,任務的優先級越低 SIZE 這個進程使用的內存(代碼+數據+堆棧) RSS 這個進程佔用的物理內存 SHARE 這個進程使用的共享內存 STAT 進程的狀態信息。 R 正在運行 S 正在休息 Z 遲滯 T 停止 W 已換出的進程 N 正nice的值 %CPU 這個進程佔用的CPU百分比 %MEM 佔用的內存百分比 TIME 這個進程使用的總CPU時間 CPU 如果這是一個多處理器系統,這一列就表示其上運行進程的CPU的ID CPU Utilization,一個很直觀的概念,在任意時間內,CPU有7個狀態: 1.idle,表示CPU閒置並等待工作分配. 2.user,表示CPU在運行用戶的進程 3.system,表示CPU在執行kernel工作 4.nice, 表示CPU花費在被nice改變過優先級的process上的時間 (注意:被nice命令改變優先級的process僅指那些nice值爲負的 process.花費在被nice命令改變優先級的任務上的時間也將被計算在系統和用戶時間內, 因此整個時間加起來可能會超過百分之百) 5.iowait,表示CPU等待IO操作完成的時間 6.irq,表示CPU開銷在響應硬中斷上的時間 7.softirq,表示CPU開銷在響應軟中斷上的時間. 我們一般用vmstat看到的都是四個狀態:sy,us,id,wa,通過他和load avg結合,基本可以知道cpu的狀態 us -> User 表示CPU在運行用戶的進程 sy -> system 表示CPU在執行kernel工作 ni -> nice 表示CPU花費在被nice改變過優先級的process上的時間 id -> idle 表示CPU閒置並等待工作分配. wa -> iowait 表示CPU等待IO操作完成的時間 %wa高,說明磁盤忙。譬如磁盤讀寫次數非常高。 hi -> H/w interrupt requests 硬件中斷 si -> S/w interrupt requests 軟件中斷 %si高,是否說明軟中斷忙.進程之間頻繁切換導致!
|