发现系统变慢首先执行top和uptime命令
[root@localhost ~]# uptime
02:32:11 up 10 min, 2 users, load average: 0.00, 0.11, 0.15
当前时间-系统运行时间-系统正在登陆的用户数-过去一分钟、五分钟、十五分钟的平均负载
- 如果1分钟、5分钟、15分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
- 但如果1分钟的值远小于15 分钟的值,就说明系统最近1分钟的负载在减少,而过去15分钟内却有很大的负载。
- 反过来,如果1分钟的值远大于 15 分钟的值,就说明最近1分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦1分钟的平均负载接近或超过了CPU的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。
- 当平均负载高于CPU数量的70%的时候就要查找原因了,一旦平均负载过高就会导致系统进程响应变慢,进而影响服务的正常功能
CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;2I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;大量等待 CPU 的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。
使用工具iostat(stress)、mpstat、pidstat 等工具,找出平均负载升高的根源
yum install -y epel-release
yum install -y stress
yum install -y sysstat
- stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景
- 而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。
- mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有CPU的平均指标。
- pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标
模拟环境
[root@localhost ~]# stress --cpu 1 --timeout 600
stress: info: [7272] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
这是模拟CPU使用率超高环境,然后在第二个终端运行uptime查看平均负载
然后在第三个终端查看CPU使用率的变化情况
-
使用mpstat 命令
[root@localhost ~]# mpstat -P ALL 5 Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 04/23/2020 _x86_64_ (1 CPU) 03:00:11 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:00:16 AM all 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:16 AM 0 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:16 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:00:21 AM all 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:21 AM 0 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:21 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 03:00:26 AM all 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:00:26 AM 0 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00
这时候我们可以看到有一个CPU的使用率太高了,那么就用pidstat 找到这个进程
-
pidstat -u 5 2 间隔5秒后输出2组数据,-u表示CPU指标
[root@localhost ~]# pidstat -u 5 2
Linux 3.10.0-957.el7.x86_64 (localhost.localdomain) 04/23/2020 _x86_64_ (1 CPU)
03:06:39 AM UID PID %usr %system %guest %wait %CPU CPU Command
03:06:44 AM 0 7275 0.20 0.20 0.00 0.20 0.40 0 watch
03:06:44 AM 0 7861 98.80 0.00 0.00 0.80 98.80 0 stress
03:06:44 AM 0 7901 0.00 0.20 0.00 0.00 0.20 0 pidstat
这时可以看到是stress占用较高,可以用ps -ef|grep stress找出他的进程号用kill -9 杀掉
[root@localhost ~]# ps -ef |grep stress
root 7860 7201 0 03:06 pts/0 00:00:00 stress --cpu 1 --timeout 600
root 7861 7860 99 03:06 pts/0 00:06:25 stress --cpu 1 --timeout 600
root 8250 7233 0 03:12 pts/1 00:00:00 grep --color=auto stress
[root@localhost ~]# kill -9 7860
[root@localhost ~]#
开机自启动
7 个运行级别
-
init 0 关机
-
init 6 重启
-
init 5 图形化界面
-
init 3 完整的多用户模式(命令行)
-
init 2 多用户模式(没有文件系统和网络)
-
init 1 单用户模式