极客时间 - 《Linux 性能优化实战》

极客时间 - 《Linux 性能优化实战》原文链接:https://time.geekbang.org/column/intro/100020901

  • 02 | 基础篇:到底应该怎么理解“平均负载”?
    • 在Linux系统中,当一个进程启动时,操作系统会为该进程申请哪些资源?(9点)
    • 如何理解进程的 S 状态?
    • 如何理解进程的 D 状态?
    • 如何理解进程的 R 状态?
    • 如何理解进程的 Z 状态?
    • 如何理解父进程执行结束,操作系统也会释放子僵尸进程描述符?
    • 如何理解进程的 I 状态?
    • 如何理解进程的 T 状态?
    • 如何理解平均负载?
    • 如何理解 uptime 的运行结果?如何判断结果是否正常或异常?
    • 如何理解CPU使用率?
    • 如何理解CPU使用率和平均负载的关系?
    • 如何理解 mpstat 工具?
    • 如何理解 pidstat 工具?
  • 03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
    • CPU中有哪些常见的寄存器,功能是什么?(9种)
    • 进程的上下文切换都切换了哪些信息?(7条)
    • CPU在什么情况下切换到其他进程运行?(6点)
    • 同一进程内线程的上下文切换,哪些信息会切换?哪些信息不会切换?
      • 会切换的信息(5条)
      • 不会切换的信息(4条)
    • 中断的上下文切换,哪些信息会切换?哪些信息不会切换?
      • 会切换的信息(4条)
      • 不会切换的信息(3条)
  • 04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
    • 如何理解 vmstat 工具?
    • 如何理解 pidstat 工具查看线程上下文切换?
    • 如何理解 cswch 和 nvcswch ?
    • 如何查看中断升高发生的类型?
    • 什么情况的每秒上下文切换才算正常?
  • 05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
    • 如何理解 top 命令的运行结果?
    • 如何理解 ps 命令的运行结果?
    • 如何理解 平均CPU使用率?
    • 如何理解CPU节拍率?
    • 分析一下 man proc?
    • 如何使用 perf 工具定位到 CPU占用率高的具体源码行数?

02 | 基础篇:到底应该怎么理解“平均负载”?

在Linux系统中,当一个进程启动时,操作系统会为该进程申请哪些资源?(9点)

  • PID:系统中唯一标识,用于区分不同的进程,进行进程管理和调度。
  • 虚拟内存空间:包括代码段、数据段、堆、栈等,存储进程代码、数据、运行时堆栈等信息。
  • 文件描述符:进程可以打开文件、管道、套接字等,操作系统会为这些打开的资源分配文件描述符,用于标记和访问这些资源。
  • CPU时间片:确保进程能够获得必要的CPU资源来执行其任务。
  • 进程控制块 PCB:操作系统会为每个进程创建一个进程控制块,其中包含进程的状态信息、寄存器值、调度信息等,用于管理和调度进程。
  • 环境变量:包含了一些配置信息和运行时参数,影响进程运行和配置。
  • 信号处理器:操作系统会为进程设置信号处理器,用于处理各种信号事件(如中断、终止信号等),确保进程能够正确响应各种信号事件。
  • 用户和组ID,用于权限管理和访问控制。
  • 网络资源:socket,支持进程进行网络通信。

如何理解进程的 S 状态?

  • S(interruptible Sleep)
  • 进入条件:需要等待可被信号中断的事件发生。
  • 可处理信号。
  • 进程暂停执行,释放CPU资源。
  • 等待的特定事件发生后,从S状态转换为就绪状态,等待CPU调度执行。
  • 应用场景:文件IO,网络通信,进程间通信。

如何理解进程的 D 状态?

  • D(Uninterruptible Sleep)
  • 进入条件:需要等待可被信号中断的事件发生。
  • 不可处理信号,直到等待事件发生。(这个时候信号会等事件响应之后处理吗?)
  • 进程暂停执行,释放CPU资源。
  • 等待的特定事件发生后,从S状态转换为就绪状态,等待CPU调度执行。
  • 应用场景(进程与硬件设备直接交互):磁盘读写,DMA操作,内核锁,内核同步操作。

