Linux性能分析和调整的基本原则
优化linux系统需要考虑多方面的因素,因为各个因素之间相互关联,因此遇到性能问题以及性能的调节需要综合考虑,基本要素考虑与分析:
1,那些措施能确实提供性能?
1)确保系统有足够的内存。
2)使用集群;
3)对磁盘进行优化(包括文件系统),提高I/O吞吐量;
4)网络带宽;
2,影响系统性能的一般因素:
1)CPU
2)内存
3)磁盘I/O宽带
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
Linux
2.4.21-4.ELsmp (linux1) 01/04/05
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分钟内运行队列中的平均进程数量.
[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
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
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: 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 (bhcompile@porky.devel.redhat.com) (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
阅读(872) | 评论(0) | 转发(0) |