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. 第三十四天 UDP协议 并发编程

    一.今日内容 1.UDP协议 2.并发编程 操作系统的发展史 多道技术 进程 线程 IO模型 socketserver 案例:文件上传下载 元类 单例 logging filter 二.TCP半连接池 ...

  2. HDU 1021 斐波那契

    参考自:https://www.cnblogs.com/ECJTUACM-873284962/p/6404504.html Fibonacci Again Time Limit: 2000/1000 ...

  3. [ZJOI2009]函数 题解

    题目链接:[ZJOI2009]函数 对于$n=1$的情况,直接输出$1$ 对于$n>1$的情况,由于我们可以将图上下反转,所以第$k$层的情况可以被转成第$n-k+1$层 规律自己打个表可以推出 ...

  4. 【XSY2750】Mythological V 2-sat

    题目描述 有一棵\(n\)个点的树,还有\(m\)个物品. 你要把每个物品放在树上的一个点上(两个物品可以放在同一个点). 有\(q\)个限制:\(a,b\)两个物品在路上的最短路经过\(c\). 要 ...

  5. QML 用QSortFilterProxyModel实现搜索功能

    搞了一晚上终于实现了,写个博客纪念一下吧. c++部分的代码: #include <QQmlApplicationEngine> #include <QQmlContext> ...

  6. python学习日记(编码再回顾)

    当想从一种编码方式转换为另一种编码方式时,执行的就是以上步骤. 在python3里面,默认编码方式是unicode,所以无需解码(decode),直接编码(encode)成你想要的编码方式就可以了. ...

  7. k短路模板(洛谷P2483 [SDOI2010]魔法猪学院)(k短路,最短路,左偏树,priority_queue)

    你谷数据够强了,以前的A*应该差不多死掉了. 所以,小伙伴们快来一起把YL顶上去把!戳这里! 俞鼎力的课件 需要掌握的内容: Dijkstra构建最短路径树. 可持久化堆(使用左偏树,因其有二叉树结构 ...

  8. Redhat 用代理连外网

    设置 /etc/yum.conf 添加proxy=http://web-proxy.corp.xx.com:8080 /etc/yum.repos.d/rhel-source.repo 里面改成ena ...

  9. docker_macvlan

    目录 macvlan macvlan macvlan的原理是在宿主机物理网卡上虚拟出多个子网卡,通过不同的MAC地址在数据链路层(Data Link Layer)进行网络数据转发的,它是比较新的网络虚 ...

  10. 「SCOI2016」萌萌哒 解题报告

    「SCOI2016」萌萌哒 这思路厉害啊.. 容易发现有个暴力是并查集 然后我想了半天线段树优化无果 然后正解是倍增优化并查集 有这个思路就简单了,就是开一个并查集代表每个开头\(i\)每个长\(2^ ...