重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

linux平均负载命令 linux系统平均负载

linux系统平均负载,数值是什么意思?

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

贵溪ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

它没有在等待I/O

操作的结果-

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

-

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

例如:[root@www2

init.d]#

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.这表示该系统的性能是可以接受的。

什么样的程序让linux负载变大

在linux系统里面,常见的有两个地方可以看到当前系统的最近平均负载,top命令和uptime,如果执行一下uptime命令的话,可以看到有一个load average,表示最近1分钟,5分钟,15分钟的系统负载。

# uptime

23:31:04 up 5 days, 10:20, 1 user, load average: 0.00, 0.01, 0.05

一般单核的CPU的话,负载到1证明系统已经运行比较满了,多核的话,有几个核就能到几。

但是,有没有仔细想过,这个负载值究竟可以有多高?

我们先用一个程序做下实验

等这个程序运行一会,再执行uptime看下负载

# uptime

23:44:53 up 5 days, 10:33, 2 users, load average: 16383.13, 14111.52, 7705.88

看到没,这个程序竟然把load神奇的刷到了16000这个级别,真是厉害,这个一下子似乎打破了对系统负载的认识。

原理是这样的,通过调用vfork产生指定数量的D状态的进程,从而提高负载。看看系统文档,是这样说的

vfork() differs from fork(2) in that the calling thread is suspended until the child terminates (either normally, by calling _exit(2), or abnormally, after delivery of a fatal signal), or it makes a call to execve(2). Untilthat point, the child shares all memory with its parent, including the stack.

vfork 的子进程只要不 execve 或者退出,父进程就一直挂着(在D状态)。这里就是让最后一个子进程用 scanf 等输入。

但是这个就是极限了吗?

程序员在这种事情上是不会停止追求的,下来再看一个终极版本的程序

执行一下

# stap -g loadavg.stp $(((1

看下效果

# uptime

23:48:19 up 5 days, 10:37, 2 users, load average: 9007199254740991.00, 14987.03, 9007199254740991.00

我天,这是要爆表了,终极load,系统要炸了吗?

不过,你知道其中的原理吗,vfork相当于还是利用了系统计算load的原理,通过增加D状态进程影响计算,这个终极版,则是直接修改计算过程中用到的参数,让系统算出一个极大值来,没有什么能够超越这个了。

Linux里面uptime命令作用是什么?

[root@oldboy ~]# uptime

11:45:25 up 5 days, 13:20, 3 users, load average: 0.00, 0.01, 0.05

uptime内容显示的内容一次是系统时间,开机到现在的天数,用户登录数,以及平均负载。

核心是平均负载,其实就是【单位时间内的活跃进程数】。

2颗,单颗4核CPU为例:

1分钟:10.00 #CPU处理进程1分钟的繁忙程度,忙碌1分钟。

5分钟:8.01 #CPU处理进程5分钟的繁忙程度,忙碌了5分钟

15分钟:5.05 #CPU处理进程15分钟的繁忙程度,忙碌持续15分钟,15分钟内平均值5.

uptime:故障恢复了。

1分钟:1.00 #CPU处理进程1分钟的繁忙程度,忙碌1分钟。

5分钟:8.01 #CPU处理进程5分钟的繁忙程度,忙碌了5分钟

15分钟:5.05 #CPU处理进程15分钟的繁忙程度,忙碌持续15分钟,15分钟内平均值5.

==============================================

总结:15分钟负载值12,是高是低呢

负载数值/总的核心数=1 #开始慢的临界点,实际上1*70%==关注的临界点。

12/8=1.2 大于1就说明有问题。

负载不要超过5,是临界点。

2颗单颗4核CPU,共8核,负载就是8*70%=5左右。

需要关注负载的值:总的核心数*70%=关注的点

==================要掌握的============================

1.平均负载是运行队列中活跃的进程数。

2.平均负载,1,5,15分钟内的负载。

3.需要关注负载的值:总的核心数*70%=关注的点

4.辅助top,ps,uptime,sar,mpstat,pidstat,iostat,排查问题。

5.strace跟踪进程系统调用。

6.记住几个案例(面试讲故事)。

面试官问:

你在工作中遇到过哪些生产故障,是怎么解决的?

最好和数据库相关(负载高),和web相关(PHP进程100%,JAVA内存泄漏)

==================要掌握的============================

***6.平均负载案例分析实战\***

下面,我们以三个示例分别来看这三种情况,并用 stress、mpstat、pidstat 等工具,找出平均负载升高的根源。

stress 是 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。

mpstat 是多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。

pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

#如果出现无法使用mpstat、pidstat命令查看%wait指标建议更新下软件包

yum install sysstats -y

yum install stress -y

stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

***场景一:CPU 密集型进程\***

1.首先,我们在第一个终端运行 stress 命令,模拟一个 CPU 使用率 100% 的场景:

[root@oldboy ~]# stress --cpu 1 --timeout 600

2.接着,在第二个终端运行 uptime 查看平均负载的变化情况

# 使用watch -d 参数表示高亮显示变化的区域(注意负载会持续升高)

[root@oldboy ~]# watch -d uptime

*3.最后,在第三个终端运行 mpstat 查看 CPU 使用率的变化情况*

# -P ALL 表示监控所有CPU,后面数字5 表示间隔5秒后输出一组数据

