热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从平均负载角度谈Linux性能优化

1.平均负载这里的平均负载,讲的是Linux的系统负载,可以通过命令top或者uptime查看到。Loadaverage:指的是过去的1分钟、5分钟、

1. 平均负载

这里的平均负载,讲的是Linux的系统负载,可以通过命令 top 或者 uptime查看到。

                                      

                                   

Load average: 指的是过去的1分钟、5分钟、20分钟系统中,单位时间内,处于可运行状态或者不可中断状态的平均活跃进程数。并不是人们常常理解的,单位时间内的CPU使用率。

然后,top命令的其他内容先不说,上面第二个图中,uptime命令执行结果中,前面一些代表什么意思?

18:14:31 //当前时间
up 41 days, 8:24 //系统运行时间
2 users //正在登陆的用户数

再看看man手册中uptime命令的详细说明:

DESCRIPTIONuptime gives a one line display of the following information. The current time, how longthe system has been running, how many users are currently logged on, and the system loadaverages for the past 1, 5, and 15 minutes.This is the same information contained in the header line displayed by w(1).System load averages is the average number of processes that are either in a runnable oruninterruptable state. A process in a runnable state is either using the CPU or waiting touse the CPU. A process in uninterruptable state is waiting for some I/O access, eg waitingfor disk. The averages are taken over the three time intervals. Load averages are not nor‐malized for the number of CPUs in a system, so a load average of 1 means a single CPU systemis loaded all the time while on a 4 CPU system it means it was idle 75% of the time.

从文档中可以看到,可运行状态的进程,指的是正在使用或者等待CPU的进程,也就是我们使用ps命令看到的处于 R 状态(Running 或 Runnable)的进程。

不可中断状态的进程,是正处于内核态关键流程中的进程,这些个关键流程是不可被打断的,比如最常见的是等待硬件设备的IO响应,即ps命令看到的处于 D(Uninterruptable  Sleep 或 Disk Sleep)状态的进程。不可中断状态是对进程和硬件设备的一种保护机制。

既然是平均的活跃进程数,那么最理想的状态每个CPU都刚好运行一个进程,这样每个CPU到得到充分利用。比如当平均负载为2时,意味着什么呢?


  • 在只有两个CPU的系统上,意味着CPU都刚好被完全占用。
  • 在4个CPU的系统上,意味着CPU有50%是空闲的。
  • 在1个CPU的系统上,意味着一半的进程竞争不到CPU。

在判断平均负载合理不合理的时候,当然首先要知道系统CPU个数,可以用命令 grep 'model name'  /proc/cpuinfo  |  wc -l。当平均负载大于系统CPU个数时,表明系统已经过载。这里说的平均负载有三个值,应该去看那个值?这三个值表示的三个时间段的平均值,是用来分析系统负载趋势的数据来源。在实际生产环境中,平均负载多高时需要我们重点关注呢?在我看来,当平均负载高于系统CPU数量的70%是,就需要排查负载高的问题的了。但这也不是绝对的,更可靠的是,我们应该把负载监控起来,根据历史数据,发现负载明显升高,比如翻倍,那么就要去分析问题了。

2. 平均负载 != CPU使用率

上面说过,平均负载,表示的是单位时间内,处于可运行状态或者不可中断状态的平均活跃进程数,包括正在使用CPU的进程,等待CPU或者等待I/O 的进程。而CPU使用率,表示的是单位时间内,CPU的繁忙情况的统计,跟平均负载不能完全画等号。因为有以下三种可能:

场景一,CPU密集型进程,大量使用CPU就会导致平均负载升高,这个时候两者一致;

场景二,I/O密集型进程,等待I/O,也会导致平均负载升高,但CPU使用率不一定高;

场景三,大量等待CPU的进程调度,也会导致平均负载很高,此时的CPU使用率也会很高。

3. 模拟案例

先来介绍两个工具:stress 和 sysstat.

stress: Linux系统的压力测试工具,用作异常进程模拟平均负载升高的场景。

sysstat: 包含常用的Linux性能工具,用来监控和分析linux系统性能。这里先介绍两个:mpstat 和 pidstat。


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

下面来模拟一下上面的三种场景:假设系统是2个CPU  8GB内存

场景一,CPU密集型:执行命令 stress --cpu 1 --timeout 600

              在第二个终端执行命令  watch -d uptime,实时查看平均负载的变化情况

              在第三个终端实行命令  mpstat -P ALL 5,查看CPU使用率额变化情况

              你会发现平均负载升高,而且是由于某个CPU使用达到100%,最后可以使用命令 pidstat -u 5 1,很明显就能发现stress进程的CPU使用率达到100%。

场景二,IO密集型:执行命令 stress -i  1  --timeout  600  或者 stress-ng -i 1 --hdd 1 --timeout 600

              紧接着执行好看watch -d uptime 、mpstat -P ALL 5 

              你会发现平均负载升高,是由于某个CPU 的iowait 的升高。最后可以使用命令 pidstat -d  5 1,很明显就能发现stress进程导致的。

场景三,进程切换:stress -c 8 --timeout 600

                               watch  -d uptime、 pidstat -u 5 1

               可以看到8个进程在争抢2个CPU,每个进程在等待CPU时间很高。

综合上述三个场景,平均负载升高有可能是CPU密集型,还有可能是IO更繁忙。

 

以上是学习极客时间专栏(倪朋飞:Linux性能优化实战)的个人总结

https://time.geekbang.org/column/intro/140


推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 近期,某用户在重启RAC一个节点的数据库实例时,发现启动速度非常慢。同时业务部门反馈连接RAC存活节点的业务也受影响。通过对日志的分析, ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • Ansibleplaybook roles安装redis实例(学习笔记二十九)
    1、相关redis参数:2、templatesredis.conf配置相关参数:daemonizeyespidfilevarrunredis_{{red ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
author-avatar
乌鸦_Hrt
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有