如何理解进程的 R 状态?

  • R(Running):进程正在被CPU调度,占用CPU。
  • R(Runnable):进程等待被CPU调度,不占用CPU。

如何理解进程的 Z 状态?

  • Z(Zombie)僵尸状态。
  • 子进程执行结束,子进程描述符保留在操作系统进程表中。
  • 子进程不能通过发送信号杀死,需要通过父进程调用 wait()waitpid() 来获取其退出状态信息后,操作系统释放进程描述符。
  • 父进程执行结束,操作系统也会释放子僵尸进程描述符。
  • 不占用CPU和内存资源,占用进程表中的一个进程描述符。

如何理解父进程执行结束,操作系统也会释放子僵尸进程描述符?

  • 操作系统检测到父进程结束。
  • 将僵尸子进程PPID改为1,即 init 进程的PID。
  • init进程会定期调用 wait() 或 waitpid() 系统调用来获取僵尸子进程的退出状态,操作系统释放僵尸子进程资源(包括文件描述符),结束这些僵尸子进程的生命周期。

如何理解进程的 I 状态?

如何理解进程的 T 状态?

如何理解平均负载?

单位时间内,系统处于 R状态(正在使用 CPU 或者正在等待 CPU 的进程) 和 D状态(不可中断睡眠状态的进程) 的平均进程数。

如何理解 uptime 的运行结果?如何判断结果是否正常或异常?

TUPIAN

$ uptime
02:34:03 up 2 days, 20:14,  1 user,  load average: 0.63, 0.83, 0.88

正常情况:

  • 平均负载数值 / CPU逻辑核心数 < 70%。
  • 分析趋势:1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大。

异常情况:

  • 平均负载数值 / CPU逻辑核心数 > 70%。
  • 分析趋势:1 分钟、5 分钟、15 分钟的三个值递减,说明最近这段时间负载在增加,一旦 1 分钟的平均负载接近或超过了逻辑 CPU 的个数,就意味着系统正在发生过载问题,需要分析问题并进行优化。

如何理解CPU使用率?

如何理解CPU使用率和平均负载的关系?

场景CPU使用率平均负载
CPU密集型进程↑(CPU实际使用率会升高。)↑(正在使用CPU的进程数增加。)
IO密集型—(IO操作不会占用CPU。)↑(等待IO,不可中断睡眠状态进程数增加。)
大量等待CPU调度的进程↑(大量进程在进行上下文切换,会消耗CPU,CPU并没有在真正的执行进程指令。)↑(等待CPU调度的进程数增加。)

如何理解 mpstat 工具?

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

执行结果分析:

如何理解 pidstat 工具?

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

执行结果分析:

03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)

CPU中有哪些常见的寄存器,功能是什么?(9种)

  • 通用寄存器(General Purpose Registers, GPRs):存储数据和地址。
  • 程序计数器(Program Counter):存储下一条要执行的指令的地址。
  • 栈寄存器(Stack Pointer, SP):指向当前栈的顶部。
  • 基址指针(Base Pointer, BP):指向栈中的某个固定地址(通常是函数的栈起始地址),通过 基址指针 + 偏移 访问局部变量和参数
  • 指令寄存器(Instruction Register):存储当前正在执行的指令。
  • 状态寄存器(Status Register):存储CPU执行指令后的状态信息,如进位标志(CF)、零标志(ZF)、符号标志(SF)、溢出标志(OF)等。
  • 浮点寄存器:用于存储浮点数和SIMD(单指令多数据)指令的数据。
  • 控制寄存器:存储CPU的控制信息,如分页机制、保护模式、调试等。
  • 调试寄存器:用于硬件调试,如设置断点、监视内存访问等。

