Linux性能分析和調整的基本原則
優化linux系統需要考慮多方面的因素,因為各個因素之間互相關聯,是以遇到性能問題以及性能的調節需要綜合考慮,基本要素考慮與分析:
1,那些措施能确實×××能?
1)確定系統有足夠的記憶體。
2)使用叢集;
3)對磁盤進行優化(包括檔案系統),提高I/O吞吐量;
4)網絡帶寬;
2,影響系統性能的一般因素:
1)CPU
2)記憶體
3)磁盤I/O寬帶
www.ixdba.net
4)網絡I/O寬帶
一般來說,現在的網絡伺服器針對提供的服務,其CPU速度是足夠提供處理能力的;是以
影響性能的是磁盤和記憶體。記憶體不夠,那麼對虛拟記憶體管理系統來說要頻繁地進行記憶體頁
寫到磁盤,磁盤寫到記憶體的操作。這就是記憶體交換過程,很大地影響了性能。
而網絡I/O,一般來說他不是獨立的。是以要綜合其他因素來考慮。
3,檢查系統的性能情況。
1)CPU使用情況分析
以下名額來衡量CPU的負載情況.
總體使用率:
[root@linux stone]sar -u 5 5
Linux 2.4.21-4.ELsmp (linux1) 01/04/05
18:00:17 CPU %user %nice %system %idle
18:00:22 all 1.50 0.00 0.93 97.57
18:00:27 all 16.02 0.00 4.74 79.24
18:00:32 all 5.69 0.00 3.77 90.53
18:00:37 all 0.79 0.00 1.10 98.11
18:00:42 all 2.69 0.00 1.21 96.10
Average: all 5.15 0.00 2.24 92.61
獲得指定CPU号(多CPU情況下)的使用情況
[root@linux stone]sar -U 0
00:00:00 CPU %user %nice %system %idle
00:10:00 0 1.10 0.00 0.83 98.36
00:20:00 0 0.55 0.00 0.78 97.52
00:30:00 0
0.97 0.00 0.77 98.57
00:40:00 0 1.15 0.00 0.93 97.09
00:50:00 0 1.88 0.00 1.33 95.96
01:00:00 0 1.20 0.00 1.11 96.66
01:10:00 0 0.78 0.00 1.26 97.96
01:20:00 0 1.07 0.00 1.04 96.91
01:30:00 0 1.24 0.00 1.01 97.29
可以獲得運作使用者程序%user,核心程序%system 和空閑狀态是CPU時間的百分比.
觀察資料,獲得結論:
%user越大一般表明伺服器處于運作狀态;%system越大表明伺服器處于系統調用
或者I/O操作。如果CPU有大量時間處于空閑狀态(%idle),那就說明CPU足夠。
我們還可以獲得每個時間段上核心切換目前程序的次數,如果這個數很高,表示伺服器
硬體有問題。
[root@linux stone]sar -w
07:50:00 cswch/s
08:00:00 285.49
08:10:00 259.64
08:20:00 387.54
08:30:00 359.15
08:40:00 504.29
08:50:00 762.73
09:00:00 572.93
09:10:01 885.75
09:20:00 1159.97
09:30:00 1101.83
09:40:00 1095.72
09:50:00 1052.89
10:00:00 961.75
10:10:00 861.31
10:20:00 501.76
10:30:00 370.81
10:40:00 736.26
10:50:00 635.93
11:00:00 399.51
11:10:00 873.58
11:20:00 741.14
11:30:00 776.49
11:40:00 641.55
Average:
平均負載:
系統平均負載被定義為在特定時間間隔内運作隊列中的平均程序數,一般來說隻要每個CPU的當
前活動程序數不大于3那麼系統的性能就是良好的,如果每個CPU的任務數大于5,那麼就表示這
台機器的性能有嚴重問題.
[root@linux stone]uptime
18:07:22 up 10 days, 8:05, 1 user, load average: 0.49, 0.31, 1.18
表示在過去的1、5、15分鐘内運作隊列中的平均程序數量.
IXDBA.NET社群論壇
[root@linux stone]sar -q
07:50:00 runq-sz plist-sz ldavg-1 ldavg-5
08:00:00 0 214 0.01 0.08
08:10:00 0 222 0.37 0.21
08:20:00 1 229 0.41 0.42
08:30:00 0 239 0.45 1.10
08:40:00 0 242 0.24 0.36
08:50:00 1 253 1.55 1.98
09:00:00 0 248 0.45 0.55
09:10:01 0 273 8.17 3.85
09:20:00 0 295 0.62 0.99
09:30:00 0 279 0.87 0.79
09:40:00 1 284 0.62 0.68
09:50:00 0 302 0.38 0.51
10:00:00 0 277 0.98 0.79
10:10:00
2 289 0.60 0.55
10:20:00 2 264 0.28 0.33
10:30:00 0 269 0.28 0.31
10:40:00 0 284 0.58 0.46
10:50:00 0 324 1.18 0.62
11:00:00 0 311 0.43 0.31
11:10:00 0 330 0.65 0.54
11:20:00 1 335 0.45 0.45
11:30:00 1 345 0.39 0.47
11:40:00 0 322 0.22 0.36
Average: 0 296 0.65 0.60
runq-sz:等待運作的程序數
plist-sz:總的程序數(在process list).
ldavg-1 : 系統最後一分鐘的平均負載
ldavg-5: 系統最後5分鐘的平均負載
每個程序的CPU消耗量:通過了解具體的某個程序對CPU消耗的統計,我們可以确定某一程序是否存在問題,
并進行改善(改善該程序?改善硬體?....)
可以用ps -aux或者top來觀察某一程序對CPU的消耗情況。
另外,vmstat工具也可以報告一些cpu的情況.
[root@linux stone]vmstat
procs memory swap io system cpu
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 92456 141164 102032 2346524 0 0 7
2) 記憶體情況
你必須對系統記憶體管理過程進行了解,特别是頁的交換等原理。一般用活動虛拟記憶體的總量和換頁率來衡量
記憶體的使用情況。從活動虛拟記憶體總量我們可以獲得記憶體的需求量;根據換頁率我們可以獲得記憶體有多少處于
使用中。換頁率越高,說明記憶體使用很大(磁盤會咯咯響),這時候應該增加記憶體。
活動虛拟記憶體的總量(VM)=實際記憶體大小(size of real memory)+使用的交換空間大小(amount of swap space used)
[root@linux stone]sar -r
07:50:00 kbmemfree kbmemused %memused kbmemshrd kbbuffers kbcached kbswpfree kbswpused %swpused
IXDBA.NET技術社群
08:00:00 74532 3536724 97.94 0 90808 2237872 8294676 91172 1.09
08:10:00 93652 3517604 97.41 0 88864 2218328 8294696 91152 1.09
08:20:00 63192 3548064 98.25 0 69988 2269068 8294700 91148 1.09
08:30:00 272344 3338912 92.46 0 22552 2119284 8290536 95312 1.14
08:40:00 126104 3485152 96.51 0 38888 2242808 8290560 95288 1.14
08:50:00 191476 3419780 94.70 0 18528 2246968 8289944 95904 1.14
09:00:00 55304 3555952 98.47 0 32836 2368824 8285288 100560 1.20
09:10:01 201592 3409664 94.42 0 50876 2251528 8285708 100140 1.19
09:20:00
32912 3578344 99.09 0 66316 2410260 8285984 99864 1.19
09:30:00 55232 3556024 98.47 0 45944 2400496 8286072 99776 1.19
09:40:00 51652 3559604 98.57 0 64392 2383592 8286216 99632 1.19
09:50:00 45172 3566084 98.75 0 70144 2388804 8286428 99420 1.19
10:00:00 52068 3559188 98.56 0 64676 2395512 8286564 99284 1.18
10:10:00 51400 3559856 98.58 0 49620 2407528 8286596 99252 1.18
10:20:00 41692 3569564 98.85 0 47684 2424280 8286652 99196 1.18
10:30:00 35200 3576056 99.03 0 50336 2431268 8286656 99192 1.18
10:40:00 21400 3589856 99.41 0 64612 2423780 8286728 99120 1.18
10:50:00 83048 3528208 97.70 0 68084 2331448 8286796 99052 1.18
11:00:00 22072 3589184 99.39 0 70764
2416216 8286816 99032 1.18
11:10:00 34376 3576880 99.05 0 56780 2405008 8286824 99024 1.18
11:20:00 36376 3574880 98.99 0 48756 2397968 8286836 99012 1.18
11:30:00 43808 3567448 98.79 0 49708 2398852 8286924 98924 1.18
11:40:00 34884 3576372 99.03 0 60960 2408756 8286936 98912 1.18
11:50:00 38328 3572928 98.94 0 67080 2407960 8286936 98912 1.18
12:00:00 38932 3572324 98.92 0 72724 2406132 8286940 98908 1.18
12:10:00 109300 3501956 96.97 0 75348 2326492 8286940 98908 1.18
Average: 64548 3546708 98.21 0 96633 2330707 8291911 93937 1.12
[root@linux stone]swapon -s
Filename Type Size Used Priority
/dev/sdb8 partition 4192924 98908 -1
/dev/sdb10
partition 4192924 0 -2
通過以上資料,我們可以獲得
活動虛拟記憶體的總量(VM)=kbmem + kbswpused=3.54G
3.47G就是目前伺服器需要的記憶體總量.
[root@linux stone]sar -B
07:50:00 pgpgin/s pgpgout/s activepg inadtypg inaclnpg inatarpg
08:00:00 9.34 139.23 566687 0 13589 142713
08:10:00 25.71 108.40 564261 0 13539 141743
08:20:00 149.36 191.93 573187 0 13399 143335
08:30:00 43.63 234.46 529094 35493 11998 134494
08:40:00 246.68 277.54 565985 25012 9177 141597
08:50:00 381.88 536.92 553537 52107 12381 140623
09:00:00 190.29 307.08 581102 31530 12311 147195
09:10:01 259.69 860.26 560927 60833 13643 142327
09:20:00 487.91 550.73 604302 55059 14379 151157
09:30:00 382.74 710.78 598312 70977 14059 149736
09:40:00 354.97 510.46 598398 70661 13795 149920
09:50:00 280.48 629.94 602880 64397 13864 150517
10:00:00 447.48 659.52 602483 69873 13362 150261
10:10:00 404.97 458.69 603719 68104
13724 150115
10:20:00 310.69 272.95 601711 67460 13898 150651
10:30:00 121.59 184.03 603972 56077 13928 151109
10:40:00 263.55 392.60 605818 60314 17208 151754
10:50:00 210.45 348.91 589640 72762 13761 148093
11:00:00 190.55 199.58 607545 54517 15086 151774
11:10:00 350.40 462.20 603874 75205 14074 150970
11:20:00 374.10 437.94 603769 70937 13904 150877
11:30:00 163.58 381.97 601763 62157 14369 150481
11:40:00 96.75 298.26 605429 45214 14093 151042
11:50:00 127.14 159.75 602817 38423 13911 150789
12:00:00 57.85 186.46 602126 27663 14362 150737
12:10:00 51.41 216.03 585281 32559 13808 146942
12:20:00 95.07 225.01 600874 6573 13793 150148
12:30:00 197.36 162.14 605716 5821 16786 151620
12:40:00 16.31 145.40 604436 0 14285 151002
Average: 100.76 226.88 591604 16947 13867
148584
pgpgin/s: 換入頁的KB數
pgpgout/s: 換出頁的KB數
activepg: 記憶體中活動的頁數
inadtypg: Number of inactive dirty (modified or potentially modified) pages in memory.
inaclnpg: Number of inactive clean (not modified) pages in memory.
inatarpg: "Inactive target" number of pages.This field is a 1-minute floating average of the number of
pages the system needs to "steal" every second in order to satisfy memory demand.
如果系統總是存在大量的換出頁的KB數,說明系統需要記憶體.當然,inatarpg參數也能說明問題。
3)磁盤I/O
我們可以用iostat來獲得系統磁盤的資料.
[stone@localhost stone]$ iostat
Linux 2.4.20-19.7 (localhost.localdomain) 01/06/2005
avg-cpu: %user %nice %sys %idle
0.09 0.00 0.21 99.70
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
dev3-1 0.77 4.65 17.03 11788068 43140248
tps:Indicate the number of transfers per second that were issued to the device
Blk_read/s:Indicate the amount of data read from the drive expressed in a number of blocks per second
Blk_wrtn/s:Indicate the amount of data written to the drive expressed in a number of blocks per second.
Blk_read:The total number of blocks read.
Blk_wrtn:The total number of blocks written.
[stone@localhost stone]$ iostat -x
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
hdb 0.46 1.48 0.12 0.65 4.65 17.04 28.13 0.10 118.90 207.70 1.60
hdb1 0.00 0.00 0.00 0.00 0.00 0.00 9.52 0.00 128.76 88.84 0.00
hdb2 0.46 1.48 0.12 0.65 4.65 17.01 28.17 0.09 117.58 13.39
0.10
hdb3 0.00 0.00 0.00 0.00 0.00 0.03 15.25 0.00 619.92 519.40 0.01
[stone@localhost stone]$ procinfo
Linux 2.4.20-19.7 ([email protected]) (gcc 2.96 20000731 ) #1 Tue Jul 15 13:45:48 EDT 2003 1CPU [localhost]
Memory: Total Used Free Shared Buffers Cached
Mem: 255896 247240 8656 0 78772 87056
Swap: 522104 26036 496068
Bootup: Wed Dec 8 10:28:53 2004 Load average: 0.00 0.00 0.00 1/72 2571
user : 0:37:18.15 0.1% page in : 5894299 disk 1: 306840r 1648467w
nice : 0:00:20.57 0.0% page out: 21578634
system: 1:27:38.76 0.2% swap in : 985
idle : 29d 5:39:38.40 99.7% swap out: 8822
uptime: 29d 7:44:55.87 context :320846503
irq 0: 253349588 timer irq 6: 6
irq 1: 3 keyboard irq 8: 1 rtc
irq 2: 0 cascade [4] irq 12: 5277552 usb-uhci, eth0
irq 3: 3 irq 14: 1953315 ide0
irq 4: 3
4)網絡負載
可以先檢視網絡接口資料狀态
ifconfig如果發現collisions:0 資料很大(占發送資料或者接受資料的5%以上),那麼說明網絡
嚴重堵塞。
netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 4701184 0 0 0 912247 0 0 0 BMRU
lo 16436 0 1285408 0 0 0 1285408 0 0 0 LRU
本文來自:http://www.cnblogs.com/shineshqw/articles/1816197.html