linux系统发现系统变慢 开机自启动

发现系统变慢首先执行top和uptime命令


[root@localhost ~]# uptime
 02:32:11 up 10 min,  2 users,  load average: 0.00, 0.11, 0.15

当前时间-系统运行时间-系统正在登陆的用户数-过去一分钟、五分钟、十五分钟的平均负载
  1. 如果1分钟、5分钟、15分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
  2. 但如果1分钟的值远小于15 分钟的值,就说明系统最近1分钟的负载在减少,而过去15分钟内却有很大的负载。
  3. 反过来,如果1分钟的值远大于 15 分钟的值,就说明最近1分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦1分钟的平均负载接近或超过了CPU的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。
  4. 当平均负载高于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

  1. stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景
  2. 而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。
  3. mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有CPU的平均指标。
  4. 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查看平均负载

linux系统发现系统变慢
开机自启动

然后在第三个终端查看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 个运行级别

  1. init 0 关机

  2. init 6 重启

  3. init 5 图形化界面

  4. init 3 完整的多用户模式(命令行)

  5. init 2 多用户模式(没有文件系统和网络)

  6. init 1 单用户模式