进程的上下文切换都切换了哪些信息?(7条)

  • 所有寄存器信息。
  • 虚拟内存信息。
  • 进程状态。(就绪,等待,运行等)
  • 进程优先级。
  • IO状态信息:IO缓冲区、文件打开状态等。
  • 资源使用情况。(CPU使用时间,内存使用情况等)
  • 信号处理相关信息。(待处理的信号列表,信号处理函数地址等)

CPU在什么情况下切换到其他进程运行?(6点)

  • 分片的时间片用完。
  • 当前进程执行结束。
  • 程序主动 sleep。
  • 资源不足(例如:内存)。
  • 硬件中断,执行内核中断服务程序。
  • 高优先级进程运行存在时。

同一进程内线程的上下文切换,哪些信息会切换?哪些信息不会切换?

会切换的信息(5条)

  • 程序计数器(Program Counter):保存当前线程下一条要执行的指令的地址。
  • 寄存器状态:包括通用寄存器、浮点寄存器、状态寄存器等所有CPU寄存器的内容。
  • 栈指针和基址指针:保存当前线程栈顶和栈起始位置。
  • 线程状态:运行、就绪、阻塞等状态。
  • 线程本地存储:保存线程私有数据。

不会切换的信息(4条)

  • 进程虚拟地址空间:同一进程内所有线程共享相同的虚拟地址空间(代码段、数据段、堆等)。
  • 全局变量和静态变量:进程的虚拟地址空间共享。
  • 打开的文件描述符和文件系统信息:进程级别资源。
  • 信号处理设置。

中断的上下文切换,哪些信息会切换?哪些信息不会切换?

会切换的信息(4条)

  • 通用寄存器。
  • 程序计数器(Program Counter):存储下一条要执行的指令的地址。
  • 栈寄存器(Stack Pointer, SP):指向当前栈的顶部。
  • 状态寄存器(Status Register):存储CPU执行指令后的状态信息,如进位标志(CF)、零标志(ZF)、符号标志(SF)、溢出标志(OF)等。

不会切换的信息(3条)

  • 内存内容:内存中的数据通常不会因为中断而切换,除非中断处理程序需要修改这些数据。
  • 外部设备状态:外部设备的状态(如硬盘、网络接口等)不会因为中断而切换,这些状态由设备自身管理。
  • 全局变量和静态变量:这些变量的值通常不会因为中断而切换,除非中断处理程序需要修改这些变量。

04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)

如何理解 vmstat 工具?

功能:

执行结果分析:

如何理解 pidstat 工具查看线程上下文切换?

功能:pidstat -wt 1

执行结果分析:

如何理解 cswch 和 nvcswch ?

cswch(每秒自愿上下文切换(voluntary context switches)的次数):系统资源不足发生。
cswch变多,进程都在等待资源,有可能发生了 I/O 等其他问题;

nvcswch(每秒非自愿上下文切换(non voluntary context switches)的次数):时间片用完,系统强制调度。
nvcswch变多,进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈;

如何查看中断升高发生的类型?

功能:watch -d cat /proc/interrupts

interrupt变多, CPU 被中断处理程序占用,需要通过查看 /proc/interrupts 文件来分析具体的中断类型。

什么情况的每秒上下文切换才算正常?

  • 稳定在1万次以内。
  • 有增长,但是次数不是数量级的增长。

05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?

如何理解 top 命令的运行结果?

如何理解 ps 命令的运行结果?

如何理解 平均CPU使用率?

TUPIAN:公式

如何理解CPU节拍率?

CPU节拍率:CPU每秒发生时钟中断的次数,如果是100,则CPU每秒发生100次时钟中断。
每次时钟中断的发生,操作系统都有机会进行上下文切换,实现多个任务共享CPU时间,实现多任务并发处理。

分析一下 man proc?

如何使用 perf 工具定位到 CPU占用率高的具体源码行数?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/777645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java技术的篮球论坛系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 B/S模式、Java技术 工具 Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册界面 篮球论坛界面 个人中心界面 摘要 本…

LLM - 循环神经网络(RNN)

