linux性能調優命令精華

linux性能調優命令精華
 
轉自: http://blog.chinaunix.net/u2/84280/showart.php?id=2260961
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高,是否說明軟中斷忙.進程之間頻繁切換導致!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章