看完这篇文章,我再也不用担心线上出现CPU性能问题了(下)

news2024/11/20 12:42:15

目录

    • 平均负载
    • CPU 使用率
    • 进程上下文切换
    • 补充
    • 总结

在 《看完这篇文章,我再也不用担心线上出现CPU性能问题了(上)》中,咸鱼给大家介绍了 CPU 常见的性能指标,当生产环境出现 CPU 性能瓶颈的时候,优先观察这些指标有没有什么异常的地方,能解决大部分情况

但是仅掌握了 CPU 的性能指标还远远不够,我们还需要知道怎么样去获取这些指标,用什么工具去获取

君子生非异也,善假于物也”,只要掌握一些常见的 CPU 性能工具,我相信处理 CPU 性能问题也就事半功倍了

对于每个工具的使用方法,不需要完全记下使用参数,你只需要知道有哪些工具、以及这些工具的基本功能是什么就足够了

真正要用到的时候,通过 man 手册或者 --help 命令查阅就可以了

平均负载

uptime

看下 man 手册关于 uptime 命令描述

uptime  gives a one line display of the following information.  The current time, how long the system has been running, how many users are currently logged on, and the system load averages for the past 1, 5, and 15 minutes.

可以看到,uptime 命令可以输出系统过去1分钟、5分钟、15分钟之内的平均负载

我们看一下 uptime 命令的输出,重点关注 load averages

# uptime 
10:38:46 up 20 days,  9:25,  1 user,  load average: 0.00, 0.01, 0.05

top

看下 man 手册关于 top 命令的描述

The top program provides a dynamic real-time view of a running system. It can display system summary information as well as a list of processes or threads currently being managed by the Linux kernel. The types of system summary information shown and the types, order and size of information displayed for processes are all user configurable and that configuration can be made per‐sistent across restarts.

The program provides a limited interactive interface for process manipulation as well as a much more extensive interface for personal configuration – encompassing every aspect of its operation. And while top is referred to throughout this document, you are free to name the program anything you wish. That new name, possibly an alias, will then be reflected on top’s display and used when reading and writing a configuration file.

除了 uptime 之外,top 命令也可以显示出系统过去1分钟、5分钟、15分钟之内的平均负载

# top
top - 10:39:56 up 20 days,  9:26,  1 user,  load average: 0.00, 0.01, 0.05

不但如此,top 命令更为强大,能够展示更为全面的性能指标(例如 CPU 使用率、进程数等等)

CPU 使用率

top

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况在这里插入图片描述
我们可以将输出内容分成两部分:

第一部分:(系统资源的整体使用情况)
在这里插入图片描述
我们直接来看第三行,第三行内容是系统整体 CPU 使用率

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

从左到右依次是:用户 CPU 使用率、系统 CPU 使用率、低优先级用户 CPU 使用率、空闲 CPU 使用率、等待 I/O CPU 使用率、硬中断 CPU 使用率、软中断 CPU 使用率、系统被其他虚拟机占用的 CPU 使用率

第二部分:各进程 CPU 使用率
在这里插入图片描述
通过 top 命令,我们就能观察到系统整体 CPU 使用率以及各个进程的 CPU 使用率

mpstat

mpstat 是 sysstat 工具的一个命令

man 手册关于 mpstat 命令的描述

   The  mpstat  command writes to standard output activities for each available processor, processor 0 being the first one.  Global
   average activities among all processors are also reported.  The mpstat command can be used both on SMP and UP machines,  but  in
   the latter, only global average activities will be printed. If no activity has been selected, then the default report is the CPU utilization report

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

mpstat 显示的信息存放在 /proc/stat 中

关于 mpstat 的详细使用,可以参考 man 手册

man mpstat

例子:每两秒更新一次
在这里插入图片描述
pidstat

pidstat是sysstat工具的一个命令

man 手册关于 pidstat 命令的描述

The pidstat command is used for monitoring individual tasks currently being managed by the Linux kernel. It writes to standard
output activities for every task selected with option -p or for every task managed by the Linux kernel if option -p ALL has been
used. Not selecting any tasks is equivalent to specifying -p ALL but only active tasks (tasks with non-zero statistics values)
will appear in the report.

The pidstat command can also be used for monitoring the child processes of selected tasks. Read about option -T below.

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

关于 pidstat 的详细使用,可以参考 man 手册

man pidstat

例子:每两秒更新一次(cpu使用情况统计)
在这里插入图片描述

进程上下文切换

我们可以使用 vmstat 这个工具,来查询系统的上下文切换情况

vmstat

man 手册关于vmstat 命令的描述

vmstat reports information about processes, memory, paging, block IO, traps, disks and cpu activity.

The first report produced gives averages since the last reboot. Additional reports give information on a sampling period of

length delay. The process and memory reports are instantaneous in either case

vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数

比如,下面就是一个 vmstat 的使用示例:
在这里插入图片描述
我们来着重看一下其中四列的含义:

  • cs(context switch)是每秒上下文切换的次数
  • in(interrupt)则是每秒中断的次数
  • r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数
  • b(Blocked)则是处于不可中断睡眠状态的进程数。

pidstat

vmstat 只给出了系统总体的上下文切换情况

要想查看每个进程的详细情况,就需要使用到上面介绍过的 pidstat,加上 -w 选项,就可以查看每个进程上下文切换的情况了

举个例子:
在这里插入图片描述
输出内容里面我们需要着重关注两列:

  • cswch:表示每秒自愿上下文切换(voluntary context switches)的次数
  • nvcswch:表示每秒非自愿上下文切换(non voluntary context switches)的次数

什么是自愿上下文切换什么是非自愿上下文切换呢?

自愿上下文切换,是指进程无法获取所需资源而导致的上下文切换,比如说进程所需内存不足时发生的上下文切换

非自愿上下文切换,则是指进程由于 CPU 分配的时间片已到等原因,被系统强制调度等导致的上下文切换,比如说大量进程在抢夺 CPU,就很容易发生非自愿上下文切换

补充

除了上面的性能工具,我再补充几个

dstat

dstat 是一个可以取代 vmstat,iostat,netstat 和 ifstat 这些命令的多功能产品

man 手册关于dstat 命令的描述

Dstat is a versatile replacement for vmstat, iostat and ifstat. Dstat overcomes some of the limitations and adds some extra features.

Dstat allows you to view all of your system resources instantly, you can eg. compare disk usage in combination with interrupts from your IDE controller, or compare the network bandwidth numbers directly with the disk throughput (in the same interval).

Dstat also cleverly gives you the most detailed information in columns and clearly indicates in what magnitude and unit the output is displayed. Less confusion, less mistakes, more efficient.

Dstat is unique in letting you aggregate block device throughput for a certain diskset or network bandwidth for a group of interfaces, ie. you can see the throughput for all the block devices that make up a single filesystem or storage system.

Dstat allows its data to be directly written to a CSV file to be imported and used by OpenOffice, Gnumeric or Excel to create graphs

dstat 可以让你实时地看到所有系统资源,以列表的形式展现

#安装 dstat
yum install -y dstat

举个例子:
在这里插入图片描述
perf top

首先来介绍一下 perf

perf 是Linux的一款性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题

#安装
yum install -y perf

perf top 类似于 top,但与 top 不同的是 perf top 能够实时显示占用 CPU 时钟最多的函数或者指令

man 手册关于perf top 命令的描述

This command generates and displays a performance counter profile in real time

在这里插入图片描述
我们先看第一行,从左到右依次是:

  • Samples:采样数
  • event:事件类型
  • Event count:事件总数

再往下看是一个表格样式的数据,每一行有四列,分别是:

  • Overhead:表示该函数的性能事件在所有采样中的比例,用百分比来表示
  • Shared:表示该函数或者命令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名,内核模块名等
  • Object:表示动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间
  • Symbol:符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示

perf record & perf report

perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。

而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示

man 手册关于perf record 命令的描述

This command runs a command and gathers a performance counter profile from it, into perf.data - without displaying anything.

This file can then be inspected later on, using perf report

