1概述
1.1影響Linux服務程式效能的因素
#CPU、記憶體、磁碟I/O頻寬、網路I/O頻寬
1.2效能評判
CPU:user% sys%< 70%; 程式在使用者態和核心態的執行時間百分比。
內存:Swap In(si)=0; Swap Out(so)=0; 以不使用交換分區為準,如果頻繁用到交換分區,內存可能不夠了。
硬碟:iowait % < 20%;
網路:只要有足夠頻寬盡情的使用吧,達到網路卡頻寬linux系統表示毫無壓力
其中: %user:表示CPU處在使用者模式下的時間百分比。
%sys:表示CPU處在核心模式下的時間百分比。
%iowait:表示CPU等待輸入輸出完成時間的百分比。
swap in:即si,表示虛擬記憶體的頁導入,即從SWAP DISK交換到RAM
swap out:即so,表示虛擬記憶體的頁導出,即從RAM交換到SWAP DISK。
1.3效能分析工具
常用系統指令:top、free、ps、uptime、iotop、vmstat、iostat 、dstat、sar。
使用方法:top指令掌握全局,使用特定指令深入分析
常用組合方式:
(1)CPU瓶頸:top、vmstat、iostat、sar –u、sar -q
(2)記憶體瓶頸:free、vmstat、sar -B、sar –r、sar -W
(3)磁碟I/O瓶頸:iotop、iostat、sar -b、sar –u、sar -d
(4)網路瓶頸: dstat
2 top
2.1功能
提供了即時的對系統處理器、記憶體、任務等狀態監視;此指令可以按CPU使用、記憶體使用對任務進行排序;TOP是一個動態顯示過程,可以透過使用者按鍵來不斷刷新當前狀態,也可以在啟動時指定刷新間隔。
2.2指令輸出示意圖
top - 10:16:29 up 38 days, 15:48, 5 users, load average: 0.04, 0.10, 0.05
Tasks: 569 total, 2 running, 562 sleeping, 0 stopped, 5 zombie
Cpu(s): 2.6%us, 1.3%sy, 0.4%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
####################################################################################. ###Mem: 3839112k total, 3151560k used, 687552k free, 302944k buffers### ###Swap: 6078456k total, 631852k used, 5446604k free, 348548k cached### ### PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND ### ###10603 zhixiang 20 0 1225m 284m 30m S 4.6 7.6 271:48.24 vs_exe #### ###2473 xulun 20 0 118m 43m 6932 S 3.0 1.2 964:14.99 Xvnc ### ###1412 xulun 30 10 232m 12m 5216 S 2.3 0.3 0:04.59 floaters 0:04.59 floaters #### ###14823 chujie 20 0 1112m 247m 17m S 2.0 6.6 363:51.38 vs_exe ### ###17772 sihao 20 0 1101m 202m 10m S 1.7 5.4 631:21.17 vs_exe ### ###11054 sihao 20 0 906m 65m 9412 S 1.0 1.7 410:06.55 vs_exe ###20782 yongtao 20 0 1049m 173m 9996 S 1.0 4.6 196:05.10 vs_exe
#14637 chujie 20 0 1274m 132m 2388 S 0.7 3.5 63:20.18 KugooPopMsgServ
1439 yanyun 20 0 15428 1600 940 R 0.3 0.0 0:00.01 top
3491 zhixiang 20 0 129m 55m 17m S 0.3 1.5 10:57.25 Xvnc 10:57.25 Xvnc
1 root 20 0 19344 1200 984 S 0.0 0.0 0:00.89 init
2.3指令輸出解析
Top輸出的資訊很多基本囊括了所有的性能指標,前五行是統計資訊區,表示的是系統整體的統計信息,包括:系統負載、任務、CPU、內存等;後面的是每個進程相關資訊。
第一行是任務佇列訊息,同uptime指令的執行結果是一樣的
[yanyun@~/test]$ uptime
10:20:17 up 38 days, 15:52, 5 users, load average: 0.00, 0.04, 0.03
其內容如下:10:20:17:目前時間
38 days, 15:52:系統運行時間
5 users:目前登入使用者數量
load average: 0.00, 0.04, 0.03:系統負載,即任務佇列的平均長度。三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
第二行為程序的資訊
內容如下:569 total:進程總數
2 running,:正在運行的進程數
562 sleeping:睡眠的進程數
0 stopped:停止的進程數
5 zombie:殭屍行程數
第三行為CPU的訊息
內容如下:2.6%us:用戶空間佔用CPU百分比
1.3%sy:核心空間佔用CPU百分比
0.4%ni:使用者進程空間內改變過優先權的行程佔用CPU百分比
95.7%id:空閒CPU百分比
0.0%wa:等待輸入輸出的CPU時間百分比
第四、五行為記憶體資訊;指令輸出跟free相同
[yanyun@~]$ free
total used free shared buffers cached
Mem: 3839112 3256976 582136 0 143664 0 143664 中
#-/ buffers/cache: 2668320 1170792Swap: 6078456 574772 5503684
內容如下:Mem :3839112k total:物理記憶體總量
3151560k used:使用的實體記憶體總量
687552k free:空閒記憶體總量
302944k buffers:用作緩衝的記憶體量
Swap: 6078456k total:交換區總量
631852k used:使用的交換區總量
5446604k free:空閒交換區總量
348548k cached:快取總量。
註:buffer:可以認為是寫出磁碟的緩衝區;
Cache:讀出磁碟的快取。
Linux系統使用記憶體的原則是:不用白不用,用了也白用;盡可能的快取東西,所以往往看空閒記憶體很小,但是cache很大;Linux系統會定時啟動核心執行緒kswapd進行緩存回收。
後面的是顯示每個進程相關資訊
%CPU:上次更新到現在的CPU時間佔用百分比
TIME :進程使用的CPU時間總計
%MEM:進程使用的物理記憶體百分比
VIRT:進程使用的虛擬記憶體總量,單位kb
RES:進程使用的、未被換出的實體記憶體大小,單位kb。 RES=CODE DATA
SHR:共享記憶體大小,單位kb
#S:進程狀態。 (D=不可中斷的睡眠狀態 R=運作 S=睡眠 T=追蹤/停止 Z=殭屍行程)
2.4常用選項
top [-] [d][p][M][P]
參數說明:### ###d:指定每兩次螢幕資訊刷新之間的時間間隔。 (top –d 1:每秒刷新一次)### ###p:指定進程ID來只監控某個進程。 (top –d 1234:只查看pid為1234的進程資訊)###
k:終止一個行程。 Top運行時參數,系統會提示使用者輸入需要終止的進程PID,以及需要傳送給該進程什麼樣的訊號。使用訊號9強制結束該進程。
M:根據駐留記憶體大小進行排序。
P:根據CPU使用百分比大小進行排序。
附註:在命令列執行過程中按下數字鍵‘1’,可以查看到CPU每個核的相關資訊。
Tasks: 564 total, 3 running, 556 sleeping, 0 stopped, 5 zombie
Cpu0 : 2.9%us, 2.9%sy, 0.0%ni, 94.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 2.0%us, 2.0%sy, 0.0%ni, 96.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3839112k total, 3445296k used, 393816k free, 48180k buffers
Swap: 6078456k total, 553876k used, 5524580k free, 976128k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
14823 chujie 20 0 1112m 245m 16m R 3.0 6.5 373:07.82 vs_exe
#5589 sihao 20 0 1019m 267m 29m R 2.0 7.1 2:24.80 vs_exe 2:24.80 vs_exe
5674 zhixiang 20 0 1103m 253m 37m S 2.0 6.8 4:17.89 vs_exe
3 iotop:
#3.1功能
是一個用來監視每個執行緒的磁碟 I/O 使用狀況的類別top 工具,
附註:此指令需要自行安裝(yum install iotop)
3.2指令輸出示意圖
Total DISK READ: 50.23 M/s | Total DISK WRITE: 34.25 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
61524 be/4 root 47.65 M/s 0.00 B/s 0.00 % 37.83 % ./relay_server
61539 be/4 root 121.77 K/s 0.00 B/s 0.00 % 26.73 % ./relay_server
61544 be/4 root 700.15 K/s 0.00 B/s 0.00 % 24.89 % ./relay_server
61543 be/4 root 528.92 K/s 0.00 B/s 0.00 % 21.29 % ./relay_server
61541 be/4 root 494.67 K/s 0.00 B/s 0.00 % 21.22 % ./relay_server
61540 be/4 root 323.44 K/s 0.00 B/s 0.00 % 8.62 % ./relay_server
61542 be/4 root 468.04 K/s 0.00 B/s 0.00 % 8.13 % ./relay_server
480 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.02 % [jbd2/sda2-8]
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
3.3指令輸出解析
第一行:
Total DISK READ: 50.23 M/s :磁碟每秒讀出資料量
Total DISK WRITE: 34.25 K/s :磁碟每秒寫入資料量
下面的是每個執行緒的IO情況:
比較簡單;只解釋IO:跟top的wa意義相同,只是此處表示的一個線程的wa。
3.4常用選項
iotop [-] [d] [p]
參數說明:
d:指定每兩次螢幕資訊刷新之間的時間間隔。 (iotop –d 1:每秒刷新一次)
p:指定執行緒ID來只監控某個執行緒。 (iotop –d 1234:只查看pid為1234的進程資訊)
註:在命令列執行過程中按下字母‘o’,可以只查看有IO的線程。
pstree -p:查看進程樹,可以輸出進程之間的關係。
ps –eLf:查看線程。 ps –ef的高級版
4 vmstat:
#4.1功能
查看虛擬記憶體(Virtual Memory)使用狀況的工具
4.2指令輸出示意圖
[yanyun@~/test]$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- --- --cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
#1s)
0 0 631376 834896 15108 452024 0 0 4 4 1 4.3指令輸出解析
Memory:同top的第四、五行資訊。
swap:記憶體到swap分割區換入換出速率。
io:讀寫磁碟速率
system in:每秒的中斷數,包含時鐘中斷 system cs:每秒的環境(上下文)切換數;頻繁切換對系統效能有影響,linux提供了執行緒對cpu的親和,可以將某個執行緒綁定到一個核運行。
cpu:同top輸出的第三行
註:swap項不為零,都用到交換分割區了,記憶體可能已經用完已經成為系統瓶頸的一項。
4.4常用選項
vmstat 1 10:每秒刷新一次,總共刷新十次退出。
註:下面的選項都是專業的查看某一特定項的信息,有幾個輸出一大堆信息,用到時google吧!
-a:顯示活躍和非活躍記憶體
-f:顯示從系統啟動至今的fork數量
-m:顯示slabinfo#-s:顯示記憶體相關統計資料及多種系統活動數量。 -d:顯示磁碟相關統計資料。
-p:顯示指定磁碟分割區統計資訊
5 iostat
5.1功能
用於輸出CPU和磁碟I/O相關的統計資訊
5.2輸出結果示意圖
[root@ShanWei_119_134_255_208 ~]# iostat -x
Linux 2.6.32-279.el6.x86_64 (ShanWei_119_134_255_208) 07/30/2013 _x86_64_ p##(
avg-cpu: %user %nice %system %iowait %steal %idle2.63 0.00 2.25 5.98 0.00 89.14
#Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz rsec/s wsec/s avgrq-sz avgqu-sz await 7 sda 195.42 163.72 194.33 126.28 28464.35 2319.94 96.02 4.35 2319.94 96.02 1 0
sdb 0.33 48.97 122.71 2.70 29603.37 .52
5.3指令輸出解釋
avg-cpu段:
%user: 在使用者層級執行所使用的CPU的百分比.
%nice: nice操作所使用的CPU的百分比.
%sys: 在系統層級(kernel)運作所使用CPU的百分比.
%iowait: CPU等待硬體I/O時,所佔用CPU百分比.
%idle: CPU空閒時間的百分比.
Device段落:
tps: 每秒鐘發送到的I/O請求數
Blk_read /s: 每秒讀取的block數
Blk_wrtn/s: 每秒寫入的block數
Blk_read: 讀入的總block數
Blk_wrtn: 寫入的block總數
-x選項可以查看到以下更多資訊
rrqm/s:每秒鐘這個裝置相關的讀取請求有多少被Merge了
wrqm/s:每秒鐘這個裝置相關的寫入請求有多少被Merge了
rsec/s:每秒讀取的磁區數
wsec/:每秒寫入的磁區數
avgrq-sz: 平均每次裝置I/O操作的資料大小 (磁區)
avgqu-sz: 平均I/O佇列長度
await:平均每次設備I/O操作的等待時間(單位是毫秒) svctm: 平均每次設備I/O操作的服務時間 (單位是毫秒)
%util:在統計時間內所有處理IO時間,所以該參數暗示了設備的繁忙程度
5.4常用選項iostat -d 2 6:每隔2秒,顯示一次設備統計資訊.總共輸出6次. -x:查看裝置的使用率、回應時間
6 dstat
###### ######6.1功能### ###是一個全能係統資訊統計工具,只能對整個系統進行監控而不能對某一個進程或某一個程式進行深入分析;監控項目包括:cpu、磁碟、記憶體、網卡、進程、系統(彩色介面linux下面不多見!)
附註:此指令需要自行安裝(yum install dstat)
6.2指令輸出示意圖
[root@ShanWei_119_134_255_208 ~]# dstat -cdlmnpy
----total-cpu-usage---- -dsk/total- ---load-avg--- ------memory-usage----- -net/total- - --procs--- ---system--
usr sys idl wai hiq siq| read writ| 1m 5m 15m | used buff cach free| recv send|run blk new| int cswsw
## 3 2 89 6 0 0| 28M 1367k|5.41 5.07 4.87|4019M 172M 58.5G 267M| 019M 172M 58.5G 267M| 0. 5k2 1 85 12 0 0| 21M 828k|5.41 5.07 4.87|4020M 172M 58.6G 243M| 191 191 18k
1 1 80 18 0 0|5828k 4804k|5.41 5.07 4.87|4018M 172M 58.6G 260M| 190M 172M 58.6G 260M| 190M
6.3指令輸出解釋
前面基本上都解釋過了......
6.4常用選項
dstat –cdlmnpsy:cdlmnpsy這幾個選項基本上囊括了常用的,當然還有很多dstat –-help一下吧。
7 sar
7.1功能
System Activity Reporter系統活動狀況報告,是目前Linux 上最為全面的系統效能分析工具之一,可以從多方面對系統的活動進行報告,包括:檔案的讀寫情況、系統呼叫的使用情況、磁碟I/O、CPU效率、記憶體使用狀況、進程活動及IPC有關的活動等。
7.2指令輸出示意圖
[root@localhost ~]# sar -r 1 100Linux 2.6.32-220.el6.x86_64 (localhost.localdomain) 07/30/2013 _x86_64_ (8 CPU)
03:17:59 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit##03:18:00 PM 4988488 3062224 38.04 639136 2115404 72404
03:18:01 PM 4984464 3066248 38.09 639136 2115404 98060 2115404 98060 #.
03:18:02 PM 4985152 3065560 38.08 639136 2115420 97972 2115420 97972 #0.03:18:03 PM 4985400 3065312 38.08 639136 2115420 97972 2115420 97972 #0.
[root@localhost ~]# sar -B 1 100Linux 2.6.32-220.el6.x86_64 (localhost.localdomain) 07/30/2013 _x86_64_ (8 CPU)
03:19:09 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
03:19:10 PM 0.00 157.14 45415.48 0.00 15541.67
03:19:11 PM 0.00 0.00 40.40 0.00 75.76 .00
03:19:12 PM 0.00 0.00 5542.34 0.00 1584.68 0.00 1584.68 0.00 0. 0
[root@localhost ~]# sar -b 1 100
Linux 2.6.32-220.el6.x86_64 (localhost.localdomain) 07/30/2013 _x86_64_ (8 CPU)
03:19:38 PM tps rtps wtps bread/s bwrtn/s
03:19:39 PM 12.50 0.00 12.50 0.00 181.82
03:19:40 PM 0.00 0.00 0.00 0.00 0.00
03:19:41 PM 7.14 0.00 7.14 0.00 128.57
[root@localhost ~]# sar -W 1 100
Linux 2.6.32-220.el6.x86_64 (localhost.localdomain) 07/30/2013 _x86_64_ (8 CPU)
03:20:10 PM pswpin/s pswpout/s
03:20:11 PM 0.00 0.00
03:20:12 PM 0.00 0.00
03:20:13 PM 0.00 0.00
[root@localhost ~]# sar -d 1 100
Linux 2.6.32-220.el6.x86_64 (localhost.localdomain) 07/30/2013 _x86_64_ (8 CPU)
03:20:48 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await #
03:20:49 PM dev8-0 7.69 0.00 79.12 10.29 0.00 103:20:49 PM dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0
03:20:49 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await #
03:20:50 PM dev8-0 10.47 0.00 148.84 14.22 0.08.84 14.22 1.
##03:20:50 PM dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0
7.3指令輸出解釋
kbmemfree:這個值和free指令中的free值基本上一致,所以它不包括buffer和cache的空間.
kbmemused:這個值和free指令中的used值基本上一致,所以它包含buffer和cache的空間.%memused:這個值是kbmemused和記憶體總量(不包括swap)的一個百分比.
kbbuffers和kbcached:這兩個值就是free指令中的buffer和cache.
kbcommit:保證目前系統所需的記憶體,即為了確保不溢出而需要的記憶體(RAM swap).
%commit:這個值是kbcommit與記憶體總量(包括swap)的一個百分比.
pgpgin/s:表示每秒從磁碟或SWAP置換到記憶體的位元組數(KB)
pgpgout/s:表示每秒從記憶體置換到磁碟或SWAP的位元組數(KB)
fault/s:每秒鐘系統產生的缺頁數,即主缺頁與次缺頁之和(major minor)
majflt/s:每秒鐘產生的主缺頁數.
pgfree/s:每秒被放入空閒佇列中的頁數
pgscank/s:每秒被kswapd掃描的頁數
pgscand/s:每秒直接被掃描的頁數
pgsteal/s:每秒鐘從cache中清除來滿足記憶體所需的頁個數
%vmeff:每秒清除的頁(pgsteal)佔總掃描頁(pgscank pgscand)的百分比
tps:每秒鐘實體裝置的 I/O傳輸總量
rtps:每秒鐘從實體設備讀入的資料總量
wtps:每秒鐘寫入實體裝置的總資料
bread/s:每秒鐘從實體裝置讀入的資料量,單位為區塊/s
bwrtn/s:每秒鐘寫入實體裝置的資料量,單位為區塊/s
pswpin/s:每秒系統換入的交換頁面(swap page)數量
pswpout/s:每秒系統換出的交換頁面(swap page)數量
7.4常用選項
sar –[u][r][B][b][q][W][d]
參數說明:-u:CPU資源監控
-r:記憶體與交換空間監控
-B:記憶體分頁監控
-b:IO和傳輸速率監控
-q:進程佇列系統負載監控
-W:系統交換分割區活動監控
-d:設備使用狀況監控
8 tmpfs
#8.1定義
tmpfs檔案系統是一種基於記憶體的檔案系統,掛載在/dev/shm下面。
8.2特點
#動態改變大小;存取快、完全駐留在RAM中;當然系統重啟就沒了。
8.3使用方法
1、linux下面POSIX標準的共享記憶體是基於此檔案系統實現的(還有一套System V標準的共享記憶體實作方式);
2、 將檔案建立在/dev/shm下面都將直接使用tmpfs;所以如果不需要考慮機器重啟後資料的遺失,把資料放在這下面吧,釋放你的磁碟壓力!3、 tmpfs的預設大小是實體記憶體的一半。將最大容量調到40G,並且檔案節點數量調到1000000,可以透過下面的指令:
mount -o size=40G -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
4、如果需要永久修改tmpfs檔案系統的大小,則需要修改/etc/fstab
9 crontab:
#9.1功能
定時調度一些指令的執行,相當於系統層級的計時器。在/var/spool/cron/有一些以使用者名稱命名的文件,表示的是這個使用者的定時執行任務。
9.2設定方法
格式說明:
* * * * * /command path
前五個欄位可以取整數值,指定何時開始工作(分鐘 小時 日期 月份 星期),第六個域是字串,到期執行的腳本、程式等
43 21 * * * 每天21:43 執行
0 17 * * 1 每週一的 17:00 執行上
0,10 17 * * 0,2,3 每週日,週二,週三的 17:00和 17:10 執行
#0-10 17 1 * * 毎月1日從 17:00到7:10 斃隔1分鐘 執行
#0 0 1,15 * 1 毎月1日及 15日及 一日的 0:00 執行
42 4 1 * * 毎月1日的 4:42分 執行
0 21 * * 1-6 週一至週六 21:00 執行
0,10,20,30,40,50 * * * * 每隔10分 執行
*/10 * * * * 每隔10分 執行
* 1 * * * 從1:0到1:59 每隔1分鐘 執行
0 1 * * * 1:00 執行
0 */1 * * * 毎時0分 每隔1小時 執行
0 * * * * 毎時0分 每隔1小時 執行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 執行
30 5 1,15 * * 1日 和 15日的 5:30 執行
如下組態表示:每天3:00執行這個腳本/opt/ clear_old_file.sh;
這個腳本功能是:刪除/data1 /data2這兩個目錄下的五天內沒有訪問過的檔案
0 3 * * * (cd /opt/ && ./clear_old_file.sh > /dev/null &)
[root@ShanWei_119_134_255_208 ~]# cat /opt/clear_old_file.sh
#!/bin/sh
find /data1/* -type f -atime 5 -exec rm {} \;
#find /data2/* -type f -atime 5 -exec rm {} \;
#exit 0
10 proc:待續…
/proc 檔案系統是 GNU/Linux 特有的。它是一個虛擬的檔案系統,此檔案系統完全駐留在RAM中,因此在該目錄中的所有檔案都不會消耗磁碟空間。透過它能夠非常簡單地了解系統中的核心資訊、硬體資訊等;還可以透過它進行系統核心的參數的配置。許多命令實際上只是從 /proc 的文件中收集信息,然後按照它們自己的格式組織後顯示出來;像前面介紹的命令基本上就是這麼幹的。
以上是解析 CentOS 服務程序效能評估文檔的詳細內容。更多資訊請關注PHP中文網其他相關文章!