Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1265522
  • 博文数量: 404
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 5382
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-03 16:29
文章存档

2010年(40)

2009年(140)

2008年(224)

我的朋友

分类: LINUX

2008-12-18 12:46:24

优化linux系统需要考虑多方面的因素,因为各个因素之间相互关联,因此遇到性能问题以及性能的调节需要综合考虑,基本要素考虑与分析: 

1,那些措施能确实提供性能?

1)确保系统有足够的内存。

2)使用集群;

3)对磁盘进行优化(包括文件系统),提高I/O吞吐量;

4)网络带宽;

 

2,影响系统性能的一般因素:

1CPU

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

 表示在过去的1515分钟内运行队列中的平均进程数量.


 

 [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

阅读(615) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~