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

linux 优化(一)的更多相关文章

  1. Linux优化之IO子系统监控与调优

    Linux优化之IO子系统 作为服务器主机来讲,最大的两个IO类型 : 1.磁盘IO 2.网络IO 这是我们调整最多的两个部分所在 磁盘IO是如何实现的 在内存调优中,一直在讲到为了加速性能,linu ...

  2. linux优化项

    Linux优化: 1.建立普通账号,使用普通用户登陆. 2.处理SELINUX. 3.处理防火墙. 4.精简开机自启动服务.保留sshd,network,crond,rsyslog,sysstat. ...

  3. HBASE的优化、hadoop通用优化,Linux优化,zookeeper优化,基础优化

    HBase 的优化3.1.高可用在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果Hmaster 挂掉了,那么整个 HBa ...

  4. 针对跑MySQL的Linux优化【转】

    本文来自:http://www.mysqlsupport.cn/linux-performance-tuning-tips-mysql/ 因为很多MySQL的生产环境都在Linux下,我决定指出一些L ...

  5. linux 优化&安全运维&黑客攻防

    优化: 可删除用户:adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher.   :userdel games 可删除组:adm,lp,ne ...

  6. linux优化之全过程

    基于开放源代码的Linux给用户提供了这样一个平台:可以根据自己的软.硬件环境,定制自己的Linux应用环境.因此,根据每个用户不同的应用范围定制应用环境,可以将Linux系统的性能提升到新的高度. ...

  7. Linux优化远程SSH连接

    优化远程SSH连接 1.Linxu和Window的ssh连接区别 Windom默认3389端口,管理员administartor 普通是guest Linux 默认22端口 管理员root 普通一堆 ...

  8. Linux 优化详解

    一.引子 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不是说现在又花了.测试了,以后就可以一劳永逸,而不是说 ...

  9. 八、linux优化一

    1.关闭selinux sed –I ‘s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config grep SELINUX=disable ...

  10. Linux优化总结

    1)netstat (*****)查看网络状态lntup或an 1.[listening|-l] 2.[--numeric|-n] 3.[--tcp|-t] 4.[--udp|-u] 5[--prog ...

随机推荐

  1. codeforces605A

    Sorting Railway Cars CodeForces - 605A 一辆列车有N节车厢,编号为1...N(每节车厢编号都不同),并且他们的排列是混乱的.李老湿想要把这N节车厢重新排列为升序排 ...

  2. 轻量级浏览器Midori

    导读 这是一个对再次回归的轻量级.快速.开源的 Web 浏览器 Midori 的快速回顾. 如果你正在寻找一款轻量级网络浏览器替代品,请试试 Midori. Midori是一款开源的网络浏览器,它更注 ...

  3. Go For It ,一个灵活的待办事项列表程序

    导读 Go For It,是我们开源工具系列中的第十个工具,它将使你在 2019 年更高效,它在 Todo.txt 系统的基础上构建,以帮助你完成更多工作. 每年年初似乎都有疯狂的冲动想提高工作效率. ...

  4. html input 禁止输入中文

    <input type="text" class="tel" onkeyup="value=value.replace(/[\u4e00-\u9 ...

  5. SpringMVC 复杂对象数据绑定

    表单在 web 页面上无处不在,有些表单可能很复杂,大部分表单里的输入项都会对应后端对象属性.SpringMVC 可以自动将表单值绑定到对象上!而且能绑定很复杂的对象!!这里就不写那些基本的表单绑定了 ...

  6. [NOIp2016] 蚯蚓

    类型:单调队列 传送门:>Here< 题意:有$N$只蚯蚓,每秒都会伸长$q$.每一次都会有人选出最长的一条切成两半,长度分别是$\left \lfloor px \right \rflo ...

  7. 【UOJ349】【WC2018】即时战略 LCT 动态点分治

    这是一道交互题 题目大意 有一棵\(n\)个点的树.最开始\(1\)号点是白的,其他点是黑的. 每次你可以执行一个操作:\(explore(x,y)\).要求\(x\)是一个白点.该函数会返回从\(x ...

  8. git回滚部分文件到某个版本

    reset 命令只能将整个版本的代码一起回滚,需要使用checkout 命令,可以还原部分文件到某一版本 格式为:git checkout [<branch>] [file] 1.首先使用 ...

  9. Tomcat和Weblogic部署纯html文件

    1.首先纯html文件,得有一个入口 index.html 2.Tomcat是不需要指定web.xml的,因为即使你的文件里没有web.xml,也会读取conf 目录下的web.xml,在这个文件里边 ...

  10. day5 range 用法示例

    函数语法 range(start, stop[, step]) 参数说明: start: 计数从 start 开始.默认是从 0 开始.例如range(5)等价于range(0, 5); stop: ...