监控调优工具详细参数整理
系統性能分析標準
性能影響因素 好 壞 糟糕
CPU user%+sys%<70% user%+sys%=85% user%+sys%>=90%
內存 Swap In(si)=0 Per CPU with 10page/s More Swap In & Swap Out
Swap Out(so)=0
磁盤 iowait% <20% iowait% >30% iowait% >50%
user%:表示CPU處在用戶模式下的百分比
sys%:表示CPU處在系統模式下的百分比
iowait%:表示CPU等待輸入輸出完成時間的百分比
Swap In(si):虛擬內存頁的導入,即從SWAP DISK交換到RAM
Swap Out(so):虛擬內存頁的導出,即從RAM交換到SWAP DISK
vmstat中 bi+bo參考值為1000 如果大于1000,而且wa值比較大,說明I/O有問題,應該提高磁盤的讀寫能力
cat /proc/cpuinfo
cat /proc/meminfo
硬盤 fdisk -l
更詳細 hdparm -i /dev/sda1
參考:http://salogs.com/category/linux%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/page/4/
一、sysstat工具包
sysstat 工具包中包含兩類工具:
即時查看工具:iostat、mpstat、pidstat、sar
累計統計工具:sar
也就是說,sar 具有這兩種功能。因此,sar 是 sysstat 中的核心工具。
1、iostat
http://blog.sina.com.cn/s/blog_5f8238650100sn9a.html
http://www.ha97.com/4546.html
1)選項說明
-c 僅顯示CPU統計信息。與-d選項互斥。
-d 僅顯示磁盤統計信息。與-c選項互斥。
-k 以KB為單位顯示每秒的磁盤請求數。默認單位塊。
-m 以MB為單位顯示每秒的磁盤請求數。默認單位塊。
-p {device|ALL} 用于顯示塊設備及系統分區的統計信息。與-x選項互斥。
-t 在輸出數據時,打印搜集數據的時間。
-V 打印版本號信息。
-x 輸出擴展信息
# iostat -x
# iostat -x 1
# iostat -x 1 3 #1秒刷新一次,刷新3次
2)普通輸出(直接打iostat的輸出)
tps:表示發送至邏輯磁盤的I/O請求數
該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。
“一次傳輸”意思是“一次I/O請求”。多個邏輯請求可能會被合并為“一次I/O請求”?!耙淮蝹鬏敗闭埱蟮拇笮∈俏粗?。
kB_read/s:每秒讀寫該磁盤邏輯驅動器的數據量;
kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;
kB_read:讀取的總數據量
kB_wrtn:寫入的總數量數據量;
3)-x 輸出說明
#-m 單位為MB/s -k 單位為kB/s
# iostat -d -x -m 1 10
# iostat -d -x -k 1 10
Linux 2.6.32-220.el6.i686 (pxe-svr.skylog.cn) 06/25/2013 _i686_ (1 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 2.09 1.21 3.60 0.54 88.89 7.03 46.30 0.03 7.47 5.14 2.13
sdb 0.07 0.00 0.21 0.00 0.68 0.00 6.46 0.00 0.37 0.37 0.01
sdc 0.11 0.00 0.29 0.00 0.97 0.00 6.62 0.00 0.48 0.48 0.01
dm-0 0.00 0.00 1.48 0.44 21.77 1.77 24.44 0.02 8.86 3.63 0.70
dm-1 0.00 0.00 0.21 0.00 0.82 0.00 8.00 0.00 1.35 1.35 0.03
dm-2 0.00 0.00 0.08 0.00 0.31 0.00 7.94 0.00 0.82 0.82 0.01
dm-3 0.00 0.00 0.13 0.04 0.52 0.17 7.97 0.00 8.82 1.51 0.03
單個磁盤和單個磁盤和分區
-p為要顯示盤下面的分區IO
iostat -d sda -x -m 1 10
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.01 4.64 0.26 6.30 0.00 0.04 12.87 0.04 5.96 4.81 3.16
盤的分區
# iostat -d -p sda -x -m 1 10
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.01 4.64 0.26 6.30 0.00 0.04 12.87 0.04 5.96 4.81 3.16
sda1 0.00 0.00 0.00 0.00 0.00 0.00 43.16 0.00 37.52 3.74 0.00
sda2 0.01 4.63 0.26 5.19 0.00 0.04 15.48 0.02 4.16 2.91 1.58
sda3 0.00 0.00 0.00 0.01 0.00 0.00 21.19 0.00 2.90 2.75 0.00
輸出數據解釋
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)
每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為IO的響應時間,一般地系統IO響應時間應該低于5ms,如果大于10ms就比較大了。
svctm: 平均每次設備I/O操作的服務時間 (毫秒).即 delta(use)/delta(rio+wio) 平均服務時
%util: 一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的.即 delta(use)/s/1000 (因為use的單位為毫秒)
在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的并發能力,所以磁盤使用未必就到了瓶頸)。
?
4)瓶頸排查
別人一個不錯的例子.(I/O 系統 vs. 超市排隊)
舉一個例子,我們在超市排隊 checkout 時,怎么決定該去哪個交款臺呢? 首當是看排的隊人數,5個人總比20人要快吧? 除了數人頭,我們也常常看看前面人購買的東西多少,如果前面有個采購了一星期食品的大媽,那么可以考慮換個隊排了.還有就是收銀員的速度了,如果碰上了連錢都點不清楚的新手,那就有的等了.另外,時機也很重要,可能 5 分鐘前還人滿為患的收款臺,現在已是人去樓空,這時候交款可是很爽啊,當然,前提是那過去的 5 分鐘里所做的事情比排隊要有意義 (不過我還沒發現什么事情比排隊還無聊的).
I/O 系統也和超市排隊有很多類似之處:
r/s+w/s 類似于交款人的總數
平均隊列長度(avgqu-sz)類似于單位時間里平均排隊人的個數
平均服務時間(svctm)類似于收銀員的收款速度
平均等待時間(await)類似于平均每人的等待時間
平均I/O數據(avgrq-sz)類似于平均每人所買的東西多少
I/O 操作率 (%util)類似于收款臺前有人排隊的時間比例.
我們可以根據這些數據分析出 I/O 請求的模式,以及 I/O 的速度和響應時間.
結論:
如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸.
idle小于70% IO壓力就較大了,一般讀取速度有較多的wait.
同時可以結合vmstat 查看查看b參數(等待資源的進程數)和wa參數(IO等待所占用的CPU時間的百分比,高過30%時IO壓力高)
另外 await 的參數也要多和 svctm 來參考.差的過高就一定有 IO 的問題.
avgqu-sz 也是個做 IO 調優時需要注意的地方,這個就是直接每次操作的數據的大小,如果次數多,但數據拿的小的話,其實 IO 也會很小.如果數據拿的大,才IO 的數據會高.也可以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是講,讀定速度是這個來決定的.
5)、【總結關注的幾個數據】:
rkB/s: 每秒讀K字節數
wkB/s: 每秒寫K字節數
平均等待時間(await): 一般地系統IO響應時間應該低于5ms,如果大于10ms就比較大了
平均I/O數據(avgrq-sz):
%util: 一秒中有百分之多少的時間用于I/O操作,接近100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸.
這個結合,vmstat 查看查看io參數(等待資源的進程數【io】bi+bo參考值為1000 如果大于1000)和wa參數【top命令】(IO等待所占用的CPU時間的百分比,高過30%時IO壓力高)
7)、提高I/O利用率的方法
磁盤I/O利用率,網絡I/O利用率
提供磁盤I/O的方法
更改轉速的磁
更大磁盤cache
更大的I/O控制器cache
軟件raid
硬件RAID
2、mpstat
mpstat 的命令格式
mpstat 輸出每一個 CPU 的運行狀況,為多處理器系統中的 C PU 利用率提供統計信息。命令格式為:
mpstat [ -P { cpu | ALL } ] [ -V ] [ interval [ count ] ]
mpstat 1 5 #間隔1秒刷新一次,刷新5次 總的
mpstat -P ALL 1
mpstat -P 3 1
# mpstat -P 3 1
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/05/2013 _x86_64_ (4 CPU)
04:03:08 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
04:03:09 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:03:10 PM 3 17.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 83.00
04:03:11 PM 3 0.00 0.00 0.00 37.37 0.00 0.00 0.00 0.00 62.63
CPU 在多CPU系統里,每個CPU有一個ID號,第一個CPU為0。all表示統計信息為所有CPU的平均值。
%user 顯示在用戶級別運行所占用CPU總時間的百分比。
%nice 顯示在用戶級別,用于nice操作,所占用CPU總時間的百分比。
%sys 顯示在kernel級別運行所占用CPU總時間的百分比。注意:這個值并不包括服務中斷和softirq。
%iowait 顯示用于等待I/O操作時,占用CPU總時間的百分比。
%irq 顯示用于中斷操作,占用CPU總時間的百分比。
%soft 顯示用于softirq操作,占用CPU總時間的百分比。
%steal 管理程序(hypervisor)為另一個虛擬進程提供服務而等待虛擬 CPU 的百分比。
%idle 顯示CPU在空閑狀態,占用CPU總時間的百分比。
intr/s 顯示CPU每秒接收到的中斷總數。
3、pidstat 查看進程的各種資源狀態
pidstat主要用于監控全部或指定進程占用系統資源的情況,如CPU,內存、設備IO、任務切換、線程等。pidstat首次運行時顯示自系統啟動開始的各項統計信息,之后運行pidstat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858874.html
pidstat命令指定采樣周期和采樣次數,命令形式為”pidstat [option] interval [count]”
選項option
-C comm Display only tasks whose command name includes the string comm
-p pid
使用命令字符串不夠精準,最好使用pid,比如多個python程,但是在多個進程的程序大有用處
比如apache/nginx 多個進程
1)cup狀態
pidstat 不指定類型默認為cpu
pidstat 1 間隔1秒刷新一次
pidstat -p 2288 顯示PID為2288進程的cpu狀態
pidstat -p 2288 1 間隔1秒刷新顯示PID為2288進程的cpu狀態 不指定類型默認是cpu
pidstat -u 顯示所有進程CPU狀態
pidstat -u -p 2288 1 5 【間隔1秒刷新顯示PID為2288進程的cpu狀態,顯示5次】
pidstat -d -C mysqld 1 10 間隔1秒刷新顯示命令包含mysqld字符串進程的cpu狀態,顯示10次】
輸出格式
# pidstat -u -p 15914 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
02:47:28 PM PID %usr %system %guest %CPU CPU Command
02:47:29 PM 15914 0.00 0.00 0.00 0.00 1 mysqld
02:47:30 PM 15914 0.00 0.00 0.00 0.00 1 mysqld
%usr 進程用戶空間占用CPU百分比 user level (application)
%system 進程內核空間占用CPU百分比 system level (kernel)
%guest 比例的CPU在任務在虛擬機(運行一個虛擬處理器) in virtual machine (running a virtual processor)
%CPU 任務總的CPU百分比,如果使用多CPU環境,CPU使用量還要除總的CPU數量,簡單的說就是TASK單個CPU使用量
CPU 程序使用的CPU
2)內存
pidstat -r 顯示所有進程內存相關
pidstat -p 15914 -r 1 10 【間隔1秒刷新顯示PID為2288進程的內存狀態,連續顯示10次】
pidstat -r -C mysqld 1 10
輸出格式
#pidstat -p 15914 -r 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
03:20:21 PM PID minflt/s majflt/s VSZ RSS %MEM Command
03:20:22 PM 15914 2.00 0.00 1824440 47364 0.81 mysqld
03:20:23 PM 15914 0.00 0.00 1824440 47364 0.81 mysqld
minflt/s: 每秒次缺頁錯誤次數(minor page faults),次缺頁錯誤次數意即虛擬內存地址映射成物理內存地址產生的page fault次數
majflt/s: 每秒主缺頁錯誤次數(major page faults),當虛擬內存地址映射成物理內存地址時,相應的page在swap中,這樣的page fault為major page fault,一般在內存使用緊張時產生
VSZ: 該進程使用的虛擬內存(以kB為單位)
RSS: 該進程使用的物理內存(以kB為單位)
%MEM: 該進程使用內存的百分比
3)io狀態
pidstat -d 顯示所有進程IO
pidstat -d -p 2288 1 【間隔1秒刷新顯示PID為2288進程的IO狀態】
pidstat -d -p 2288 1 10 【間隔1秒刷新顯示PID為2288進程的IO狀態,連續顯示10次】
pidstat -d -C mysqld 1 10
輸出格式
# pidstat -d -p 15914 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
03:02:16 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
03:02:17 PM 15914 0.00 36.00 32.00 mysqld
03:02:18 PM 15914 0.00 0.00 0.00 mysqld
kB_rd/s:每秒進程從磁盤讀取的數據量(以kB為單位)
kB_wr/s:每秒進程向磁盤寫的數據量(以kB為單位)
kB_ccwr/s:man的說明為 寫入磁盤的已取消的任務的字節數量,這可能發生在當任務有些臟pagcache截斷。
4)其他
-w上下文交換
pidstat -p 15914 -w 1
-l 顯示命令和完整參數
Display the process command name and all its arguments.
# pidstat -p 15914 -l
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
03:27:01 PM PID %usr %system %guest %CPU CPU Command
03:27:01 PM 15914 0.02 0.01 0.00 0.02 0 /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysql
pidstat -I as displayed by option -u
以為是指定使用那個CPU的進程狀態,結果不是。man描述的也不好理解
pidstat -u -I 1
pidstat -I 1
看到的信息,應該活躍進程CPU信息
要看單個CPU使用信息使用:mpstat -P 3 1
4、sar
http://www.ctohome.com/FuWuQi/1b/688.html
為了實現sar的累計統計,系統必須周期地記錄當時的信息,這是通過調用 /usr/lib/sa/(/usr/lib64/sa/)中的三個工具實現的:
sa1 :收集并存儲每天系統動態信息到一個二進制的文件中,用作sadc的前端程序
sa2 :收集每天的系統活躍信息寫入總結性的報告,用作sar的前端程序
sadc :系統動態數據收集工具,收集的數據被寫入一個二進制的文件中,它被用作 sar 工具的后端
在 CentOS 系統的默認設置中,以如下的方式使用這三個工具:
在守護進程 /etc/rc.d/init.d/sysstat 中使用 /usr/lib/sa/sadc -F -L - 命令創建當日記錄文件,文件為 /var/log/sa/saDD,其中 DD 為當天的日期。當系統重新啟動后,會向文件 /var/log/sa/saDD 輸出類似 11:37:16 AM LINUX RESTART 這樣的行信息。
在 cron 任務 /etc/cron.d/sysstat 中每隔10分鐘執行一次 /usr/lib/sa/sa1 1 1 命令,將信息寫入文件 /var/log/sa/saDD
在 cron 任務 /etc/cron.d/sysstat 中每天 23:53 執行一次 /usr/lib/sa/sa2 -A 命令,將當天的匯總信息寫入文件 /var/log/sa/saDD
累計統計工具:sar
常用選項:
選項 說明
-A 等價于 -bBcdqrRuvwWy -I SUM -I XALL -n ALL -P ALL
-b 顯示I/O和傳送速率的統計信息
-B 輸出內存頁面的統計信息
-c 輸出進程統計信息,每秒創建的進程數
-d 輸出每一個塊設備的活動信息
-i interval 指定間隔時長,單位為秒
-p 顯示友好設備名字,以方便查看,也可以和-d 和-n 參數結合使用,比如 -dp 或-np
-q 輸出進程隊列長度和平均負載狀態統計信息
-r 輸出內存和交換空間的統計信息
-R 輸出內存頁面的統計信息
-t 讀取 /var/log/sa/saDD 的數據時顯示其中記錄的原始時間,如果沒有這個參數使用用戶的本地時間
-u 輸出CPU使用情況的統計信息
-v 輸出inode、文件和其他內核表的統計信息
-V 輸出版本號信息
-w 輸出系統交換活動信息
-W 輸出系統交換的統計信息
-y 輸出TTY設備的活動信息
-n {DEV|EDEV|NFS|NFSD|SOCK|ALL} 分析輸出網絡設備狀態統計信息。
DEV 報告網絡設備的統計信息
EDEV 報告網絡設備的錯誤統計信息
NFS 報告 NFS 客戶端的活動統計信息
NFSD 報告 NFS 服務器的活動統計信息
SOCK 報告網絡套接字(sockets)的使用統計信息
ALL 報告所有類型的網絡活動統計信息
-x {pid|SELF|ALL} 輸出指定進程的統計信息。 【6的版本不支持該參數,5的支持,程序版本一樣】
pid 用 pid 指定特定的進程
SELF 表示 sar 自身
ALL 表示所有進程
-X {pid|SELF|ALL} 輸出指定進程的子進程的統計信息
-I {irq|SUM|ALL|XALL} 輸出指定中斷的統計信息。
irq 指定中斷號
SUM 指定輸出每秒接收到的中斷總數
ALL 指定輸出前16個中斷
XALL 指定輸出全部的中斷信息
-P {cpu|ALL} 輸出指定 CPU 的統計信息
-o filename 將輸出信息保存到文件 filename
-f filename 從文件 filename 讀取數據信息。filename 是使用-o 選項時生成的文件。
-s hh:mm:ss 指定輸出統計數據的起始時間
-e hh:mm:ss 指定輸出統計數據的截至時間,默認為18:00:00
sar -q 輸出進程隊列長度和平均負載狀態統計信息
輸出信息說明:
runq-sz 運行隊列的長度(等待運行的進程數)
plist-sz 進程列表中進程(processes)和線程(threads)的數量
ldavg-1 最后1分鐘的系統平均負載(System load average)
ldavg-5 過去5分鐘的系統平均負載
ldavg-15 過去15分鐘的系統平均負載
sar -R 輸出內存頁面的統計信息
輸出信息說明:
frmpg/s 每秒系統中空閑的內存頁面(memory page freed)數量
bufpg/s 每秒系統中用作緩沖區(buffer)的附加內存頁面(additional memory page)數量
campg/s 每秒系統中高速緩存的附加內存頁面(additional memory pages cached)數量
sar -w 輸出系統交換活動信息
輸出信息說明:
proc/s
cswch/s 每秒的系統上下文切換數量
sar -w
pswpin/s 每秒系統換入的交換頁面(swap page)數量
pswpout/s 每秒系統換出的交換頁面(swap page)數量
sar -v 輸出inode、文件和其他內核表的信息
輸出信息說明:
dentunusd 目錄高速緩存中未被使用的條目數量
file-sz 文件句柄(file handle)的使用數量 【】 6里面沒有了
inode-sz i節點句柄(inode handle)的使用數量
super-sz 由內核分配的超級塊句柄(super block handle)數量
%super-sz 已分配的超級塊句柄占總超級塊句柄的百分比
dquot-sz 已經分配的磁盤限額條目數量
%dquot-sz 分配的磁盤限額條目數量占總磁盤限額條目的百分比
rtsig-sz 已排隊的 RT 信號的數量
%rtsig-sz 已排隊的 RT 信號占總 RT 信號的百分比
sar -c 輸出每秒創建的進程數的進程統計信息
[root@cnetos5 ~]# sar -c
Linux 2.6.18-53.el5 (cnetos5) 01/22/2008
這里參數5上有,6上面沒有了
幾個重點CPU/內存/IO
1)CPU
sar -C 1 10
sar -u 輸出CPU使用情況的統計信息 5版本可以指定-x pid
# sar -u 1 10 #1秒輸出1次信息,輸出10次
# sar -u 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
04:44:13 PM CPU %user %nice %system %iowait %steal %idle
04:44:14 PM all 0.00 0.00 0.00 0.00 0.00 100.00
04:44:15 PM all 0.25 0.00 0.50 0.00 0.00 99.25
CPU all 表示統計信息為所有 CPU 的平均值。
%user 顯示在用戶級別(application)運行使用 CPU 總時間的百分比。
%nice 顯示在用戶級別,用于nice操作,所占用 CPU 總時間的百分比。
%system 在核心級別(kernel)運行所使用 CPU 總時間的百分比。
%iowait 顯示用于等待I/O操作占用 CPU 總時間的百分比。
%steal 管理程序(hypervisor)為另一個虛擬進程提供服務而等待虛擬 CPU 的百分比。
%idle 顯示 CPU 空閑時間占用 CPU 總時間的百分比。
1). 若 %iowait 的值過高,表示硬盤存在I/O瓶頸
2). 若 %idle 的值高但系統響應慢時,有可能是 CPU 等待分配內存,此時應加大內存容量
3). 若 %idle 的值持續低于 10,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU輸出內存頁面的統計信息輸出內存頁面的統計信息
-P 指定CPU
# sar -P ALL 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
05:07:49 PM CPU %user %nice %system %iowait %steal %idle
05:07:50 PM all 5.75 0.00 0.25 2.00 0.00 92.00
05:07:50 PM 0 5.00 0.00 0.00 0.00 0.00 95.00
05:07:50 PM 1 0.98 0.00 0.98 0.00 0.00 98.04
05:07:50 PM 2 1.01 0.00 0.00 0.00 0.00 98.99
05:07:50 PM 3 16.83 0.00 0.00 8.91 0.00 74.26
# sar -P 2 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
05:08:05 PM CPU %user %nice %system %iowait %steal %idle
05:08:06 PM 2 0.00 0.00 0.00 0.00 0.00 100.00
05:08:07 PM 2 0.00 0.00 0.00 0.00 0.00 100.00
05:08:08 PM 2 0.00 0.00 0.00 0.00 0.00 100.00
2)內存相關
(1)輸出內存和交換空間的統計信息
sar -r 輸出內存和交換空間的統計信息
[root@control ~]# sar -r 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/05/2013 _x86_64_ (4 CPU)
02:19:38 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
02:19:39 PM 748008 5120484 87.25 301384 2302060 4059852 33.80
02:19:40 PM 748000 5120492 87.25 301384 2302060 4059852 33.80
02:19:41 PM 748000 5120492 87.25 301384 2302060 4059852 33.80
02:19:42 PM 748000 5120492 87.25 301384 2302060 4059852 33.80
輸出信息說明:
kbmemfree 可用的空閑內存數量,單位為 KB
kbmemused 已使用的內存數量(不包含內核使用的內存),單位為 KB
%memused 已使用內存的百分數
kbbuffers 內核緩沖區(buffer)使用的內存數量,單位為 KB
kbcached 內核高速緩存(cache)數據使用的內存數量,單位為 KB
kbswpfree 可用的空閑交換空間數量,單位為 KB
kbswpused 已使用的交換空間數量,單位為 KB
%swpused 已使用交換空間的百分數
kbswpcad 交換空間的高速緩存使用的內存數量
注意:%memused的百分比為kbmemfree/kbmemfree+kbmemused
(2)輸出內存頁面的統計信息
5版本可以指定-x pid
# sar -B 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
04:49:32 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
04:49:33 PM 0.00 15.84 35.64 0.00 83.17 0.00 0.00 0.00 0.00
04:49:34 PM 0.00 121.21 65.66 0.00 116.16 0.00 0.00 0.00 0.00
04:49:35 PM 0.00 84.00 37.00 0.00 87.00 0.00 0.00 0.00 0.00
pgpgin/s 每秒鐘從磁盤讀入的系統頁面的 KB 總數
pgpgout/s 每秒鐘向磁盤寫出的系統頁面的 KB 總數
fault/s 系統每秒產生的頁面失效(major + minor)數量
majflt/s 系統每秒產生的頁面失效(major)數量
(3)輸出內存頁面的統計信息
# sar -R
frmpg/s 每秒系統中空閑的內存頁面(memory page freed)數量
bufpg/s 每秒系統中用作緩沖區(buffer)的附加內存頁面(additional memory page)數量
campg/s 每秒系統中高速緩存的附加內存頁面(additional memory pages cached)數量
cswch/s 每秒的系統上下文切換數量
(4)輸出系統交換活動信息
# sar -w
cswch/s 每秒的系統上下文切換數量
(5) 輸出系統交換的統計信息
sar -W
pswpin/s 每秒系統換入的交換頁面(swap page)數量
pswpout/s 每秒系統換出的交換頁面(swap page)數量
3) 顯示I/O和傳送速率的統計信息
5版本可以指定-x pid
# sar -b 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)
04:52:22 PM tps rtps wtps bread/s bwrtn/s
04:52:24 PM 0.00 0.00 0.00 0.00 0.00
04:52:25 PM 44.44 0.00 44.44 0.00 339.39
04:52:26 PM 14.00 0.00 14.00 0.00 112.00
tps 每秒鐘物理設備的 I/O 傳輸總量
rtps 每秒鐘從物理設備讀入的數據總量
wtps 每秒鐘向物理設備寫入的數據總量
bread/s 每秒鐘從物理設備讀入的數據量,單位為 塊/s
bwrtn/s 每秒鐘向物理設備寫入的數據量,單位為 塊/s
4) 輸出每一個塊設備的活動信息
sar -d 1 10 輸出每一個塊設備的活動信息
05:08:04 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
05:08:05 AM dev8-0 346.53 2788.12 26724.75 85.17 41.37 143.47 2.86 99.21
05:08:05 AM dev8-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:08:05 AM dev8-2 346.53 2788.12 26724.75 85.17 41.37 143.47 2.86 99.21
05:08:05 AM dev253-0 640.59 2661.39 27976.24 47.83 58.81 108.07 1.55 99.21
05:08:05 AM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
5)輸出網絡設備狀態的統計信息 sar -n DEV
[root@cnetos5 ~]# sar -n DEV |grep eth0
12:00:01 AM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
12:10:01 AM eth0 0.59 0.92 41.57 893.98 0.00 0.00 0.00
12:20:01 AM eth0 0.55 0.88 37.50 859.56 0.00 0.00 0.00
12:30:01 AM eth0 0.55 0.86 38.17 871.98 0.00 0.00 0.00
Average: eth0 0.29 0.42 21.05 379.29 0.00 0.00 0.00
IFACE 網絡設備名
rxpck/s 每秒接收的包總數
txpck/s 每秒傳輸的包總數
rxbyt/s 每秒接收的字節(byte)總數
txbyt/s 每秒傳輸的字節(byte)總數
rxcmp/s 每秒接收壓縮包的總數
txcmp/s 每秒傳輸壓縮包的總數
rxmcst/s 每秒接收的多播(multicast)包的總數
5) 輸出網絡設備狀態的統計信息(查看網絡設備故障) sar -n EDEV
[root@control ~]# sar -n EDEV |egrep 'em1|IFACE'
12:00:01 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
12:10:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:20:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:30:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:40:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:50:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IFACE 網絡設備名
rxerr/s 每秒接收的壞包總數
txerr/s 傳輸包時每秒發生錯誤的總數
coll/s 傳輸包時每秒發生沖突(collision)的總數
rxdrop/s 接收包時,由于缺乏緩存,每秒丟棄(drop)包的數量
txdrop/s 傳輸包時,由于缺乏緩存,每秒丟棄(drop)包的數量
txcarr/s 傳輸包時,每秒發生的傳輸錯誤(carrier-error)的數量
rxfram/s 接收包時,每秒發生幀校驗錯誤(frame alignment error)的數量
rxfifo/s 接收包時,每秒發生隊列(FIFO)一出錯誤的數量
txfifo/s 傳輸包時,每秒發生隊列(FIFO)一出錯誤的數量
6)通過關鍵字 查看關鍵字信息
-n { keyword [,...] | ALL }
Report network statistics.
Possible keywords are DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6.
常用的參數:
cpu
sar -u
sar -u -P 1 1 10
內存
sar -r 1 10
IO
sar -b 1 10
sar -d 1 10
網絡
sar -n DEV 1 10
二、procps 工具包
包括
/bin/ps
/sbin/sysctl
/usr/bin/free
/usr/bin/pgrep
/usr/bin/pkill
/usr/bin/pmap
/usr/bin/pwdx
/usr/bin/skill
/usr/bin/slabtop
/usr/bin/snice
/usr/bin/tload
/usr/bin/top
/usr/bin/uptime
/usr/bin/vmstat
/usr/bin/w
/usr/bin/watch
1、free
total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608
其中第一行用全局角度描述系統使用的內存狀況:
total——總物理內存
used——已使用內存,一般情況這個值會比較大,因為這個值包括了cache+應用程序使用的內存
free——完全未被使用的內存
shared——應用程序共享內存
buffers——緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個值增加) ,對塊文件讀寫才需要緩存
cached——緩存,用于已打開的文件 ,對文件系統緩存。
注意:
total=used+free
used=buffers+cached (maybe add shared also)
第二行描述應用程序的內存使用:
前個值表示-buffers/cache——應用程序使用的內存大小,used減去緩存值
后個值表示+buffers/cache——所有可供應用程序使用的內存大小,free加上緩存值
注意
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached
第三行表示swap的使用:
used——已使用
free——未使用
2、vmstat
使用vmstat命令可以得到關于進程、內存、內存分頁、堵塞IO、traps及CPU活動的信息。
http://os.51cto.com/art/201005/200672.htm
-a:顯示活躍和非活躍內存
-f:顯示從系統啟動至今的fork數量 。引申閱讀: http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html
-m:顯示slabinfo
-n:只在開始時顯示一次各字段名稱。
-s:顯示內存相關統計信息及多種系統活動數量。
delay:刷新時間間隔。如果不指定,只顯示一條結果。
count:刷新次數。如果不指定刷新次數,但指定了刷新時間間隔,這時刷新次數為無窮。
vmstat delay count
-d:顯示磁盤相關統計信息。
-t:顯示時間戳
-p:顯示指定磁盤分區統計信息
-S:使用指定單位顯示。參數有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(byte)。默認單位為K(1024 bytes)
-V:顯示vmstat版本信息。
# vmstat 2 5 #間隔2秒,顯示5次
vmstat -a 1
bi 從塊讀數據
bo 寫入數據到塊
bi+bo參考值為1000 如果大于1000,而且wa值比較大,說明I/O有問題,應該提高磁盤的讀寫能力
3、pmap
觀察到系統中的指定進程的地址空間分布情況顯示一個目標文件或者鏈接庫文件中的目標文件的各個段的大小
pmap pid
-x show details
-d show offset and device number
-q quiet; less header/footer info
-V show the version number
-A limit results to the given range
4、其他工具
slabtop 動態顯示內核 slab 緩存信息
tload
top
http://www.jb51.net/LINUXjishu/34604.html
uptime
三、lsof
參考:http://club.topsage.com/thread-234763-1-1.html
是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件
lsof
每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
TYPE:文件類型,如DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁盤上的標識)
NAME:打開文件的確切名稱
其中FD 列中的文件描述符cwd 值表示應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改。txt 類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序。其次數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。如上的最后一行文件/dev/initctl,其文件描述符為10。u 表示該文件被打開并處于讀取/寫入模式,而不是只讀 ? 或只寫 (w) 模式。同時還有大寫 的W 表示該應用程序具有對整個文件的寫鎖。該文件描述符用于確保每次只能打開一個應用程序實例。初始打開每個應用程序時,都具有三個文件描述符,從 0 到 2,分別表示標準輸入、輸出和錯誤流。所以大多數應用程序所打開的文件的 FD 都是從 3 開始。與 FD 列相比,Type 列則比較直觀。文件和目錄分別稱為 REG 和 DIR。而CHR 和 BLK,分別表示字符和塊設備;或者 UNIX、FIFO 和 IPv4,分別表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協議 (IP) 套接字。
常用的參數列表:
lsof filename 顯示打開指定文件的所有進程 #lsof /data/mysql/ibdata1
lsof +d /DIR/ 顯示目錄下被進程打開的文件 [fuser] #lsof +d /data/mysql/
lsof +D /DIR/ 同上,但是會搜索目錄下的所有目錄,時間相對較長 #lsof +d /data/mysql/
lsof -a 表示兩個參數都必須滿足時才顯示結果 #lsof -c http -a -u apache
lsof -c string 顯示COMMAND列中包含指定字符的進程所有打開的文件 #lsof -c http
lsof -u username 顯示所屬user進程打開的文件 #lsof -umysql
lsof -g gid 顯示歸屬gid的進程情況 #lsof -g 1
lsof -d FD 顯示指定文件描述符的進程 #lsof -d mem#內存# lsof -d mem -a -u apache#httpd加載到內存中的庫
lsof -n 不將IP轉換為hostname,缺省是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不只一個)
port --> 端口號 (可以不只一個)
lsof -i tcp:80 顯示tcp80
lsof -i @192.168.1.1 顯示IP的
lsof -i @192.168.1.20:62233 顯示IP和端口
lsof -i tcp@192.168.1.200:1-10,smtp,99
在 FreeBSD 上有一個工具非常好用,叫做 sockstat。但是 Linux 過去一直沒有人寫這樣的工具,
可以用 ‘lsof -i -n’ 或是 ‘netstat -anpe‘ 等指令來滿足
關于文件描述符的補充
FD列中的文件描述符
cwd current working directory;
Lnn library references (AIX);
err FD information error (see NAME column);
jld jail directory (FreeBSD);
ltx shared library text (code and data);
Mxx hex memory-mapped type number xx.
m86 DOS Merge mapped file;
mem memory-mapped file;
mmap memory-mapped device;
pd parent directory;
rtd root directory;
tr kernel trace file (OpenBSD);
txt program text (code and data);
v86 VP/ix mapped file;
文件權限
r for read access;
w for write access;
u for read and write access;
與FD列相比,Type列則比較直觀。
REG 文件
DIR 目錄
CHR 字符 和 BLK,分別表示字符和塊設備;
BLK 塊設備
UNIX UNIX套接字
FIFO 先進先出FIFO隊列
IPv4 網際協議IP套接字。
其他可以man
四、iotop
iotop 使用 Python 語言編寫而成,要求 Python 2.5(及以上版本)和 Linux kernel 2.6.20(及以上版本)
可以用左右箭頭操作,按r是相反方向,按o是只顯示在IO的
用法 iotop -參數
-o, –only 只顯示實際在IO的
-b, –batch 批量處理 用來記錄日志的 打開非交互式模式。用于日志I/O使用時間。
-n NUM 設定循環幾次 顯示多少次后退出
-d SEC, –delay=SEC 設定顯示時間間隔
-p PID, --pid=PID 顯示指定進程的IO信息
-u USER, --user=USER 顯示指定用戶的IO信息
-P 顯示進程,默認顯示線程
-a 顯示累計I/O而不是帶寬。在這種模式下,iotop顯示了數量的I / O過程所做的iotop以來開始。
-k 指定單位為K
-t, --time 每次都顯示時間
-q, --quiet
suppress some lines of header (implies --batch). This option can be specified up to three times to remove header lines.
-q column names are only printed on the first iteration, 列名稱只是印在第一次迭代,
-qq column names are never printed, 列名是從來沒有打印
-qqq the I/O summary is never printed.不打印總結
常用
iotop -d 10 設置刷新時間
iotop -p 9816 -k 看單個進程
iotop -u root -k 看單個用戶的
iotop -P 顯示進程,默認顯示線程
iotop -p 15914 -k -b -qqq -d 10 >> log1
寫個腳將每天都記錄到一個文本,然后再用另外一個腳本導入mongodb或者csv文件里
五、dstat
六、網絡流量
iptraf
ntop一個python寫的網絡流量查看器 ,需要配置一些ip地址和啟動服務
iptraf
ntop
服務端
[root@control ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
客戶端
[root@compute01 ~]# iperf -c 192.168.1.100 -t 60 -i 5
------------------------------------------------------------
Client connecting to 192.168.1.100, TCP port 5001
TCP window size: 23.2 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.110 port 34324 connected with 192.168.1.100 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 5.0 sec 58.8 MBytes 98.6 Mbits/sec
[ 3] 5.0-10.0 sec 56.1 MBytes 94.2 Mbits/sec
[ 3] 10.0-15.0 sec 56.0 MBytes 94.0 Mbits/sec
[ 3] 15.0-20.0 sec 56.1 MBytes 94.2 Mbits/sec
行UDP 丟包率測試
iperf -c 192.168.1.100 -b 10M
七、tcptrace
netperf是一種網絡性能的測量工具,主要針對基于TCP或UDP的傳輸
十、strace
是Linux環境下的一款程序調試工具,用來監察一個應用程序所使用的系統呼叫及它所接收的系統信息。 strace是一個有用的小工具
參數說明:
-c 統計每一系統調用的所執行的時間,次數和出錯的次數等.
-d 輸出strace關于標準錯誤的調試信息.
-f 跟蹤由fork調用所產生的子進程.
-ff 如果提供-o filename,則所有進程的跟蹤結果輸出到相應的filename.pid中,pid是各進程的進程號.
-F 嘗試跟蹤vfork調用.在-f時,vfork不被跟蹤.
-h 輸出簡要的幫助信息.
-i 輸出系統調用的入口指針.
-q 禁止輸出關于脫離的消息.
-r 打印出相對時間關于,,每一個系統調用.
-t 在輸出中的每一行前加上時間信息.
-tt 在輸出中的每一行前加上時間信息,微秒級.
-ttt 微秒級輸出,以秒了表示時間.
-T 顯示每一調用所耗的時間.
-v 輸出所有的系統調用.一些調用關于環境變量,狀態,輸入輸出等調用由于使用頻繁,默認不輸出.
-V 輸出strace的版本信息.
-x 以十六進制形式輸出非標準字符串
-xx 所有字符串以十六進制形式輸出.
-a column
設置返回值的輸出位置.默認為40.
?
轉載于:https://www.cnblogs.com/diege/p/3179611.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的监控调优工具详细参数整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu server 安装
- 下一篇: 数组测试题