1. RNN的关键点&#xff1a;即在处理序列数据时会有顺序的记忆。比如&#xff0c;RNN在处理一个字符串时&#xff0c;在对字母表顺序有记忆的前提下&#xff0c;处理这个字符串会更容易。就像人一样&#xff0c;读取下面第一个字符串会更容易&#xff0c;因为人对字母出现的顺序…

麦蕊智数,,另外一个提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。

麦蕊智数&#xff0c;&#xff0c;提供免费的股票数据API&#xff0c;可以通过其提供的接口获取实时和历史的股票数据。 API接口&#xff1a;http://api.mairui.club/hslt/new/您的licence 备用接口&#xff1a;http://api1.mairui.club/hslt/new/您的licence 请求频率&#x…

宝可梦 第一到第五时代 神兽 幻兽 准神宝可梦盘点

小时候特别喜欢看宝可梦 也玩过一些宝可梦类游戏 而宝可梦中 大家最喜欢的莫过于神兽 今天 我们来盘点一下 宝可梦各世代的神兽 以及准神宝可梦 第一世代 一级神 超梦 属性: 超能力 是火箭队根据梦幻基因制造的一只人造传说宝可梦。 一直是一只热度非常高的宝可梦&#xf…

无人机有哪些关键技术?

一、控制技术 无人机的核心还是在控制上&#xff0c;飞控系统的可靠性、稳定性及可扩展性是其中重要的指标。可靠性上&#xff0c;除了器件选型之外&#xff0c;目前主要靠多余度来增加&#xff1b;稳定性主要体现在多场景下仍能保持良好的工作状态&#xff0c;主要靠算法来进…

PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能&#xff0c;从网上下载该功能的上位机界面&#xff0c;学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。 1. 上位机界面的效果展示 使用PyQt5实现以下界面&#xff0c;界面效果如下&#xff0c;界面图片是从网…

浅识Jmeter与浅谈互联网公司高并发业务压测流程痛点

浅谈Jmeter 什么是Jmeter JMeter 是 Apache 软件基金会开发的一个开源软件&#xff0c;用于负载测试和性能测试。它被设计用来模拟多种请求到服务器、网络或对象&#xff0c;以测试其性能。JMeter 可以用于测试静态和动态资源&#xff0c;并且可以模拟各种协议的请求&#xf…

【JVM基础篇】Java的四种垃圾回收算法介绍

文章目录 垃圾回收算法垃圾回收算法的历史和分类垃圾回收算法的评价标准标记清除算法优缺点 复制算法优缺点 标记整理算法&#xff08;标记压缩算法&#xff09;优缺点 分代垃圾回收算法&#xff08;常用&#xff09;JVM参数设置使用Arthas查看内存分区垃圾回收执行流程分代GC算…

上万组风电,光伏,用户负荷数据分享

上万组风电&#xff0c;光伏&#xff0c;用户负荷数据分享 可用于风光负荷预测等研究 获取链接&#x1f517; https://pan.baidu.com/s/1izpymx6R3Y8JsFdx42rL0A 提取码&#xff1a;381i 获取链接&#x1f517; https://pan.baidu.com/s/1izpymx6R3Y8JsFdx42rL0A 提取…

【算法笔记自学】第 5 章 入门篇(3)——数学问题

5.1简单数学 #include <cstdio> #include <algorithm> using namespace std; bool cmp(int a,int b){return a>b; } void to_array(int n,int num[]){for(int i0;i<4;i){num[i]n%10;n /10;} } int to_number(int num[]){int sum0;for(int i0;i<4;i){sumsu…

计算组的妙用!!页面权限控制

需求描述&#xff1a; 某些特殊的场景下&#xff0c;针对某页看板&#xff0c;需要进行数据权限卡控&#xff0c;但是又不能对全部的数据进行RLS处理&#xff0c;这种情况下可以利用计算组来解决这个需求。 实际场景 事实表包含产品维度和销售维度 两个维度属于同一公司下面的…

