我终于知道高工是如快速分析线上程序性能瓶颈了(CPU篇)

本文详细介绍了如何分析线上系统CPU性能瓶颈,从CPU使用率、平均负载、上下文切换等理论名词,到uptime、top、vmstat等性能分析工具的使用,帮助程序员快速定位问题,提升系统性能。
摘要由CSDN通过智能技术生成

线上系统变慢,刚入行的程序员们往往会束手无策,这个时候还得高工出马。本系列打算从CPU、内存、I/O、网络4方面系统梳理如何高效定位和分析系统瓶颈的方法,带你一步步成为组中那个技术大佬!

本篇从CPU性能分析入手,将必备要懂的理论名词和常用的CPU性能分析工具一网打尽,助你成为性能分析大佬。

CPU理论名词篇

1. CPU使用率

CPU使用率指单位时间内CPU使用情况的统计,除了空闲时间外的其他时间占总 CPU 时间的百分比,具体的计算方法为:

2. 平均负载

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数。具体来说,可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程。不可中断状态的进程,是指正处于内核态关键流程中的进程,如等待硬件设备的 I/O 响应等,这些进程是不可中断的。
倪朋飞.《Linux 性能优化实战》

我知道,初次见到平均负载这个含义的同学可能会觉得拗口。简单来说,你可以把这里的『负载』理解成『活跃进程数』,如果平均负载是2,那平均活跃进程数也是2。

如果你的系统有2个CPU,那么恭喜你,你的每个CPU都恰好有一个进程,说明你的CPU得到了充分利用。

如果你的系统只有1个CPU,说明你的CPU要开始卷了,因为同一个时刻,会有一个进程竞争不到CPU。

如果你的系统有4个CPU,说明你的CPU已开启躺平模式,其中2个CPU已在闲适舒服中~

3. CPU上下文切换

我们知道操作系统是一个多任务操作系统,能够支持多个任务"同时"运行。这主要是因为CPU能够分时轮换处理多个任务,在同一个时刻,只能有一个任务正在运行。故所谓的CPU上下文切换指的是先把前一个任务的上下文(CPU寄存器和程序计数器)保存到系统内核中,然后基于系统任务调度加载新任务的上下文到这些寄存器和程序计数器,并根据程序计数器所指的位置来运行新任务。

那么CPU的上下文切换主要发生在什么时候呢?

3.1 系统调用

如图所示,用户空间在Ring3,是用户程序的运行空间;内核空间是Ring0,是Linux内核的运行空间。

从用户空间到内核空间的转变,需要系统调用来完成,如打开关闭文件、读写文件等,一次系统调用需要两次CPU上下文切换。

(1)进程的用户空间-> 进程的内核空间

(2)进程的内核空间-> 进程的用户空间

3.2 进程的上下文切换

进程是通过内核来管理和调度的,进程的切换只能发生在内核态,故进程的上下文切换比系统调用多了一步。

(1)进程1的用户空间-> 进程1的内核空间

(2)进程1的内核空间-> 进程2的内核空间

(2)进程2的内核空间-> 进程2的用户空间

3.3 线程上下文切换

从一个线程切换到另一个线程需要线程上下文切换。

(1)若前后两个线程属于同一个进程,因为进程内虚拟内存、全局变量等资源共享,故切换时只需保存各自的私有数据。

(2)若前后两个线程属于不同的进程,因为资源不共享,故线程的上下文切换和进程的上下文切换是一样的。

3.4 中断上下文切换

当有硬件中断时,中断处理会打断进程的正常调度和执行,会将进程内核态的上下文保存下来,转而执行中断,这样在中断完成后,进程仍能恢复原来的状态继续运行。

CPU上下文切换是操作系统的基础功能,不需要特别关注,但是过多的上下文切换会让CPU的时间过多消耗在寄存器、堆栈、虚拟内存等数据的保存和恢复上,缩短进程的真正运行时间,导致系统整体性能的下降。

<

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值