tnblog
首页
视频
资源
登录

Linux 性能调优(平衡负载整合)

4452人阅读 2020/7/19 0:46 总访问:3464697 评论:0 收藏:0 手机
分类: linux

ubuntu

Linux 性能调优(平衡负载整合)

uptime命令的意义

通常我们通过 uptime 来了解系统负载。

名称 含义
00:09:46 当前时间
up 12 days, 12:47 系统运行时间
3 users 用户数量
load average: 0.00, 0.02, 0.00 过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)。

你知道什么是“平均负载”?


平均负载

单位时间内,系统中处于 可运行状态不可中断状态 的平均进程数。而不是单位时间内的cpu使用率。


可运行状态的进程

正在使用cpu或者正在等待cpu的进程,即ps aux命令下STAT处于R状态的进程


不可中断状态的进程

处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,ps命令D状态的进程


理想状态

每个cpu上都有一个活跃进程,即平均负载数等于cpu数

平衡负载与CPU区别

CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。例如常见的以下三点:
CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。


有网友解释:CPU比喻成一辆地铁,正在使用CPU的进程就是在地铁上的人;等待CPU的进程就是在下一站等地铁来的人;等待I/O的进程就是在下一站要上车和下车的人,虽然现在对CPU没影响,可未来会影响,所以也要考虑到平均负载上。(地铁的乘客容量就是CPU个数)


平均负载的案例分析

运用 iostat、mpstat、pidstat 等工具,找出平均负载升高的根源。

实验准备

  • 准备一台Ubuntu 最好的配置2 CPU,8GB 内存。我的配置(cpu:1)

  • 预先安装 stress 和 sysstat 包,如 apt install stress sysstat
  • 准备三个终端


实验工具介绍
stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。


额外工具介绍
网友推荐:htop看负载,因为它更直接(在F2配置中勾选所有开关项,打开颜色区分功能),不同的负载会用不同的颜色标识。比如cpu密集型的应用,它的负载颜色是绿色偏高,iowait的操作,它的负载颜色是红色偏高等等,根据这些指标再用htop的sort就很容易定位到有问题的进程。还有个更好用的atop命令,好像是基于sar的统计生成的报告,直接就把有问题的进程标红了,更直观。
我使用了一下,并截了一些图。分别是htopatop





相关命令

  1. grep 'model name' /proc/cpuinfo | wc -l查看CPU核数
  2. watch -d uptime: -d会高亮显示变化的区域
  3. strees: 压测命令,--cpu cpu压测选项,-i io压测选项,-c 进程数压测选项,--timeout 执行时间
  4. mpstat: 多核cpu性能分析工具,-P ALL监视所有cpu
  5. pidstat: 进程性能分析工具,-u 显示cpu利用率

实践显示出平均负载与cpu使用率的区别

情况1:CPU 密集型进程


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

  1. stress --cpu 1 --timeout 600

然后,在第二个终端运行 uptime 查看平均负载的变化情况:

  1. uptime

最后,在第三个终端运行 mpstat 查看 CPU 使用率的变化情况:

  1. mpstat -P ALL 5

这里我们看到平均负载慢慢升高到1.00,而从终端三中还可以看到,正好有一个 CPU 的使用率接近为 100%(99.40%),但它的 iowait 只有 0。这说明,平均负载的升高正是由于 CPU 使用率为 100%所造成的 。


最后通过 pidstat 工具定位是哪个进程使用CPU这么高

  1. # 间隔5秒后输出一组数据
  2. pidstat -u 5 1

我们发现 stress 进程的 CPU 使用率为 98.8%

场景二:I/O 密集型进程

这次模拟 I/O 压力

  1. stress -i 1 --timeout 600

在第二个终端运行 uptime 查看平均负载的变化情况:

  1. watch -d uptime

第三个终端运行 mpstat 查看 CPU 使用率的变化情况:

  1. # 显示所有CPU的指标,并在间隔5秒输出一组数据
  2. mpstat -P ALL 5 1

