优化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 分钟内运行队列中的平均进程数量 .
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.