【Linux 性能详解】CPU性能分析工具篇

目录

uptime

mpstat

实时监控

查看特定CPU核心

pidstart

监控指定进程

组合多个监控类型

监控线程资源

按用户过滤进程

vmstart

用途

基本用法

输出字段

perf

execsnoop

dstat

通俗解释

技术层面解释

使用示例

总结


uptime

uptime 是一个在 Linux 和 Unix 类操作系统中广泛使用的命令行工具,用于提供关于系统运行时间和负载状况的简要信息。执行 uptime 命令时,它会输出一行包含以下几个关键数据的文本:

  1. 当前时间:
    显示当前系统的日期和时间。这可以帮助用户快速了解命令执行的具体时刻。
  2. 系统运行时间:
    表示自系统上次启动以来已运行的总时间。通常以“天+小时:分钟:秒”的格式呈现,如:“1 day, .jpg hours, 34 minutes”。
  3. 当前登录用户数:
    显示当前在系统上处于活动状态(已登录并进行交互或运行进程)的用户数量。这对于评估系统实时使用情况有一定参考价值。
  4. 平均负载:
    提供过去一段时间内系统的平均负载值,通常包括1分钟、5分钟和15分钟的平均负载。这些数值反映了在这三个时间段内,系统处理器(CPU)的繁忙程度。平均负载是系统在特定时间间隔内正在处理或等待处理的任务(进程)的平均数量。理想情况下,这些值应接近系统的处理器核心数(如双核系统期望的平均负载大致在1-2之间),过高可能表明系统资源紧张或存在性能问题。

例如,一个典型的 uptime 命令输出可能如下所示:

解读上述输出:

  • 当前时间为 13:53:41。
  • 系统已经运行了 57天。
  • 有 2名用户当前在线。
  • 过去1分钟、5分钟、15分钟的平均负载分别为 0.09、0.04、0.01。

通过定期检查 uptime 输出,系统管理员和用户可以快速了解系统的总体运行状态、稳定性以及是否存在潜在的资源瓶颈。如果平均负载持续高于系统可处理能力,可能需要进一步调查原因(如是否有资源密集型进程在运行、是否需要增加硬件资源等)。此外,结合其他系统监控工具和命令(如 top、htop、vmstat、iostat 等),可以更深入地分析系统的性能和健康状况。


mpstat

mpstat命令作为Linux系统中用于监控CPU性能的强大工具,具有多种功能特性,以下是一些可能您感兴趣或想要了解的方面:

实时监控

mpstat默认不带任何参数时,会显示系统启动以来CPU的统计信息。若要观察实时变化,可以指定采样间隔和采样次数,如:

mpstat 5 10

这将每5秒采样一次CPU状态,并连续采样10次。

查看特定CPU核心

使用-P选项指定要监控的CPU编号。例如,查看CPU编号为0的核心状态:

若要同时监控所有CPU核心,使用-P ALL:

mpstat -P ALL

  • 显示的统计指标:
    mpstat输出包括但不限于以下各项:
    • %usr: 用户态CPU时间百分比,即执行用户进程所花费的时间。
    • %nice: 低优先级(nice)用户进程所占CPU时间百分比。
    • %sys: 系统态CPU时间百分比,即执行内核进程所花费的时间。
    • %iowait: 等待I/O操作完成时CPU空闲时间百分比。
    • %irq: 处理硬件中断所占CPU时间百分比。
    • %soft: 处理软件中断(包括内核调度等)所占CPU时间百分比。
    • %steal: 在虚拟化环境中,被其他虚拟机“偷走”的CPU时间百分比。
    • %guest: 执行虚拟机所占CPU时间百分比(如果支持)。
    • %idle: CPU空闲时间百分比。
  • 其他选项:
    • -u: 显示更为详细的CPU利用率统计,包括平均负载(load average)、进程上下文切换等信息。
    • -A: 显示所有活动和非活动CPU核心的统计信息,这对于识别未完全利用的CPU核心很有帮助。
    • -V: 显示mpstat版本信息。

pidstart

以下是该命令的一些说明:

监控指定进程

使用-p选项后跟进程ID(PID),可以监控特定进程的资源使用情况。例如,监控PID为1234的进程:

pidstat -p 1821

组合多个监控类型

pidstat允许同时指定多个选项来监控不同类型的资源使用。例如,同时查看CPU使用率和内存使用情况:

pidstat -urd 5 10

 上述命令每5秒采样一次,连续采样10次,显示指定进程的CPU使用(-u)、内存使用(-r)以及磁盘I/O(-d)情况。

监控线程资源

使用-t选项可以显示线程级别的资源使用情况。这在多线程应用程序中非常有用,可以深入分析线程间的资源分配和消耗:

pidstat -ut 5

此命令每5秒显示一次每个线程的CPU使用情况。

按用户过滤进程

使用-U选项可以指定用户名,仅显示该用户所拥有的进程资源使用情况:

pidstat -U john 5

此命令每5秒显示一次用户“john”所拥有的所有进程资源使用情况。

  • 统计信息输出:
    • -h:以人类可读的格式显示数值(如K、M、G等单位)。
    • -V:显示pidstat命令的版本信息。
  • 高级选项和统计字段:
    pidstat提供了更多详细的统计字段和选项,如:
    • -T:显示进程的线程总数。
    • -L:显示进程的页缓存(page cache)使用情况。
    • -W:显示进程的交换(swapped)内存使用情况。

vmstart

用途

vmstat命令主要用来报告关于系统虚拟内存、进程、CPU活动、磁盘I/O、系统中断等关键系统统计信息。通过这些统计数据,管理员可以快速了解系统的整体性能和健康状况,帮助诊断诸如内存压力、CPU瓶颈、磁盘I/O问题等系统性能问题。

基本用法

vmstat的基本用法如下:

vmstat [options] [interval [count]]
  • 选项 (options):可选,用于指定输出内容的详细程度或指定特定统计项。例如:
    • -a 或 --active:显示活跃和非活跃内存信息。
    • -d 或 --disk:显示磁盘统计信息。
    • -m 或 --slabs:显示SLAB信息(内核对象缓存)。
    • -s 或 --stats:仅在开始时打印一次概要统计信息。
    • 其他选项可能因不同Linux版本而异,可通过man vmstat获取完整的选项列表。
  • 间隔 (interval):可选,以秒为单位的时间间隔,表示每隔多少时间采集并输出一次系统状态。如果提供了此参数,vmstat将进入循环模式,持续更新输出。
  • 计数 (count):可选,指定循环输出的次数。如果不指定或设为0,则会一直循环输出,直到手动停止(通常通过按Ctrl+C中断)。

输出字段

vmstat的输出通常包含多列数据,每列代表不同的统计指标。一些常见的列包括:

  • procs:
    • r:运行队列中的进程数,即正在运行或等待CPU时间片的进程数。如果该值持续较高,可能表明CPU过载。
    • b:阻塞在等待I/O完成的进程数。
  • memory:
    • swpd:虚拟内存中使用的交换空间大小。
    • free:可用物理内存大小。
    • buff:用于文件系统缓存的缓冲区大小。
    • cache:用于文件系统缓存的高速缓存大小。
    • 在某些系统上,buff和cache可能合并为一列buf/cach或类似表示。
  • swap:
    • si:从磁盘交换到内存的大小(KB/s)。
    • so:从内存交换到磁盘的大小(KB/s)。高值可能表示内存压力较大。
  • io:
    • bi:块设备接收的块数(块/秒)。
    • bo:块设备发送的块数(块/秒)。这两个值可用于评估磁盘I/O活动。
  • system:
    • in:系统中断次数(每秒)。
    • cs:上下文切换次数(每秒)。高值可能表示进程调度过于频繁。
  • cpu:
    • us:用户态CPU时间占比。
    • sy:内核态CPU时间占比。
    • id:空闲CPU时间占比。
    • wa:等待I/O完成的CPU时间占比。
    • st:被虚拟化系统偷取(如果适用)的CPU时间占比。

使用vmstat时,可以根据需要调整参数来监控特定时间段内的系统行为,或者在排查系统性能问题时持续观察系统状态的变化。结合其他系统监控工具(如top、iostat、free等),可以更全面地分析系统的运行状况。


perf

  • 内核 tracepoints 和动态探针:除了硬件事件,perf 还可以利用内核 tracepoints(预定义的内核跟踪点)和动态插入的 kprobes/usdt 探针来捕获特定的软件事件,如系统调用、函数调用、锁争用等。
  • 性能数据采集:perf 可以记录采样数据(如 CPU 性能计数器的值)、堆栈跟踪信息,以及基于事件的跟踪数据,并将这些数据保存到文件中以供后续分析。
  • 分析与可视化:收集到的性能数据可以使用 perf 自带的分析工具或与其他第三方工具(如 FlameGraph)结合,生成各种报告和图形化视图(如火焰图),便于直观地识别热点函数、查找性能瓶颈和资源争用情况。

常用子命令与功能:

  • perf list:列出当前系统支持的所有性能事件,包括硬件计数器事件、软件事件(tracepoints)、以及由 perf_events 驱动提供的其他事件。这对于选择合适的事件进行性能分析非常有用。
  • perf stat:用于快速获取指定命令或进程的整体性能统计数据。它会在命令执行前后采样,并报告诸如 CPU 时间、缓存命中率、指令数、上下文切换等各项指标。
  • perf record:记录指定进程在运行期间的性能数据,生成一个 .perf.data 文件。此文件可以使用 perf report、perf annotate 等命令进行详细分析。
  • perf report:读取先前使用 perf record 生成的数据文件,展示采样数据的分析结果,通常包括按样本数排序的函数列表、调用关系树(caller/callee)、以及每个函数的源码行级别细节。
  • perf top:提供类似 top 命令的实时视图,显示当前系统或指定进程中占用资源最多的函数(按照 CPU 使用率、指令数等)。这对于实时监控系统或进程的性能热点非常有用。
  • perf annotate:针对特定函数,展示其源代码并标注每一行代码被采样的次数,有助于识别函数内部的具体热点。
  • perf script:处理 perf record 收集的事件数据,可以配合 -g 参数生成适合于 FlameGraph 工具的折叠堆栈格式,用于生成火焰图。

这些只是 perf 命令的一部分功能。实际使用中,根据具体的性能分析需求,可以组合使用不同的子命令和选项。


execsnoop

execsnoop 是一个在 Linux 系统中用于监控进程执行情况的实用工具。它通常被用作一种动态追踪技术,能够实时监测并报告系统上正在运行的所有进程(或特定条件下的进程)所执行的外部命令(即通过 execve() 系统调用启动的新程序)。execsnoop 主要利用 eBPF (Extended Berkeley Packet Filter) 或者早期版本中可能使用的内核跟踪点(tracepoints)来实现这一功能。

以下是 execsnoop 命令的一些关键特性与用途:

  1. 实时监控:execsnoop 可以实时捕获和显示任何时刻系统上新执行的命令及其相关信息,这对于诊断系统行为、识别异常活动、安全审计、性能分析等场景非常有用。
  2. 命令行参数捕获:除了记录被执行的命令本身,execsnoop 还可能显示命令执行时携带的参数,这对于理解具体操作的上下文至关重要。
  3. 过滤与筛选:用户可以指定过滤规则来关注特定类型的进程执行事件,比如仅监控特定用户、特定命令、特定目录下的命令执行,或者基于命令行参数内容进行匹配。
  4. 性能影响小:由于利用了高效的 eBPF 技术,execsnoop 在提供详细监控能力的同时,对系统性能的影响相对较小,使其适用于生产环境中非侵入式的监控需求。
  5. 输出格式:execsnoop 的输出通常包括进程 ID(PID)、父进程 ID(PPID)、执行命令的完整路径、命令行参数以及执行时间戳等信息。
  6. 工具来源:execsnoop 往往是作为 BCC(Berkeley Packet Filter Compiler Collection)工具集的一部分提供的。BCC 是一套用于创建高效内核 tracing 和分析工具的框架,包含了大量基于 eBPF 的实用程序,包括 execsnoop。

如果您想在您的 Linux 系统上使用 execsnoop,您需要确保已经安装了 BCC 工具集。在许多现代 Linux 发行版中,可以通过包管理器(如 apt、yum 或 dnf)来安装 BCC。安装后,您就可以在终端中直接运行 execsnoop 命令来开始监控进程执行情况。具体的使用语法和选项可能会因 BCC 版本不同而有所差异,但通常会包括一些基本的过滤选项,允许您根据需要定制监控范围。


dstat

dstat 是一款强大的 Linux 系统监控工具,它设计用于实时展示系统的各项关键性能指标,被誉为“全能型”监控利器。以下是对 dstat 命令的通俗且详细的介绍:

通俗解释

想象你正在经营一家工厂,需要随时掌握生产线上各个环节的工作状态,以便及时调整策略、优化流程,确保整体运营高效顺畅。为此,你可能会在各个关键位置安装各种仪表和传感器,如电流表监测电力消耗,温度计监控设备温度,计数器记录产品产出,等等。这些设备会实时反馈数据,让你一目了然地看到当前生产线的整体运行状况。

在 Linux 系统的世界里,dstat 就扮演了这样一个综合监控仪表板的角色。当运行 dstat 命令时,它会在终端上实时滚动显示一系列系统性能统计数据,这些数据就像是工厂中的各类仪表读数,涵盖了 CPU 使用率、内存使用情况、磁盘 I/O 活动、网络流量等关键性能指标。通过观察 dstat 的输出,系统管理员或开发者可以迅速了解系统的健康状况、资源分配是否合理、是否存在性能瓶颈等问题,就像工厂经理通过监控面板判断生产线是否正常运转一样。

技术层面解释

dstat 的主要特点和优势包括:

  1. 全面性:它整合了多个传统监控工具的功能,如 vmstat(虚拟内存统计)、iostat(磁盘 I/O 统计)、ifstat(网络接口统计)、netstat(网络连接统计)等,省去了用户需要运行多个命令才能获取完整系统视图的麻烦。
  2. 灵活性:dstat 允许用户根据需要定制要监控的项目,可以选择显示哪些性能指标,也可以通过参数动态添加或移除监控项。这意味着你可以聚焦于特定的关注点,避免无关信息干扰。
  3. 实时性:dstat 以秒级乃至更短的时间间隔持续刷新显示数据,确保用户能够及时捕捉到系统状态的变化。这对于快速响应性能波动或故障排查尤其重要。
  4. 易用性:其简洁的命令行界面使得即使非专业用户也能快速上手。通过简单的命令选项,可以轻松调整输出格式、采样频率、显示列数等。

使用示例

运行最基本的 dstat 命令,会得到一组默认的核心系统统计信息:

dstat

如果你想查看特定的监控项,可以使用参数指定,比如仅关注 CPU 和磁盘 I/O:

dstat -cd

若需以较长时间间隔(如每5秒)监控网络流量和系统负载,可以这样操作:

dstat -tn --interval 5

dstat 还支持输出到文件供后续分析,或与其他工具结合使用进行自动化监控。

总之,dstat 是 Linux 系统管理员和开发者手中的得力助手,凭借其全面、灵活、实时的特性,使得对系统性能的监控变得直观、便捷,有助于快速识别和解决问题,优化系统资源利用效率。

总结

有了以上性能工具,在实际遇到问题时我们并不可能全部性能工具跑一遍,这样效率也太低了,所以这里可以先运行常用的工具 top分析系统大概的运行情况然后在具体定位原因。 

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

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

相关文章

上班不想用脑子写代码了怎么办?那就试试Baidu Comate啊宝贝

本文目录 前言1、视频编程实战1.1、熟悉代码库中的代码1.2、参考现有代码编写新代码 2、下载使用教程3、使用体验3.1、AutoWork 产品测评3.2、解决有关ajax请求后重定向问题3.3、询问编程相关知识3.3.1、cookie和session的区别与联系3.3.2、数据库中主键外键的相关知识 4、问题…

基于EBAZ4205矿板的图像处理:12图像二值化(阈值可调)

基于EBAZ4205矿板的图像处理:12图像二值化(阈值可调) 我的项目是基于EBAZ4205矿板的阈值可调的图像阈值二值化处理,可以通过按键调整二值化的阈值,key1为阈值加1,key4为阈值减1,key2为阈值加10,key5为阈值…

【bug记录】清除僵尸进程,释放GPU显存

目录 1. 为什么会出现这种情况?2. 解决方案方法一:使用 fuser 命令方法二: 3. 小贴士 在进行深度学习或其他需要GPU支持的任务时,我们有时会发现虽然没有可见的进程在执行,但GPU资源却意外地被占用。这种情况往往会阻碍…

AI换脸原理(4)——人脸对齐(关键点检测)参考文献2DFAN:代码解析

注意,本文属于人脸关键点检测步骤的论文,虽然也在人脸对齐的范畴下。 1、介绍 在本文中,重点介绍了以下几项创新性的成果,旨在为人脸关键点检测领域带来新的突破。 首先,成功构建了一个卓越的2D人脸关键点检测基线模型。这一模型不仅集成了目前最优的关键点检测网络结构,…

docker无法映射/挂载根目录

docker无法映射(挂载)根目录下的文件夹只能映射家目录 最近想要使用nas-tools做做刮削,电影存在一个机械磁盘里,机械磁盘被挂载到/data1下,发现一个很奇怪的问题,docker只能挂载成功home目录下的文件夹&am…

sqlite3命令行工具无法退出问题处理

一、背景: 软件使用的后台数据库为sqlite,linux主机系统层面使用sqlite3命令行工具登录数据库后,无法执行sql脚本,无法退出sqlite3。无法执行ctrlc,执行ctrlz后sqlite3前台进程被中断,但是该进程没有退出。…

Spring-依赖查找

依赖查找 根据名称进行查找 实时查找 BeanFactory beanFactory new ClassPathXmlApplicationContext("beans.xml"); Object bean beanFactory.getBean("personHolder"); System.out.println(bean);xml如下: <bean id"person" class&qu…

运维自动化工具:Ansible 概念与模块详解

目录 前言 一、运维自动化工具有哪些 二、Ansible 概述 1、Ansible 概念 2、Ansible 特点 3、Ansible 工作流程 4、Ansible 架构 4.1 Ansible 组成 4.2 Ansible 命令执行来源 5、Ansible 的优缺点 三、Ansible 安装部署 1、环境部署 2、管理节点安装 Ansible 3、…

Golang | Leetcode Golang题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; func sortColors(nums []int) {p0, p2 : 0, len(nums)-1for i : 0; i < p2; i {for ; i < p2 && nums[i] 2; p2-- {nums[i], nums[p2] nums[p2], nums[i]}if nums[i] 0 {nums[i], nums[p0] nums[p0], nums[i]p0}} }

模型全参数训练和LoRA微调所需显存的分析

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

React开发环境搭建教程

基于本地JS文件搭建 demo.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</ti…

k8s调度原理以及自定义调度器

kube-scheduler 是 kubernetes 的核心组件之一&#xff0c;主要负责整个集群资源的调度功能&#xff0c;根据特定的调度算法和策略&#xff0c;将 Pod 调度到最优的工作节点上面去&#xff0c;从而更加合理、更加充分的利用集群的资源&#xff0c;这也是我们选择使用 kubernete…

java--io流(一)

1. 前置知识 字符集是什么&#xff1f; 字符集&#xff08;Character Set&#xff09;是一组字符的集合&#xff0c;它定义了可以在计算机系统中使用的所有字符。字符集可以包括字母、数字、标点符号、控制字符、图形符号等。字符集使得计算机能够存储、处理和显示各种语言和…

精准清理 MongoDB 数据:删除集合的正确姿势

在 MongoDB 数据库管理中&#xff0c;数据清理是维护数据库性能和保持数据一致性的关键步骤之一。而删除集合是实现数据清理的重要手段之一。在这个信息爆炸的时代&#xff0c;了解如何正确地执行集合删除操作至关重要。本文将深入探讨 MongoDB 中删除集合的常用方法、最佳实践…

使用Python实现卷积神经网络(CNN)

卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种广泛应用于计算机视觉任务的深度学习模型。本教程将介绍如何使用Python和PyTorch库实现一个简单的卷积神经网络&#xff0c;用于图像分类任务。 什么是卷积神经网络&#xff08;CNN&am…

嵌入式Linux学习第四天启动方式学习

嵌入式Linux学习第四天 今天学习I.MX6U 启动方式详解。I.MX6U有多种启动方式&#xff0c;可以从 SD/EMMC、NAND Flash、QSPI Flash等启动。 启动方式选择 BOOT 的处理过程是发生在 I.MX6U 芯片上电以后&#xff0c;芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。BOOT_M…

Linux——基础IO2

引入 之前在Linux——基础IO(1)中我们讲的都是(进程打开的文件)被打开的文件 那些未被打开的文件呢&#xff1f; 大部分的文件都是没有被打开的文件&#xff0c;这些文件在哪保存&#xff1f;磁盘(SSD) OS要不要管理磁盘上的文件&#xff1f;(如何让OS快速定位一个文件) 要…

数据仓库与数据挖掘实验练习3-4(实验二2024.5.8)

练习3 1.简单文件操作练习 import pandas as pd # 读取文件 pd.read_csv(pokemon.csv) # 读取 CSV 文件的函数调用&#xff0c;它将文件中的数据加载到 DataFrame 中&#xff0c;并指定了 Pokemon 列作为索引列。 pd.read_csv(pokemon.csv,index_colPokemon)#查看类型 type(p…

React:Router-2. createBrowserRouter函数式

参考文档&#xff1a;ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式&#xff0c;在react-router6.4.0及以上版本&#xff0c;提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件&#xff0c;使用createBrow…

十二届蓝桥杯Python组1月中/高级试题 第五题

** 十二届蓝桥杯Python组1月中/高级试题 第五题 ** 第五题&#xff08;难度系数 5&#xff0c;35 个计分点&#xff09; 提示信息&#xff1a; 平均数&#xff1a;是指在一组数据中所有数据之和再除以这组数据的个数。 如&#xff1a;“1&#xff0c;2&#xff0c;3&#xf…