从这里可以看到,1 分钟的平均负载会慢慢增加到 1.05,但 iowait 并没有升高是因为案例中stress使用的是 sync() 系统调用,它的作用是刷新缓冲区内存到磁盘中。对于新安装的虚拟机,缓冲区可能比较小,无法产生大的IO压力,这样大部分就都是系统调用的消耗了。所以,你会看到只有系统CPU使用率升高。解决方法是使用stress的下一代stress-ng,它支持更丰富的选项,比如 stress-ng -i 1 —hdd 1 —timeout 600(—hdd表示读写临时文件)。


在实际中 iowait 会逐渐到达 100%

最后通过 pidstat 工具定位是哪个进程使用IO率这么高

  1. # 间隔5秒后输出一组数据
  2. pidstat -u 5 1

可以发现,还是 stress 进程导致的。

场景三:大量进程的场景

当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程。


我们还是使用 stress,但这次模拟的是 8 个进程:

  1. stress -c 8 --timeout 600

由于系统只有 1 个 CPU,明显比 8 个进程要少得多,因而,系统的 CPU 处于严重过载状态,平均负载高达 7.66

  1. watch -d uptime

接着再运行 pidstat 来看一下进程的情况:

可以看出,8 个进程在争抢 1 个 CPU,每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)高达平均 88%。这些超出 CPU 计算能力的进程,最终导致 CPU 过载。


pidstat输出中没有%wait的问题,是因为CentOS默认的sysstat稍微有点老,源码或者RPM升级到11.5.5版本以后就可以看到了。而Ubuntu的包一般都比较新,没有这个问题。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Linux权限分配

今天讲一下Linux的文件权限分配!原来一直搞不懂chmod 后面的数字啥子意思,今天看到一位国外大佬的讲解就一目了然了! 首...

Linux curl命令

什么是curl命令?curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且...

Core 发布 Linux

包安装1.导入rpm源 sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm2.更新包 yu...

Linux远程调试.Core

linux远程调试.Core先安装 yum install -y unzip zip远程调试需要解压文件发布Debug版本到服务器,重新启动程序本地步骤:...

Linux 文本处理工具 sed

文本处理工具 sed[TOC] sed 介绍 sed 是一种非交互式的流编辑器,它会集于原文件进行文本处理,但并不会修改原有的文...

Linux 安装Web版Vscode(Docker+Local)

Linux 安装Web版Vscode(Docker+Local)[TOC] code-server 介绍 在任何地方的任何机器上运行VS代码,并在浏览器中访问它...

Linux文件与目录相关命令

查看当前路径命令:pwd 查看当前目录下的文件及目录:ls1、 -A 显示所有文件,而且知道了 linux的隐藏文件 都是以“.”开头...

centos安装docker。Linux安装docker

很简单直接一条命令解决在阿里云服务器上使用这条命令一次性成功 curl -fsSL https://get.docker.com | bash -s docker --...

Python PyQt5 跨平台 读取Linux 路径的坑

self.url=os.path.abspath('.').replace("\\","/")+r'/youer_file_path/filename.html&#3...

Linux查询当前所在目录

很简单实用pwd命令即可

Linux常用命令大全

date -显示系统当前时间和日期cal -显示当前月份的日历df -查看磁盘剩余空间的数量exit -结束终端会话pwd -打印...

Linux 长格式输出

以-rw-r--r-- 1 root root3576296 2020-10-21 16:05 logo.png 为例-rw-r--r--对于文件的访问权限。第一个字符指明文件类型...

Linux cat命令Linux 查看文件内容命令

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。例如要查看存储用户信息的文件passwd就可以使用命...

Linux 查询所有的用户

大家都知道,Linux 系统中用户信息存放在 /etc/passwd 文件中。 这是一个包含每个用户基本信息的文本文件。当我们在系统中...
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术