一、什么是系统平均负载(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"参数。
分享到:
相关推荐
本文主要探讨的是Linux系统的CPU优化以及平均负载的理解,这两个概念对于诊断和解决性能问题至关重要。 **什么是系统性能调优** 系统性能调优涉及两个核心方面:系统资源管理和应用负载调整。资源管理包括对CPU、...
而负载均衡集群则更注重于优化资源分配,确保多台服务器能平均分担工作负载,防止过载。 负载均衡是负载均衡集群的核心,它通过智能地分配网络流量到不同的服务器,避免了单一服务器过载的情况。负载均衡器可以基于...
Linux学习 - 命令运行监测和软件安装 在 Linux 中,命令运行监测和软件安装是两个非常重要的概念。命令运行监测是指监测当前命令的运行时间和资源使用情况,而软件安装则是指在 Linux 系统中安装新的软件包。 命令...
- **`uptime`**: 显示当前时间、系统运行时长、在线用户数以及过去1分钟、5分钟和15分钟的平均负载。 - **`w`**: 提供更详细的用户信息以及系统负载情况。 #### 四、`top`命令解析 `top`命令提供了一个动态实时的...
- `uptime`:显示系统运行时间、用户数量以及平均负载; - `vmstat`:查看虚拟内存统计信息。 - **文件模式匹配符:** - `^`:行首匹配; - `$`:行尾匹配; - `*`:任意字符(零个或多个)匹配; - `.`:...
平均负载是评估系统当前工作量的重要指标,它反映了在测量周期内处于可运行状态或不可中断状态的平均进程数。系统中CPU的负载过高可能意味着存在CPU密集型进程或I/O性能问题,这时我们可以使用stress工具来模拟负载...
在Linux中,CPU负载并非简单的CPU使用率,而是指在特定时间间隔内(如过去1分钟、5分钟和15分钟)处于就绪状态(等待CPU执行)的进程数的平均值。这意味着即使CPU空闲,只要有很多进程在等待执行,负载也会高。 要...
通过深入学习这些文档,可以全面了解Linux调度器的工作原理,如何在多核环境中优化负载,以及如何实现能源效率。这对于系统管理员、内核开发者或任何希望深入了解Linux性能的人来说都是宝贵的知识资源。
- **uptime**: 显示系统已经运行了多久,以及平均负载等信息。 5. **定时任务** - **cron**: 定时任务管理器,允许用户设置定时执行的任务。通过`crontab -e`可以编辑当前用户的定时任务列表。 #### 三、网络...
5. Load Average 的概念:Load Average 是一个衡量系统负载的指标,即系统中所有进程的平均负载。Load Average 的值越高,表示系统的负载越高。 6. 系统信息的获取:通过读取/proc目录中的文件,可以获取系统的各种...
`uptime` 命令提供了系统运行时间、当前时间、已登录用户数量、平均负载等信息。例如: ``` uptime ``` #### 5. uname - 查看系统内核版本 `uname` 命令用于获取系统内核的详细信息。常用的选项有 `-r`,用于显示...
- uptime:显示系统已经运行了多长时间,以及系统平均负载信息。 - ps和pstree:命令行工具,用于报告当前进程的快照以及显示进程间的层次关系。 - free:用于显示系统中空闲和已用的内存总量以及交换区的使用...
- `uptime`:显示系统运行时间、登录用户数和负载平均值。 - `chfn`:更改用户信息,如全名或办公室位置。 - `finger`:显示用户的注册信息和状态。 - `last`:列出最近的登录活动记录。 - `talk`和`write`:...
实验中提到的系统负荷函数可能是指`/proc/loadavg`,它提供了系统平均负载的信息。 在程序开发过程中,学生还学习了如何使用GDB(GNU调试器)进行调试。当程序出现问题时,GDB可以加载核心转储文件(core file)...
`uptime` 命令用于显示系统已运行的时间,当前时间,登录用户数量,以及系统的平均负载等信息。 - **命令格式**:`uptime` - **示例**:执行`uptime`,可以看到类似以下输出: ``` 14:40:06 up 1 day, 20:25, 2 ...
- **load average**:显示系统在过去1、5、15分钟内的平均负载程度。 - **FROM**:显示用户从何处登录系统。“:0.0”表示用户是从X Window下登录,本地终端登录显示为“tty”,远程终端登录则显示为“pts”。 - *...
`load average`指标反映了过去1分钟、5分钟和15分钟内的平均负载,它是衡量系统压力的重要参考。对于单CPU系统,负载平均值在1或2是正常的,而多CPU系统可承受更高的值。 2. **dmesg命令**:主要用于查看内核启动时...