理解 Linux 的平均负载和性能监控

《理解 Linux 的平均负载和性能监控》要点:
本文介绍了理解 Linux 的平均负载和性能监控,希望对您有用。如果有疑问,可以联系我们。

在本文中,我们将解释 Linux 系统中最症结的管理任务之一——关于系统 / CPU 的负载(load)和平均负载(Load average)的性能监控.

首先来看所有的类 UNIX 系统中两个紧张的表述:

  • 系统负载 / CPU 负载 – 衡量 Linux 系统的 CPU 过载或利用率低的指标,即处于运算状态或等待状态的 CPU 核心数.
  • 平均负载 – 通过固定的时间周期如 1、5、15 分钟计算出的平均的系统负载.

Linux 中,平均负载一般指在内核运行队列中被标志为运行或不可打断状态的进程的平均数.

注意:

  • 几乎没有 Linux 或类 Unix 系统不为用户展示平均负载的值.
  • 完全空闲的 Linux 系统平均负载为 0,不包含空闲进程.
  • 绝大多数类 Unix 系统只统计运行和等待状态的进程.但是在 Linux 中,平均负载也包含处于不可打断的睡眠状态的进程——它们是在等待其它系统资源如磁盘 I/O 等的进程.

 

如何监测 Linux 系统平均负载

有诸多方式监测系统平均负载,如 uptime,它会展示系统运行光阴、用户数量及平均负载:

平均负载的数字从左到右的寄义依次为:

  • 最近 1 分钟的平均负载为 1.98
  • 最近 5 分钟的平均负载为 2.15
  • 最近 15 分钟的平均负载为 2.21

高平均负载意味着系统是过载的:许多进程在期待 CPU 时间.

下一节将介绍平均负载和 CPU 核数的关系.此外,常用的对象 top 和 glances 可以实时显示 Linux 系统的运行状态:

 

Top命令

  1. $ top

显示运行中的Linux过程:

  1. top-12:51:42 up 2:11,1 user, load average:1.22,1.12,1.26
  2. Tasks:243 total,1 running,242 sleeping,0 stopped,0 zombie
  3. %Cpu(s):17.4 us,2.9 sy,0.3 ni,74.8id,4.6 wa,0.0 hi,0.0 si,0.0 st
  4. KiBMem:8069036 total,388060 free,4381184 used,3299792 buff/cache
  5. KiBSwap:3906556 total,3901876 free,4680 used.2807464 avail Mem
  6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  7. 6265 tecmint 200124434817068083616 S 13.32.16:47.72Headset
  8. 2301 tecmint 9-11640332133449932 S 6.70.22:18.96 pulseaudio
  9. 2459 tecmint 200170769231562862992 S 6.73.96:55.45 cinnamon
  10. 2957 tecmint 20026446441.035g137968 S 6.713.550:11.13 firefox
  11. 3208 tecmint 2005070605213633152 S 6.70.60:04.34 gnome-terminal-
  12. 3272 tecmint 2001521380391324178348 S 6.74.86:21.01 chrome
  13. 6220 tecmint 200159539210696476836 S 6.71.33:31.94Headset
  14. 1 root 20012005662043964 S 0.00.10:01.83systemd
  15. 2 root 200000 S 0.00.00:00.00 kthreadd
  16. 3 root 200000 S 0.00.00:00.10 ksoftirqd/0
  17. 5 root 0-20000 S 0.00.00:00.00 kworker/0:0H
  18. ....

 

Glances 对象

  1. $ glances

