hincky的主页 hincky的主页
  • 2023

    • nginx
    • prometheus
    • 小工具
    • 部署
  • 数据库

    • MySQL是怎么使用/运行的
    • Redis核心技术与实战
  • 极客时间

    • Web协议详解与抓包实战
    • SQL必知必会
    • MySQL45讲
个人日常
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 2023

    • nginx
    • prometheus
    • 小工具
    • 部署
  • 数据库

    • MySQL是怎么使用/运行的
    • Redis核心技术与实战
  • 极客时间

    • Web协议详解与抓包实战
    • SQL必知必会
    • MySQL45讲
个人日常
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • 2022

  • 2023

    • 一月

    • 五月

    • nginx

    • prometheus

    • tools

    • http状态码

    • 监控

    • Go

    • python

    • linux性能优化

      • cpu基础
        • 平均负载
          • 查看cpu核心数
          • cpu使用率
        • CPU分析工具
          • 压测场景模拟
          • CPU 密集型进程
          • I/O 密集型进程
          • 大量进程的场景
        • CPU上下文
          • 上下文切换
    • PHP

    • elastic

    • chatgpt

    • 小工具

    • js

    • django

    • centos7.6配置

    • 部署

    • 部署资源整理

    • MySQL数据库

  • 工作记录
  • 2023
  • linux性能优化
hincky
2023-03-20
目录

cpu基础

  • 平均负载
    • 查看cpu核心数
    • cpu使用率
  • CPU分析工具
    • 压测场景模拟
      • CPU 密集型进程
      • I/O 密集型进程
      • 大量进程的场景
  • CPU上下文
    • 上下文切换

# 平均负载

# 查看cpu核心数

grep 'model name' /proc/cpuinfo | wc -l #查看cpu核心数
uptime # 过去1,5,15分钟的平均负载,有了 CPU 个数,当平均负载比 CPU 个数还大的时候,系统已经出现了过载。
top
1
2
3

平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数,但它实际上是活跃进程数的指数衰减平均值。

有了 CPU 个数,当平均负载比 CPU 个数还大的时候,系统已经出现了过载。

假设我们在一个单 CPU 系统上看到平均负载为 1.73,0.60,7.98,那么说明:

  • 在过去 1 分钟内,系统有 73% 的超载
  • 而在 15 分钟内,有 698% 的超载
  • 从整体趋势来看,系统的负载在降低。

当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。 即 CPU 个数+0.7

# cpu使用率

平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数,包括了:

  • 正在使用 CPU 的进程
  • 等待 CPU 和等待 I/O 的进程

平均负载跟CPU 使用率没有直接的对应关系:

  • 比如:CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
  • I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
  • 大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

# CPU分析工具

预先安装:

  • stress Linux 系统压力测试工具

  • sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能,包含了mpstat,pidstat

  • iostat

  • mpstat 多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。

  • pidstat 常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

# 压测场景模拟

# CPU 密集型进程

stress --cpu 1 --timeout 600 # 模拟一个cpu持续600秒使用率100%
watch -d uptime # 在第二个终端执行,-d 参数表示高亮显示变化的区域
mpstat -P ALL 5 # 在第三个终端执行,-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据

pidstat -u 5 1  # 查看到底是哪个进程导致了 CPU 使用率为 100%
1
2
3
4
5

从终端二中可以看到,1 分钟的平均负载会慢慢增加到 1.00,而从终端三中还可以看到,正好有一个 CPU 的使用率为 100%,但它的 iowait 只有 0。这说明,平均负载的升高正是由于 CPU 使用率为 100% 。

# I/O 密集型进程

stress -i 1 --timeout 600    # 模拟io压力持续600秒
watch -d uptime # 在第二个终端执行,-d 参数表示高亮显示变化的区域
mpstat -P ALL 5 # 在第三个终端执行,-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据

pidstat -u 5 1  # 查看到底是哪个进程导致 iowait 这么高
1
2
3
4
5

从这里可以看到,1 分钟的平均负载会慢慢增加到 1.06,其中一个 CPU 的系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%。这说明,平均负载的升高是由于 iowait 的升高。

# 大量进程的场景

stress -c 8 --timeout 600    # 模拟8个进程持续600秒
watch -d uptime # 在第二个终端执行,-d 参数表示高亮显示变化的区域
mpstat -P ALL 5 # 在第三个终端执行,-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据

pidstat -u 5 1  # 查看到底是哪个进程导致 iowait 这么高
1
2
3
4
5

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

# CPU上下文

下面两个都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。

  • CPU 寄存器:是 CPU 内置的容量小、但速度极快的内存。
  • 程序计数器:则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。

# 上下文切换

  1. ,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来
  2. 然后加载新任务的上下文到这些寄存器和程序计数器
  3. 最后再跳转到程序计数器所指的新位置,运行新任务
编辑 (opens new window)
安装python
基本语法

← 安装python 基本语法→

最近更新
01
集成chatgpt的工具
05-24
02
修改服务器ssh默认连接端口
05-22
03
阿里云免费证书
05-15
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式