# perf record(然后按Ctrl+C终止采样)
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.472 MB perf.data (2641 samples) ]

# perf report

sar

sar 命令是一个很强大,分析系统性能的重要工具之一,通过该命令可以全面地获取系统的 CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU 中断和网络等性能数据

#安装
yum install -y sysstat

总结

本篇文章介绍了一些常用的 CPU 性能观察工具,不知道你们是不是跟我一样,看到这里已经快晕了

这么多性能工具,该怎么区分?在什么场景下用?如何将多种工具结合起来?

第一,掌握哪些工具能够观察具体性能指标

当你想要查看某个性能指标时,要清楚哪些工具可以做到

举个例子:

当你想要观察系统平均负载的时候就会想到用 uptime 命令;当你想要看系统整体的一些资源使用情况的时候你就会想到用 top 命令;当你想要观察某一进程的资源使用情况的时候你就会想到用mpstat、sar 等命令

根据想要观察的性能指标来挑选性能工具,这样在实际排查的时候你就可以清楚知道,什么工具可以提供你想要的指标,而不是毫无根据地挨个尝试,撞运气

为此我搬运了倪鹏飞老师课程里面的图片,分享给大家

在这里插入图片描述
第二,掌握常见性能工具的适用场景以及使用方法

不需要要求你把工具的所有参数以及配置选项给背下来,你只需要知道你现在拥有的这些工具的基本功能是什么、适用于哪些场景就行了

等你具体使用的时候,通过查询 man 手册或者 --help 命令就行了

这在实际生产环境中是非常重要的,因为大部分情况下你并没有权限安装新的工具包,生产环境下的机器很多都是在内网中,你只能最大化的利用现有的工具
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文投稿指南——中文核心期刊推荐(食品工业 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

写IB EE(Extended Essay)时最容易犯的五大错误

【第一大忌】用随意找来的文章做Sources! 同学们都知道EE写作一定要做好citation,在文中、文末都要列出参考资料。但不是什么文章都”有资格“成为bibliography的一部分,选取质量高的sources是很重要的。那些百度上搜到的作者不详、自己都没有…

教你使用 Petalinux 定制 Linux

测试平台:黑金 Zynq7035 开发板 芯片型号:XC7Z035-2FFG676I 开发环境:Ubuntu 16.04 开发工具:Petalinux 2017.4 Step1 创建 Petalinux 工程 1.1 将 Vivado 工程目录下*.sdk文件夹中的*.hdf文件复制到新建的proj文件夹中 1.2 …

串级PID控制原理-2

按串级控制的基本原理,采用Simulink进行编程,在连续方式下进行仿真。在串级控制中,主调节器采用PI控制,取kp 50,k i5,副调节器采用Р控制,kp 200。外加干扰为正弦信号sin(50t),通过切…

报表控件Stimulsoft技术答疑:如何在二维码中编码数据?

Stimulsoft Reports是一款报告编写器,主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署,如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等,在你的应用程序中嵌入报告设计器…

深度学习网络各种激活函数 Sigmoid、Tanh、ReLU、Leaky_ReLU、SiLU、Mish

激活函数的目的就是为网络提供非线性化 梯度消失:梯度为0, 无法反向传播,导致参数得不到更新 梯度饱和:随着数据的变化,梯度没有明显变化 梯度爆炸:梯度越来越大,无法收敛 梯度消失问题&#…

JavaWeb1-计算机是如何工作的?

目录 1.计算机的构成 1.1.计算机二进制 1.2.冯诺依曼体系结构 1.2.1.CPU(加工厂) 1.2.2.存储器(仓库) 1.2.3.输⼊设备(原材料) 1.2.4.输出设备(产品) PS:关于存…

Jmeter 并发业务场景如何控制接口只执行一次

今天在做并发测试,执行后会发现登录接口执行多次,实际只需执行一次就可以。 刚开始用了网上推荐的仅一次控制器,但是发现仅一次控制器对线程组无效。 其实只要对元件熟悉,这个问题很简单,只需要用吞吐量控制器&#xf…

CDH数仓项目(四) —— 集群性能测试/资源管理/清理CDH集群

0 说明 本文基于《CDH数仓项目(一) —— CDH安装部署搭建详细流程》《CDH数仓项目(二) —— 用户行为数仓和业务数仓搭建》和《CDH数仓项目(三) —— Kerberos安全认证和Sentry权限管理》章节,本篇介绍些常见的性能测试和资源管理功能,及最后提供详细的…

SpringMVC之五种类型参数传递

目录 一:普通参数 二:POJO数据类型 三:嵌套POJO类型参数 四:数组类型参数 五:集合类型参数 知识点1:RequestParam 前面我们已经能够使用GET或POST来发送请求和数据,所携带的数据都是比较简…

深度学习中的attention机制

SE 文章 https://openaccess.thecvf.com/content_cvpr_2018/papers/Hu_Squeeze-and-Excitation_Networks_CVPR_2018_paper.pdfhttps://openaccess.thecvf.com/content_cvpr_2018/papers/Hu_Squeeze-and-Excitation_Networks_CVPR_2018_paper.pdf class SELayer(nn.Module):…

Java工具包类

java.util包有很多实用的类、接口和异常。 向量类,堆栈类,哈希表,枚举接口,日历类,随机函数类,映射接口和属性类。 Vector类 vector是异构的,可以存储不同的对象,同时可以动态增加…

【工具】国内苹果市场已上架 新一代社交产品 damus

国内苹果市场可下载 2月1日,Twitter 联合创始人 Jack Dorsey 发布推文表示,基于分布式社交媒体协议 Nostr 的社交产品 Damus 和 Amethyst 正式在苹果 App Store 和谷歌 Google Play Store 上线。 目前为止,Damus 在国内苹果应用市场是可以直…

远程超大功率森林防火喊话与应急广播系统方案

北京恒星科通发布于2023-2-2 一、引言 随着消灭宜林荒山和实现全面绿化,造林事业不断发展,林地面积、林业蓄积量逐年增加,如何加强森林防火、保护环境,是全国当前面临的一项重大任务。 森林火灾是一种突发性和破坏性极强的自然…

Spring Security(新版本)实现权限认证与授权

学习新版SpringSecurity详细配置一、Spring Security介绍1、Spring Security简介2、历史3、同款产品对比3.1、Spring Security3.2、 Shiro二、Spring Security实现权限1、SpringSecurity入门1.1 添加依赖1.2、启动项目测试2、用户认证2.1、用户认证核心组件2.2、用户认证2.2.1、…

CrossOver虚拟机软件2023最新版Mac运行切换Windows

CrossOver2023版是专为苹果电脑用户打造的一款实用工具,这款工具主要方便用户在mac上运行windows系列的应用程序,用户不需要安装虚拟机就可以实现各种应用程序的直接应用,并且可以实现无缝集成,实现跨平台的复制粘贴和文件互通等&…

我为什么抢不到票?!全国最难抢线路揭晓

随着疫情防控策略的转变,不少多年未归的朋友选择在今年返乡团聚。那么2023年春运抢票难度是否会因此而飙升?本期文章,我们通过数据分析,观察比较哪条线路的票最难抢,给还没有买到票的朋友提供参考。 根据往年央视报道和…

浅析晶体管放大电路的负载线

晶体管放大电路的负载线包括直流负载线和交流负载线,描述了输出端电压、电流与负载之间的关系。大学期间曾经学习过相关知识,本文将与大家重温所学内容,并介绍直流工作点对功率放大器性能的影响。 直流负载线 以场效应管为例,图…

基于python3实现Azure机器学习最接近人声的文本转语音功能

上期文章,我们介绍了如何使用Azure来创建一个语音服务API,哪里,我们得到了API的key,以及语音服务的基本信息,包含地区等,这些都是本期代码需要的参数 听了那么多AI合成的语音,Azure机器学习的文本转语音最接近人声https://blog.csdn.net/weixin_44782294/article/detai…

如何实现大文件上传:秒传、断点续传、分片上传

前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受&#…