Glances – Linux系统监测对象:

  1. TecMint(LinuxMint1864bit/Linux4.4.0-21-generic)Uptime:2:16:06
  2. CPU 16.4%nice:0.1% LOAD 4-core MEM 60.5% active:4.90G SWAP 0.1%
  3. user:10.2% irq:0.0%1 min:1.20 total:7.70G inactive:2.07G total:3.73G
  4. system:3.4% iowait:2.7%5 min:1.16 used:4.66G buffers:242M used:4.57M
  5. idle:83.6% steal:0.0%15 min:1.24 free:3.04G cached:2.58G free:3.72G
  6. NETWORK Rx/s Tx/s TASKS 253(883 thr),1 run,252 slp,0 oth sorted automatically by cpu_percent, flat view
  7. enp1s0 525Kb31Kb
  8. lo 2Kb2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command
  9. wlp2s0 0b0b14.613.32.53G1.03G2957 tecmint 0 S 51:49.10040K/usr/lib/firefox/firefox
  10. 7.42.21.16G176M6265 tecmint 0 S 7:08.1800/usr/lib/Headset/Headset--type=renderer --no-sandbox --primordial-pipe-token=879B36514C6BEDB183D3E4142774D1DF--lan
  11. DISK I/O R/s W/s 4.93.91.63G310M2459 tecmint 0 R 7:12.1800 cinnamon --replace
  12. ram0 004.20.2625M13.0M2301 tecmint -11 S 2:29.7200/usr/bin/pulseaudio --start --log-target=syslog
  13. ram1 004.21.31.52G105M6220 tecmint 0 S 3:42.6400/usr/lib/Headset/Headset
  14. ram10 002.90.8409M66.7M6240 tecmint 0 S 2:40.4400/usr/lib/Headset/Headset--type=gpu-process --no-sandbox --supports-dual-gpus=false--gpu-driver-bug-workarounds=7,2
  15. ram11 002.91.8531M142M1690 root 0 S 6:03.7900/usr/lib/xorg/Xorg:0-audit 0-auth /var/lib/mdm/:0.Xauth-nolisten tcp vt8
  16. ram12 002.60.379.3M23.8M9651 tecmint 0 R 0:00.7100/usr/bin/python3 /usr/bin/glances
  17. ram13 001.64.81.45G382M3272 tecmint 0 S 6:25.3004K/opt/google/chrome/chrome
  18. ...

这些对象中的平均负载是从 /proc/loadavg 文件中读取的,也可以直接使用 cat 命令查看:

  1. $ cat/proc/loadavg
  2. 2.481.691.425/88910570

想要图形样式监测均匀负载,请戳:ttyload – 终端中颜色编码图形显示 Linux 均匀负载.

在桌面计算机中,可以使用图形用户接口对象查看系统平均负载.

 

理解系统平均负载和 CPU 核心数的关系

考虑了 CPU 核心数的影响,能力解释系统负载.

 

多处理器 Vs 多核处理器

  • 多处理器 – 一个计算机系统中集成两个或多个物理 CPU
  • 多核处理器 – 单个物理 CPU 有两个或多个单独的核并行工作(也叫处理单元).双核意味着有两个处理单元,4 核有 4 个处理单元,以此类推.

此外,Intel 引入了超线程技术用来提高并行计算才能.

通过超线程技术,在操作系统中,单个物理 CPU 表示的和两个逻辑 CPU 一样.(实际在硬件上只有一个 CPU).

注意,单个 CPU 核同一时间只能执行一个任务,于是发生了多 CPU/处理器、多核 CPU,以及多线程技术.

多 CPU 时,多个法式可以同时执行.如今的 Intel CPU 使用了多核心和超线程技术.

可以使用 nproc 或 lscpu 命令查看系统中的处置器单元数量.

  1. $ nproc
  2. 4
  3. #或者
  4. lscpu

也可以使用 grep 敕令:

  1. $ grep'model name'/proc/cpuinfo |wc-l
  2. 4

为了进一步理解系统负载,必要做一些假设.假设系统负载如下:

  1. 23:16:49 up 10:49,5 user, load average:1.00,0.40,3.35

在单核体系中意味着:

  • CPU 被充足利用(100%);最近的 1 分钟有 1 个进程在运行.
  • CPU 有 60% 处于空闲状态;在最近的 5 分钟没有进程等待 CPU 时间.
  • CPU 平均过载了 235%;最近的 15 分钟平均有 2.35 个进程在等待 CPU 时间.

在双核系统中意味着:

  • 有一个 CPU 处于完全空闲状态,另一个 CPU 被使用;最近的 1 分钟没有进程等待 CPU 时间.
  • CPU 平均 160% 处于空闲状态;最近的 5 分钟没有进程等待 CPU 时间.
  • CPU 平均过载了 135%;最近的 15 分钟有 1.35 个进程等待 CPU 时间.

总而言之,如果你是系统管理员,你应该关注高的平均负载.平均负载高于 CPU 核心数意味着必要增加 CPU,反之则意味着 CPU 未被充分利用.

作者简介:

Aaron Kili 是 Linux 和自由软件的热心者,热衷于分享知识,现在是 TecMint 网站的内容创作者,不久之后将成为 Linux 系统治理员,web 开发者.

via: https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/

作者:Aaron Kili 译者:kylecao 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本文永远更新链接地址:http://www.linuxidc.com/Linux/2017-06/145123.htm

linux

编程之家PHP培训学院每天发布《理解 Linux 的平均负载和性能监控》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读1.3k次。在 Redis 中,键(Keys)是非常重要的概念,它们代表了存储在数据库中的数据的标识符。对键的有效管理和操作是使用 Redis 数据库的关键一环,它直接影响到数据的存取效率、系统的稳定性和开发的便利性。本文将深入探讨 Redis 中键的管理和操作,包括键的命名规范、常用的键操作命令以及一些最佳实践。我们将详细介绍如何合理命名键、如何使用键的过期和持久化特性、如何批量删除键等技巧,旨在帮助读者更好地理解并灵活运用 Redis 中的键,从而提高数据管理和操作的效率和可靠性。
文章浏览阅读3.3k次,点赞44次,收藏88次。本篇是对单节点的应用,但从中我们也能推断出一些关于集群的应用,不过大多数公司能搞个主从就已经是不错了,所以你能学会这个已经算是很有用了,关于ES,博主前面也讲过一些基础应用,创建一个工具类利用ES的数据模型进行存储就可以达到一个canal同时对Redis和ES的同步,如果担心出问题,可以把Canal搞成集群的形式,这个后续有时间博主再给大家做讲解。今天就到这里了,觉得不错就支持一下吧。_canal redis
文章浏览阅读8.4k次,点赞8次,收藏18次。Spring Boot 整合Redis实现消息队列,RedisMessageListenerContainer的使用,Pub/Sub模式的优缺点_springboot redis 消息队列
文章浏览阅读978次,点赞25次,收藏21次。在Centos上安装Redis5.0保姆级教程!_centos7 安装redis5.0服务器
文章浏览阅读1.2k次,点赞21次,收藏22次。Docker-Compose部署Redis(v7.2)主从模式首先需要有一个redis主从集群,才能接着做redis哨兵模式。_warning: sentinel was not able to save the new configuration on disk!!!: dev
文章浏览阅读2.2k次,点赞59次,收藏38次。合理的JedisPool资源池参数设置能为业务使用Redis保驾护航,本文将对JedisPool的使用、资源池的参数进行详细说明,最后给出“最合理”配置。_jedispool资源池优化
文章浏览阅读1.9k次。批量删除指定前缀的Key有两中方法,一种是借助 redis-cli,另一种是通过 SCAN命令来遍历所有匹配前缀的 key,并使用 DEL命令逐个删除它们。_redis删除前缀的key
文章浏览阅读890次,点赞18次,收藏20次。1. Redis时一个key-cakye的数据库,key一般是String类型,不过value类型有很多。eg.String Hash List Set SortedSet (基本) | GEO BitMap HyperLog (特殊)2.Redis为了方便学习,将操作不同类型的命令做了分组,在官网可以进行查询。
文章浏览阅读1.1k次,点赞19次,收藏26次。若不使用Redisson,而是用synchronized(this),此时会造成对服务器的加锁,若开始大量查询ID为1的商品,每台机器都会先跑一遍加个锁,然后在查询ID为2的数据,此时需要等待ID为1的锁释放,所以需要将this对象调整为全局商品ID。若在执行bgsave命令时,还有其他redis命令被执行(主线程数据修改),此时会对数据做个副本,然后bgsave命令执行这个副本数据写入rdb文件,此时主线程还可以继续修改数据。在当前redis目录下会生成aof文件,对redis修改数据的命令进行备份。
文章浏览阅读1.5k次,点赞39次,收藏24次。本文全面剖析Redis集群在分布式环境下的数据一致性问题,从基础原理到高级特性,涵盖主从复制、哨兵模式、持久化策略等关键点,同时也分享了关于监控、故障模拟与自适应写一致性策略的实践经验。_redis集群一致性
文章浏览阅读1k次。RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据,我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF文件中可以设置刷盘策略,我们当时设置的就是每秒批量写入一次命令。AOF的含义是追加文件,当redis操作写命令的时候,都会存储这个文件中,当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。:在Redis中提供了两种数据持久化的方式:1、RDB 2、AOF。
文章浏览阅读1k次,点赞24次,收藏21次。NoSQL(No only SQL)数据库,泛指非关系型数据库,实现对于传统数据库而言的。NoSQL 不依赖业务逻辑方式进行存储,而以简单的 key-value 模式存储。因此大大增加了数据库的扩展能力。不遵循SQL标准不支持ACID远超于SQL的性能Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。
文章浏览阅读988次,点赞17次,收藏19次。在上面的步骤中,我们已经开启了 MySQL 的远程访问功能,但是,如果使用 MySQL 管理工具 navicat 连接 MySQL 服务端时,还是可能会出现连接失败的情况。在实际工作中,如果我们需要从其他地方访问和管理 MySQL 数据库,就需要开启 MySQL 的远程访问功能并设置相应的权限。这对于我们的工作效率和数据安全都有很大的帮助。通过查看 MySQL 用户表,我们可以看到’host’为’%’,说明 root 用户登录 MySQL 的时候,可以允许任意的 IP 地址访问 MySQL 服务端。
文章浏览阅读956次。Redis Desktop Manager(RDM)是一款用于管理和操作Redis数据库的图形化界面工具。提供了简单易用的界面,使用户能够方便地执行各种Redis数据库操作,并且支持多个Redis服务器的连接_redisdesktopmanager安装包
文章浏览阅读1.9k次,点赞52次,收藏27次。缓存击穿指的是数据库有数据,缓存本应该也有数据,但是缓存过期了,Redis 这层流量防护屏障被击穿了,请求直奔数据库。缓存穿透指的是数据库本就没有这个数据,请求直奔数据库,缓存系统形同虚设。缓存雪崩指的是大量的热点数据无法在 Redis 缓存中处理(大面积热点数据缓存失效、Redis 宕机),流量全部打到数据库,导致数据库极大压力。
文章浏览阅读1.2k次。一次命令时间(borrow|return resource + Jedis执行命令(含网络) )的平均耗时约为1ms,一个连接的QPS大约是1000,业务期望的QPS是50000,那么理论上需要的资源池大小是50000 / 1000 = 50个,实际maxTotal可以根据理论值合理进行微调。JedisPool默认的maxTotal=8,下面的代码从JedisPool中借了8次Jedis,但是没有归还,当第9次(jedisPool.getResource().ping())3、发生异常可能的情况。_redis.clients.jedis.exceptions.jedisconnectionexception: could not get a res
文章浏览阅读1k次,点赞27次,收藏18次。在这篇文章中,你将了解到如何在 CentOS 系统上安装 Redis 服务,并且掌握通过自定义域名来访问 Redis 服务的技巧。通过使用自定义域名,你可以方便地管理和访问你的 Redis 数据库,提高工作效率。无论你是开发者、系统管理员还是对 Redis 感兴趣的读者,这篇文章都会为你提供清晰的指导和实用的技巧。阅读本文,轻松搭建自己的 Redis 服务,并体验自定义域名带来的便捷!_redis怎么自定义域名
文章浏览阅读1.1k次,点赞15次,收藏18次。我们post请求,拦截器要预先读取HtppServletRequest里面的body的数据,是通过io的方式,都知道io读取完毕之后,之前的数据是变为null的,但是,当我么后面的接口来委派的时候,也是通过io读取body。我们要考虑一个事情,就是我们要验证数据的重复提交: 首先第一次提交的数据肯定是要被存储的,当而第二次往后,每次提交数据都会与之前的数据产生比对从而验证数据重复提交,我们要具体判断数据是否重复提交的子类。发现数据是成功存入的,剩余7s过期,在10s之内,也就是数据没过期之前,在发送一次。_json.parseobject(str, clazz, auto_type_filter);
文章浏览阅读3.9k次,点赞3次,收藏7次。PHP使用Redis实战实录系列:我们首先检查$redis->connect()方法的返回值来确定是否成功连接到Redis服务器。如果连接失败,我们可以输出相应的错误信息。如果连接成功,我们再执行一些操作,如$redis->set()、$redis->get()等,并检查每个操作的返回结果来判断是否发生了异常。_php redis
文章浏览阅读1.5w次,点赞23次,收藏51次。Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。_redisdesktopmanager下载