1、uptime的三个参数
[root@server2 ~]# uptime
10:50:28 up 1 day, 12:41, 5 users, load average: 0.00, 0.01, 0.05
分别是当前时间,系统运行时间,正在登录用户数
最后三个数字依次是过去1分钟、5分钟、15分钟的平均负载(load average)
2、平均负载的定义?
平均负载指的是单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。
可运行状态:ps -aux 显示 进程状态 为R 的进程
(表示:running或者runable)
不可中断进程: 正处于内核态关键流程中的进程,并且这些进程是不可打断的,比如常见的(进程等待硬件设备I/O响应),也就是ps -aux中状态为D的进程(Disk sleep)
平均负载,可以理解为平均活跃进程数,最理想的情况就是,每个cpu上刚好有一个进程,这样每个进程都得到了充分的利用
比如在2个cpu的机器上,平均负载为2,那么cpu刚好完全被占用,在4个cpu的机器上意味着cpu有50%的空闲,在一个cpu的机器上,意味着有一半的进程竞争不到cpu。
3、如何获取一台机器的cpu数?
-
top 命令 然后按1
- 查看/proc/cpuinfo
[root@server2 ~]# grep 'model name' /proc/cpuinfo | wc -l
2
4、在实际的生产环境中,当平均负载高于cpu数量的70%的时候,就应该注意分析排查负载高的问题了。
但是这个数字不是绝对的,还是应该把平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。
5、平均负载和cpu使用率
平均负载的含义是单位时间内,处于可运行状态和不可打断状态的进程数,所以,它不仅包括了正在使用CPU的进程,还包括等待CPU和等待I/O的进程
CPU使用率,是单位时间内CPU工作时间的统计。
三种案例:
- cpu密集型进程, 使用大量CPU会导致平均负载升高,此时两者一致
- I/O密集型进程,等待I/O导致平均负载升高,但是cpu使用率不一定升高
- 大量等待cpu调度的进程也会导致平均负载升高,,此时,CPU使用率也会升高
6、使用性能分析工具,进行分析
环境:centos7 2cpu 1g内存(free 查看内存 cat /proc/meminfo )
工具包: stress 、sysstat 、
stress 是linux1系统压力测试工具,我们用来模拟平均负载升高的场景
sysstat 用来监控和分析系统性能。
这个包有两个命令:mpstat 、pidstat
mpstat 常用的多核cpu性能分析工具,用来实时查看每个cpu的性能指标,以及所有cpu的平均指标
pidstat 是常用的进程性能分析工具,用来实时查看进程的CPU、内存、I/O以及上下文切换等的性能指标。
- 初始查看平均负载
[root@server2 ~]# uptime
11:28:25 up 1 day, 13:19, 5 users, load average: 0.00, 0.03, 0.05
- 场景一:模拟cpu密集型进程
- I/O密集型进程
- 大量进程的场景
总结:
首先,平均负载,提供了一个快速查看系统性能的手段,反映了整体的负载情况。
但是仅仅看平均负载,什么都得不到,无法发现系统的瓶颈
所以在理解平均负载的时候,要注意:
平均负载高可能是CPU密集型进程导致的
平均负载高不一定代表cpu使用高,还可能是I/O繁忙
平均负载高还可能是有大量进程在争抢cpu
当发现负载高的时候,可以使用,mpstat、pidstat等工具来分析系统瓶颈的来源。