Chinaunix首页 | 论坛 | 博客
  • 博客访问: 389786
  • 博文数量: 273
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1430
  • 用 户 组: 普通用户
  • 注册时间: 2018-02-02 15:57
文章分类

全部博文(273)

文章存档

2018年(273)

我的朋友

分类: LINUX

2018-07-06 15:27:46

问题描述

有客户反馈他们的一台ECS周期性地load升高,他们的业务流量并没有上升,需要我们排查是什么原因造成的,是否因为底层异常?

要弄清Linux虚机load高,我们要搞清楚Linux top命令中Load的含义。

Load average的值从何而来

在使用top命令检查系统负载的时候,可以看到Load averages字段,但是这个字段并不是表示CPU的繁忙程度,而是度量系统整体负载。

Load averages采样是从/proc/loadavg中获取的:

0.00 0.01 0.05 1/161 29703
每个值的含义依次为:
lavg_1 (0.00) 1-分钟平均负载
lavg_5 (0.01) 5-分钟平均负载
lavg_15(0.05) 15-分钟平均负载
nr_running (1) 在采样时刻,运行队列的任务的数目,与/proc/stat的procs_running表示相同意思,这个数值是当前可运行的内核调度对象(进程,线程)。
nr_threads (161) 在采样时刻,系统中活跃的任务的个数(不包括运行已经结束的任务),即这个数值表示当前存在系统中的内核可调度对象的数量。
last_pid(29703) 系统最近创建的进程的PID,包括轻量级进程,即线程。
假设当前有两个CPU,则每个CPU的当前任务数为0.00/2=0.00

如果你看到load average数值是10,则表明平均有10个进程在运行或等待状态。有可能系统有很高的负载但是CPU使用率却很低,或者负载很低而CPU利用率很高,因为这两者没有直接关系。
Linux 源码中关于这一块的说明: 
static int loadavg_proc_show(struct seq_file *m, void *v)
{
        unsigned long avnrun[3];

        get_avenrun(avnrun, FIXED_1/200, 0);

        seq_printf(m, "%lu.%02lu %lu.%02lu %lu.%02lu %ld/%d %d\n",
                LOAD_INT(avnrun[0]), LOAD_FRAC(avnrun[0]),
                LOAD_INT(avnrun[1]), LOAD_FRAC(avnrun[1]),
                LOAD_INT(avnrun[2]), LOAD_FRAC(avnrun[2]),
                nr_running(), nr_threads,
                task_active_pid_ns(current)->last_pid); return 0;
}

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