搭建互联网医院实战:从源码到在线问诊APP的全流程开发

今天&#xff0c;笔者将讲述在线问诊APP的全流程开发&#xff0c;帮助开发者理解和掌握搭建互联网医院的核心技术和步骤。 一、需求分析与设计 需求分析包括明确目标用户、功能需求、性能需求等。设计阶段则包括系统架构设计、数据库设计和前后端界面设计等。 1.目标用户&…

柯桥职场英语学习商务英语口语生活英语培训生活口语学习

辣妹用英语怎么说&#xff1f; 辣妹在英语中通常被翻译为“hot girl”或“spicy girl”&#xff0c;但更常见和直接的是“hot chick”或简单地使用“hot”来形容。 举个例子: Shes a real hot girl with her trendy outfit and confident attitude. 她真是个辣妹&#xff0…

Ubuntu 20版本安装Redis教程

第一步 切换到root用户&#xff0c;使用su命令&#xff0c;进行切换。 输入&#xff1a; su - 第二步 使用apt命令来搜索redis的软件包&#xff0c;输入命令&#xff1a;apt search redis 第三步 选择需要的redis版本进行安装&#xff0c;本次选择默认版本&#xff0c;redis5.…

谷粒商城-记录创建工程和模块时遇到的两个问题

文章目录 一&#xff0c;Maven工程出现Gradle相关的信息1&#xff0c;问题描述2&#xff0c;解决办法 二&#xff0c;找不到maven插件1&#xff0c;问题描述2&#xff0c;解决方案 三&#xff0c;补充知识&#xff1a;Maven和Gradle 这篇记录几个在创建工程和模块后遇到的几个问…

代码随想录算法训练营第四十五天| 300.最长递增子序列、 674. 最长连续递增序列、 718. 最长重复子数组

300.最长递增子序列 题目链接&#xff1a;300.最长递增子序列 文档讲解&#xff1a;代码随想录 状态&#xff1a;不会&#xff0c;递推状态的时候只想着如何从dp[i-1]推导dp[i]&#xff0c;没想过可能需要枚举dp[0-i] 思路&#xff1a; 找出所有比自己小的数字的dp[j],在这些dp…

超过GPT-4V,国产开源多模态大模型来了!支持视频理解/超高分辨率图片理解/多轮对话...

扫码领取享50优惠&#xff01;随时可用&#xff0c;先到先得&#xff01; 大家好&#xff0c;开源多模态大模型真的是每天都在疯狂的涌现&#xff0c;今天分享一个国产大模型 InternLM-XComposer-2.5 中文名&#xff1a;浦语灵笔2.5 仅使用 7B LLM 后端就达到了 GPT-4V 级别的能…

全能PDF工具集 -- PDF Shaper Professional v14.3 特别版

软件简介 PDF Shaper是一款功能强大的PDF工具集&#xff0c;它提供了一系列用于处理PDF文档的工具。这款软件使用户能够轻松地转换、分割、合并、提取页面以及旋转和加密PDF文件。PDF Shaper的界面简洁直观&#xff0c;使得即使是新手用户也能快速上手。它支持广泛的功能&…

Okhttp hostnameVerifier详解

hostnameVerifier 方法简介核心原理参考资料 方法简介 本篇博文以Okhttp 4.6.0来解析hostnameVerfier的作用&#xff0c;顾名思义&#xff0c;该方法的主要作用就是鉴定hostnname的合法性。Okhttp在初始化的时候我们可以自己配置hostnameVerfier&#xff1a; new OkHttpClien…

奇迹MU 骷髅战士在哪

BOSS分布图介绍 我为大家带来各地区怪物分布图。在游戏前期&#xff0c;很多玩家可能会不知道该去哪里寻找怪物&#xff0c;也不知道哪些怪物值得打。如果选择了太强的怪物&#xff0c;弱小的玩家可能会无法抵御攻击。如果选择了低等级的boss&#xff0c;收益可能并不理想。所…