linux 优化(一)

uptime

  • up 表示系统正在运行
  • 10:54:19 表示当前时间
  • 8 min 表示系统启动的总时间
  • 1 user 表示正在登陆用户数
  • load average 表示系统平均负载,最后三个数字呢,依次则是过去 1 分钟、5 分钟、15 分钟

平均负载

简单来说,平均负载是指单位时间内,系统处于可运行状态(runnable or Running)不可中断状态(uninterruptible)的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

对负载的简单理解(以单核为例):

  • 如果路面上的车不多,没有占满车道,那么load < 1;
  • 如果占满了车道,load = 1;
  • 如果车道外面还有车在等待,load > 1;

需要注意的是,load = 1 不代表CPU无法工作了,这只是表示满负荷运行,例如实际生活中的例子,车道占满了,但是车流还能有序前进。

 

进程的主要状态

  • R(running) 可执行状态, 进程处于运行或就绪状态。 Running or runnable (on run queue). 就绪状态表示线程已经分配到除CPU以外的资源,等CPU调度它时就可以马上执行了。同一时刻可能会有多个处于可执行状态的进程被放到CPU的可执行队列中,一个进程只会出现在一个CPU的可执行队列中。进程调度器从各个CPU的可执行队列中选择一个进程在该CPU上运行。
  • S(sleeping) 可中断的睡眠状态
  • D(uninterruptible sleep) 不可中断的深度睡眠状态。一般由IO引起,同步的IO在做读写时,CPU不能做其他事情,只能等待,如果程序采用异步IO,这种状态应该就很少见了。比如最常见的是等待硬件设备的 I/O 响应。所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。如果处于D状态的时间较长,意味着可能是IO设备本身出了故障,需要排查设备是否正常。
  • T(task_stopped or task traced)暂停状态或跟踪状态,停止(进程收到SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU信号后停止运行运行)
  • X(dead)
  • Z(zombie) 僵尸状态

源码定义 https://github.com/torvalds/linux/blob/master/fs/proc/array.c

提示:Linux命令ps可以查看每个进程的状态。

ps -aux 

 

总结:

  • 简单理解为,平均负载其实就是平均活跃进程数。
  • 平均负载最理想的情况是等于 CPU 个数。系统的CPU可以从/proc/cpuinfo统计出。
  • 包含正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O的进程。

 

分析系统负载趋势

1、如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。

2、如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1分钟的负载在减少,而过去 15 分钟内却有很大的负载。

3、如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分分钟的负载在增加。平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题。

初步阈值:当平均负载高于 CPU 数量 70% 的时候,需要进行排查负载过高的原因。

观点一:CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。

 

  • CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的。
  • 大量等待CPU的进程调度会导致平均负载升高,此时的CPU使用率也会比较高。
  • CPU 使用率高,无等待CPU,IO无作业,这种场景,通常是计算密集型任务,即大量生成耗时短的计算任务。这种任务会占满CPU资源,造成系统响应速度颠簸,但由于每个任务能快速计算完成,不会在运行队列堆积,所以在Load Average里不会体现出来。

观点二:IO繁忙,跟平均负载并不一定完全对应。

  • I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高。
  • CPU使用率低,IO繁忙,但是Load Average低。这种场景,通常是低频大文件读写,由于请求数量不大,所以任务都处于R状态,Load Average数值反映了当前运行的任务数,不会飙升,IO设备处于满负荷工作状态,导致系统响应能力降低。

观点三:CPU使用率高,IO繁忙/等待,Load Average高,系统卡。

这种场景,通常是服务混部,即IO、计算密集型任务混部在一起,相当于CPU、IO都处于高负荷状态,那么Load Average 自然很高。

 

sysstat

性能查看工具sysstat,用来监控和分析Linux的性能。

centos 7安装命令 sudo yum install sysstat -y

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

源码安装,下载地址:http://sebastien.godard.pagesperso-orange.fr/download.html

wget http://pagesperso-orange.fr/sebastien.godard/sysstat-12.1.3.tar.gz
tar -xvf sysstat-12.1.3.tar.gz
cd sysstat-12.1.3
./configure
make
make install

 

stress

stress 是一个 Linux 系统压力测试工具,可以模拟测试系统高负荷。

centos 7安装命令 sudo yum install -y stress

 

stress-ng

stress与stress-ng大同小异,stress-ng是stress的加强版

centos 7安装命令 sudo yum install -y stress-ng

 

场景模拟

1、CPU 密集型进程,测试机器为单核虚拟机

模拟一个 CPU 使用率 100% 的场景,通过命令stress

  • --timeout secs 指定运行多少秒
  • --cpu forks 产生几个处理sqrt()函数的CPU进程
stress --cpu 1 --timeout 600

mpstat查看,ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据

mpstat -P ALL 5

上图CPU 的使用率为 100%,但它的 iowait 只有 0。这说明,平均负载的升高正是由于 CPU 使用率为 100%。

从top命令可以明显看到,stress 进程的 CPU 使用率最高。

 

2、I/O 密集型进程,测试机器为单核虚拟机

  • --io forks:产生多个处理sync()函数的磁盘I/O进程。
  • --timeout secs 指定运行多少秒。
  • --hdd:写进程,写入固定大小,通过mkstemp()函数写入当前目录。
stress-ng --io 1 --hdd 1 --timeout 600

mpstat -P ALL 5

pidstat -u 5 100

 

posted @ 2019-02-15 11:15  shhnwangjian  阅读(249)  评论(0编辑  收藏  举报