现在的位置: 首页 > 综合 > 正文

linux系统的平均负载

2013年03月09日 ⁄ 综合 ⁄ 共 9799字 ⁄ 字号 评论关闭
文章目录

E文: http://en.wikipedia.org/wiki/Load_%28computing%29

http://www.teamquest.com/resources/g...ay/5/index.htm

Other commands for assessing system performance include:

  • uptime the system reliability and load average
  • top for an overall system view
  • htop interactive process viewer
  • iotop interactive I/O viewer - iotop homepage
  • iostat for storage I/O statistics
  • netstat for network statistics
  • mpstat for CPU statistics
  • tload load average graph for terminal
  • xload load average graph for X

linux下的cpu平均负载

 

一、注销登陆过的用户
先用w命令查看该用户tty号,然后用fuser -k tty号(或显示 pts/*)就可以踢出了

先用w命令查看在线用户
然后
pkill -kill -t tty

如pkill -kill -t pts/1

二、CPU平均负载
为什么要监控系统 的平均负载?
     有时我们会感觉到系统响应很慢,但是又找不到原因,
     这时要查平均负载,是否有大量的进程在排队等待
1,平均负载是什么?
           特定时间间隔内运行队列中的平均进程数
           好象还不够明白:就是进程队列的长度,有多少个进程在排队等待运行
2,什么是"进程队列"?
           一个进程满足以下条件就会位于进程队列中
                  1,它没有在等待I/O操作的结果
                  2,它没有主动进入等待状态(即没有调用wait)
                  3,它没有被停止
3,如何查看平均负载?
最简单的命令是uptime
例子:
[lhd@localhost ~]$ uptime
00:44:22 up 1:17, 3 users, load average: 8.13, 5.90, 4,94
4,显示的内容是什么意思?
          load average:    8.13,5.90,4,94
          显示的是过去的1,5,15分钟内进程队列中的平均进程数量
5,如何衡量当前系统是否负载过高?
        如果每个cpu(可以按CPU核心的数量计算)上当前活动进程数不大于3,则系统性能良好,
        不大于4,表示可以接受
        如大于5,则系统性能问题严重
        上面例中的8.13,如果有2个cpu核心,则8.13/2=4.065,   此系统性能可以接受
        建议设置严格的报警值为: CPU核心的数量
        比如:CPU核心数量为2,则设置报警值为2
        (这样设置是合理的,因为毕竟不是每个应用都支持多CPU及多核心)
6,查看平均负载的命令
                 有5个可用:
                 tload    能够绘制出负载变化的图形
                 uptime   同时显示开机以来的时间
                 w        同时显示出已登录的用户
                 top      这个对资源占用太高,不建议使用
                 cat /proc/loadavg   通过/proc系统信息得到平均负载
        注意:如果你要持续的观察平均负载,建议用 watch uptime
             或 watch cat /proc/loadavg
        备注:关于watch:每隔一定时间执行指定的程序,并全屏显示结果
                      时间默认是2秒

 

uptime

这个uptime外壳命令产生下列输出:

[pax:~]% uptime
9:40am up 9 days, 10:36, 4 users, load average: 0.02, 0.01, 0.00

它显示自从上次系统重启以来,活动的用户进程数量和所谓的平均负荷指标(load average)。

procinfo

在Linux系统上,procinfo命令产生以下输出:

[pax:~]% procinfo
Linux 2.0.36 (root@pax) (gcc 2.7.2.3) #1 Wed Jul 25 21:40:16 EST 2001 [pax]Memory: Total Used Free Shared Buffers Cached
Mem: 95564 90252 5312 31412 33104 26412
Swap: 68508 0 68508Bootup: Sun Jul 21 15:21:15 2002 Load average: 0.15 0.03 0.01 2/58 8557
...

平均负载指标出现在这个输出的左下角。

w

w(ho)命令产生下列输出:

 [pax:~]% w
  9:40am  up 9 days, 10:35,  4 users,  load average: 0.02, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
mir ttyp0 :0.0 Fri10pm 3days 0.09s 0.09s bash
neil ttyp2 12-35-86-1.ea.co 9:40am 0.00s 0.29s 0.15s w
...

请注意,第一行的输出与uptime命令的输出相同。

top

top命令是最近加入到UNIX命令集中的,它通过计算进程消耗CPU的时间来给进程排名。它产生下列输出:

  4:09am  up 12:48,  1 user,  load average: 0.02, 0.27, 0.17
58 processes: 57 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 0.5% user, 0.9% system, 0.0% nice, 98.5% idle
Mem: 95564K av, 78704K used, 16860K free, 32836K shrd, 40132K buff
Swap: 68508K av, 0K used, 68508K free 14508K cched PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
5909 neil 13 0 720 720 552 R 0 1.5 0.7 0:01 top
1 root 0 0 396 396 328 S 0 0.0 0.4 0:02 init
2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd
3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd
...

所有这些命令,请注意,输出中都有三个数字报告平均负载。相当普遍的是,这些数字显示出从左至右的降序。但是有时,又是升序排列,正如上面的输出。

http://blog.csdn.net/kelly859/archive/2010/07/29/5772786.aspx

----------------------------------------------------------------------------------------

linux平均负载的含义

 

负载的定义:

Tim O'Reilly and Crew, p.726

    平均负载试图度量任何时间的活动进程数量。作为cpu利用率的度量,平均负载是很简单的,没有精确的定义,但很有用。

Adrian Cockcroft, p.229

    平均负载是当前cpu上的运行队列长度和正在运行的任务数之和。在Solaris 2.0 and 2.2平均负载不包括正在运行的任务数,这个bug在Solaris 2.3已经修正。

定义3

    平均负载是变成有效状态的进程(原先等待资源排队)数加上当前运行的进程数。

定义4

    Linux遵循了传统Unix的标准,它统计的load average是在一个时间段中处于可运行或处于运行状态的进程平均数量加上处于D状态的进程

    (R = 运行 S = 休眠 D = 等待 )。

    Linux上的load average表明的是系统的要完成的"工作", "工作"既有CPU密集的程序,也有I/O密集的程序。或者是CPU和I/O并重的程序。

定义5

    通过统计运行在cpu上运行的和可运行的进程,unix统计平均负载。linux和unix一样,但是也统计在不可中断睡眠状态的进程。不可中断睡眠状态的进程通常意味着一个进程阻塞在I/o,例如等待磁盘。


平均的定义

    平均负载是负载的移动平均,top显示的3个数字是1分钟,5分钟,15分钟的移动平均

linux查看平均负载

apple@ubuntu:~$ procinfo

Memory:        Total        Used        Free     Buffers                      
RAM:         1018580      995712       22868       66244                      
Swap:         522072      157592      364480                                  
Bootup: Wed Jun  3 07:50:11 2009   Load average: 3.75 3.16 3.47 6/264 11601   
user  :   00:40:03.05  19.5%  page in :         16083696                      
nice  :   00:02:09.05   1.0%  page out:         15227028                      
system:   01:35:21.93  46.4%  page act:          2246522                      
IOwait:   00:40:05.57  19.5%  page dea:          2297177                      
hw irq:   00:01:01.68   0.5%  page flt:          6246530                      
sw irq:   00:01:39.03   0.8%  swap in :            19640                      
idle  :   00:25:03.91  12.2%  swap out:            43581                      
uptime:   03:25:23.79         context :         26731214                      
irq   0:        193  timer               irq  12:     479257  i8042           
irq   1:       5460  i8042               irq  14:    1552361  ata_piix        
irq   3:          6                      irq  15:          0  ata_piix        
irq   4:          6                      irq  16:    1384413  uhci_hcd:usb5, i9

irq   6:          2  floppy              irq  17:      74792  Intel ICH6      
irq   7:          0  parport0            irq  18:          0  uhci_hcd:usb4   
irq   8:      20419  rtc0                irq  19:      36623  uhci_hcd:usb3, et

irq   9:          0  acpi                irq  23:          0  ehci_hcd:usb1, uh

sda           744351r          808004w   sda6          220811r           25714w

sda1              35r               0w   sda7           36342r           11954w

sda2               4r               0w   sda8            4549r            2245w

sda5             839r               4w   sda9          481744r          768087w

lo          TX 364.71KiB     RX 364.71KiB     vmnet1      TX 0.00B         RX 0.00B       
eth0        TX 1.72MiB       RX 9.80MiB       vmnet8      TX 0.00B         RX 0.00B 
apple@ubuntu:~$ uptime

11:17:47 up  3:27,  2 users,  load average: 3.81, 3.30, 3.47

apple@ubuntu:~$

平均负载的引申含义

假如系统有M个核心或者处理器而且平均负载是M,说明系统充分利用。如果平均负载大于M,说明多余的进程在被执行前必须在可运行队列中等待。

当平均负载小于M,说明系统性能不是被cpu能力限制的。

你不必担心平均负载,除非平均负载持续的高于系统核心数或者处理器数。

部分内容参考于网络资源

 

http://www.linuxeden.com/html/solution/20090603/65995.html

--------------------------------------------------------------------------------------

cpu使用率和平均负载的理解

这两个从一定程度上都可以反映一台机器的繁忙程度.

cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait。

平均负载(load average)是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处于wait状态进程。

以上分析可以看出,一台机器很有可能处于低cpu使用率高负载的情况,因此看机器的繁忙程度应该结合两者,从实际的使用情况观察,自己的一台双核志强2.8GHZ,2G内存的机器在平均负载到50左右,cpu使用率才接近100%(应用有不少io操作),这种情况下应用还算流畅,实际访问延迟不是很高。因此在cpu还空闲的情况下,如何提高io响应是减少负载的关键,很多人认为负载到几十了机器就非常繁忙了,我倒觉得如果这个时候cpu使用率比较低,则负载高可能不能很好说明问题,一旦cpu处理的进程处理完后,那些等待的进程也能立刻得到响应,这种情况下应该优化io读写速度。真到cpu使用率一直90%以上,即使平均负载只有个位数(比如某一个进程一直在运算),那机器其实也已经繁忙了~

网上有说单个cpu维持的平均进程队列数在5以下,机器性能还算良好,我觉得这个不是唯一的标准,还是需要看cpu使用率,两者结合来看的。

--------------------------------------------------------------------------------------------------------

关于Linux系统的平均负载最全面介绍

 

一、什么是系统平均负载(Load average)?

在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:

- 它没有在等待I/O操作的结果

- 它没有主动进入等待状态(也就是没有调用'wait')

- 没有被停止(例如:等待终止)

例如:

[root@opendigest root]# uptime

7:51pm up 2 days, 5:43, 2 users, load average: 8.13, 5.90, 4.94

命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。

一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。

二、Load average的算法

上面的输出数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。如果这个数除以CPU的数目,结果高于5的时候就表明系统在超负荷运转了。其算法(摘自Linux 2.4的内核代码)如下:

文件: include/linux/sched.h:

#define FSHIFT 11 /* nr of bits of precision */

#define FIXED_1 (1<#define LOAD_FREQ (5*HZ) /* 5 sec intervals */

#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point, 2048/pow(exp(1), 5.0/60) */

#define EXP_5 2014 /* 1/exp(5sec/5min), 2048/pow(exp(1), 5.0/300) */

#define EXP_15 2037 /* 1/exp(5sec/15min), 2048/pow(exp(1), 5.0/900) */

#define CALC_LOAD(load,exp,n) /

load *= exp; /

load += n*(FIXED_1-exp); /

load >>= FSHIFT;

/**********************************************************/

文件: kernel/timer.c:

unsigned long avenrun[3];

static inline void calc_load(unsigned long ticks)

{

unsigned long active_tasks; /* fixed-point */

static int count = LOAD_FREQ;

count -= ticks;

if (count < 0) {

count += LOAD_FREQ;

active_tasks = count_active_tasks();

CALC_LOAD(avenrun[0], EXP_1, active_tasks);

CALC_LOAD(avenrun[1], EXP_5, active_tasks);

CALC_LOAD(avenrun[2], EXP_15, active_tasks);

}

}

/**********************************************************/

文件: fs/proc/proc_misc.c:

#define LOAD_INT(x) ((x) >> FSHIFT)

#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)

static int loadavg_read_proc(char *page, char **start, off_t off,

int count, int *eof, void *data)

{

int a, b, c;

int len;

a = avenrun[0] + (FIXED_1/200);

b = avenrun[1] + (FIXED_1/200);

c = avenrun[2] + (FIXED_1/200);

len = sprintf(page,"%d.%02d %d.%02d %d.%02d %ld/%d %d/n",

LOAD_INT(a), LOAD_FRAC(a),

LOAD_INT(b), LOAD_FRAC(b),

LOAD_INT(c), LOAD_FRAC(c),

nr_running(), nr_threads, last_pid);

return proc_calc_metrics(page, start, off, count, eof, len);

}

三、/proc/loadavg 各项数据的含义

/proc文件系统是一个虚拟的文件系统,不占用磁盘空间,它反映了当前操作系统在内存中的运行情况,查看/proc下的文件可以聊寄到系统的运行状态。查看系统平均负载使用“cat /proc/loadavg”命令,输出结果如下:

0.27 0.36 0.37 4/83 4828/

前三个数字大家都知道,是1、5、15分钟内的平均进程数(有人认为是系统负荷的百分比,其实不然,有些时候可以看到200甚至更多)。后面两个呢,一个的分子是正在运行的进程数,分母是进程总数;另一个是最近运行的进程ID号。

四、查看系统平均负载的常用命令

1、cat /proc/loadavg

2、uptime

名称: uptime

使用权限: 所有使用者

使用方式: uptime [-V]

说明: uptime 提供使用者下面的资讯,不需其他参数:

现在的时间 系统开机运转到现在经过的时间 连线的使用者数量 最近一分钟,五分钟和十五分钟的系统负载

参数: -V 显示版本资讯。

范例: uptime

其结果为:

10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99

3、w

功能说明:显示目前登入系统的用户信息。

语 法:w [-fhlsuV][用户名称]

补充说明:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w

指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

参 数:

-f 开启或关闭显示用户从何处登入系统。

-h 不显示各栏位的标题信息列。

-l 使用详细格式列表,此为预设值。

-s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。

-u 忽略执行程序的名称,以及该程序耗费CPU时间的信息。

-V 显示版本信息。

4、top

功能说明:显示,管理执行中的程序。

语 法:top [bciqsS][d <间隔秒数>][n <执行次数>]

补充说明:执行top指令可显示目前正在系统中执行的程序,并通过它所提供的互动式界面,用热键加以管理。

参 数:

b 使用批处理模式。

c 列出程序时,显示每个程序的完整指令,包括指令名称,路径和参数等相关信息。

d<间隔秒数> 设置top监控程序执行状况的间隔时间,单位以秒计算。

i 执行top指令时,忽略闲置或是已成为Zombie的程序。

n<执行次数> 设置监控信息的更新次数。

q 持续监控程序执行的状况。

s 使用保密模式,消除互动模式下的潜在危机。

S 使用累计模式,其效果类似ps指令的"-S"参数。

5、tload

功能说明:显示系统负载状况。

语 法:tload [-V][-d <间隔秒数>][-s <刻度大小>][终端机编号]

补充说明:tload指令使用ASCII字符简单地以文字模式显示系统负载状态。假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形。

参 数:

-d<间隔秒数> 设置tload检测系统负载的间隔时间,单位以秒计算。

-s<刻度大小> 设置图表的垂直刻度大小,单位以列计算。

-V 显示版本信息。

http://linux.chinaitlab.com/attestation/816287.html

抱歉!评论已关闭.