[root@oldboy ~]# mpstat -P ALL 5

#单核CPU,所以只有一个all和0

4.从终端二中可以看到,1 分钟的平均负载会慢慢增加到 1.00,而从终端三中还可以看到,正好有一个 CPU 的使用率为 100%,但它的 iowait 只有 0。这说明,平均负载的升高正是由于 CPU 使用率为 100% 。那么,到底是哪个进程导致了 CPU 使用率为 100% 呢?可以使用 pidstat 来查询

![](18.Linux系统管理-进程管理.assets/a.png)

# 间隔5秒输出一组数据

[root@oldboy ~]# pidstat -u 5 1

#从这里可以明显看到,stress进程的CPU使用率为100%。

- 模拟cpu负载高 `stress --cpu 1 --timeout 100`

- 通过uptime或w 查看 `watch -d uptime`

- 查看整体状态mpstat -P ALL 1 查看每个cpu核心使用率

- 精确到进程: pidstat 1

****场景二:I/O 密集型进程\****

1.首先还是运行 stress 命令,但这次模拟 I/O 压力,即不停地执行 sync

[root@oldboy ~]# stress --io 1 --timeout 600s #利用sync()

stress --hdd 8 --hdd-bytes 1g # hd harkdisk 创建进程去进程写

*2.然后在第二个终端运行 uptime 查看平均负载的变化情况:*

[root@oldboy ~]# watch -d uptime

18:43:51 up 2 days, 4:27, 3 users, load average: 1.12, 0.65, 0.00

*3.最后第三个终端运行 mpstat 查看 CPU 使用率的变化情况:*

# 显示所有 CPU 的指标,并在间隔 5 秒输出一组数据

[root@oldboy ~]# mpstat -P ALL 5

#会发现cpu的与内核打交道的sys占用非常高

*4.那么到底是哪个进程,导致 iowait 这么高呢?我们还是用 pidstat 来查询*

# 间隔5秒后输出一组数据,-u 表示CPU指标

[root@oldboy ~]# pidstat -u 5 1

#可以发现,还是 stress 进程导致的。

- 通过stress 模拟大量进程读写 `stress --hdd 4 `

- 通过w/uptime查看系统负载信息 `watch -d uptime`

- 通过top/mpstat 排查 `mpstat -P ALL 1 或 top 按1`

- 确定是iowati `iostat 1查看整体磁盘读写情况 或iotop -o 查看具体哪个进程读写`

- 根据对应的进程,进行相关处理.

***场景三:大量进程的场景 高并发场景 \***

*当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程。*

*1.首先,我们还是使用 stress,但这次模拟的是 4 个进程*

[root@oldboy ~]# stress -c 4 --timeout 600

*2.由于系统只有 1 个 CPU,明显比 4 个进程要少得多,因而,系统的 CPU 处于严重过载状态*

*3.然后,再运行 pidstat 来看一下进程的情况:*

# 间隔5秒后输出一组数据

[root@oldboy ~]# pidstat -u 5 1

*可以看出,4 个进程在争抢 1 个 CPU,每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)高达 75%。这些超出 CPU 计算能力的进程,最终导致 CPU 过载。*

****分析完这三个案例,我再来归纳一下平均负载与CPU\****

***平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:

平均负载高有可能是 CPU 密集型进程导致的;

平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;

当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源****

**系统负载的计算和意义**

进程以及子进程和线程产生的计算指令都会让cpu执行,产生请求的这些进程组成"运行队列",等待cpu执行,这个队列就是系统负载, 系统负载是所有cpu的运行队列的总和.

[root@oldboyedu ~]# w

20:25:48 up 95 days, 9:06, 1 user, load average: 2.92, 0.00, 0.00

//假设当前计算机有4个核心的cpu,当前的负载是2.92

cpu1 cpu2 cpu3 cpu4

2.94/4(个cpu核心) = 73%的cpu资源被使用,剩下27%的cpu计算资源是空想的

//假设当前的计算有2个核心的cpu,当前的负载是2.92

2.92/2 = 146% 已经验证超过了cpu的处理能力

7. 日常故障排查流程(含日志)

- w/uptime, 查看负载

- ps aux/top 看看 cpu百分比, io wait或者是内存占用的高? (三高 cpu,io,内存)

- top检查具体是哪个进程,找出可疑进程

- 追踪这个进程使用情况,做什么的?

- 看看对应**日志**是否有异常

- 系统日志: /var/log/messages(系统通用日志) /var/log/secure(用户登录情况)

- 服务软件的日志

***3.那平均负载为多少时合理\***

*最理想的状态是每个 CPU核心 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。所以在评判平均负载时,首先你要知道系统有几个 CPU核心,这可以通过 top 命令获取,或`grep 'model name' /proc/cpuinfo`*

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

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

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

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

《内容来自老男孩老师的课堂笔记》

在linux 中使用uptime 所看到的负载数怎么判断负载高

uptime gives a one line display of the following information. The current time, how long the system has been running, how many users are currently logged

on, and the system load averages for the past 1, 5, and 15 minutes.

uptime会打印出过去1/5/15 分钟的负载,负载值越大负载越高。

如果只有一个CPU,负载为1代表CPU为100%


分享标题:linux平均负载命令 linux系统平均负载
网站链接:http://cqcxhl.com/article/dogehhd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP