【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分析系统大概的运行情况然后在具体定位原因。

相关推荐
鬼手点金2 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
贵州诚鑫致达科技有限公司3 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹3 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo3 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人4 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
遇印记4 小时前
传输层,网络层
运维·服务器·网络·windows·学习
Elastic 中国社区官方博客5 小时前
一条 ES|QL 查询,涵盖365天的审计日志:在热数据和可搜索快照上执行相同的搜索
大数据·运维·服务器·elasticsearch·搜索引擎·全文检索
北京中科新远科技5 小时前
高速光模块上线验收实战:DOM、FEC、BER与端口计数器怎么一起看
服务器·网络·php
美狐美颜SDK开放平台6 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk