如何在 Linux 命令行中检查 CPU 使用率

使用 top 命令

top 是一个强大的实时系统性能监控工具,它提供了对系统资源的实时动态监测。通过 top 命令,你可以查看 CPU、内存、进程等系统资源的使用情况,以及各个进程的详细信息。

在终端中输入以下命令启动 top

top

这将会显示一个实时更新的系统状态面板,其中包含 CPU 使用率、内存使用率、任务队列信息等。

实时监控 CPU 使用率

top 的默认显示中,CPU 使用率是最显眼的一部分。它显示在顶部的第三行,如下所示:

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

这一行提供了 CPU 使用率的详细信息,包括用户空间使用率(us)、系统空间使用率(sy)、空闲率(id)等。在这个例子中,99.6% 的时间 CPU 处于空闲状态。

top 的输出可能会包含大量信息,因此理解如何解读这些信息是非常重要的。以下是一些关键的信息点:

  • PID(进程ID):每个运行中的进程都有一个唯一的PID。
  • USER:进程属于哪个用户。
  • %CPU:进程使用的 CPU 百分比。
  • TIME+:进程占用 CPU 的累计时间。
  • VIRT、RES、SHR:进程使用的虚拟内存、物理内存、共享内存。

查看系统整体情况

启动 top 后,你将看到一个实时更新的系统状态面板。按键盘上的 q 键可以退出 top

top

根据 CPU 使用率排序进程

按键盘上的 P 键,top 将按照 CPU 使用率高低排序进程。

top -o %CPU

定时刷新显示

使用 -d 选项可以设置 top 的刷新间隔,例如每3秒刷新一次。

top -d 3

查看特定用户的进程

通过 -u 选项,你可以查看特定用户的进程,例如 user1

top -u user1

使用 vmstat 命令

vmstat 是 Virtual Memory Statistics(虚拟内存统计)的缩写,它用于显示虚拟内存、进程、CPU等方面的统计信息。通过 vmstat,你可以查看系统的整体性能以及各个方面的详细数据。

在终端中输入以下命令启动 vmstat

vmstat

这将显示系统的虚拟内存、CPU、进程等信息,并实时更新。

vmstat 的输出包含多个字段,主要包括:

  • procs:显示进程统计信息。
  • memory:显示内存使用统计信息。
  • swap:显示交换空间使用统计信息。
  • io:显示 I/O 统计信息。
  • system:显示系统运行时间及一般性统计信息。
  • cpu:显示 CPU 使用统计信息。

查看系统整体情况

启动 vmstat 后,你将看到一个实时更新的系统状态面板。按键盘上的 q 键可以退出 vmstat

vmstat

设置刷新间隔

使用 -n 选项可以设置 vmstat 的刷新间隔,例如每3秒刷新一次。

vmstat -n 3

查看 CPU 使用率

vmstat 的输出中,cpu 行提供了 CPU 使用率的详细信息。例如,下面的输出表示 CPU 空闲率为96.3%:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 123456  78901  23456    0    0     0     0   12   34  1  2 96  0  0

查看 CPU 上下文切换和中断

vmstat 输出中,in 行表示每秒的上下文切换次数,cs 行表示每秒的中断次数。

vmstat -w

查看磁盘 I/O 统计

io 行提供了磁盘 I/O 的统计信息,包括每秒的读写次数。

vmstat -d

使用 sar 命令

sar 是 System Activity Reporter(系统活动报告)的缩写,它是 sysstat 工具包的一部分,用于收集和报告系统的性能数据,包括 CPU 使用率、内存使用率、磁盘 I/O 等。

在终端中输入以下命令启动 sar

sar

这将显示系统的平均负载、CPU 使用率等信息。

设置时间间隔和次数

使用 -u 选项可以指定 sar 报告 CPU 使用率,而 -n 选项可以设置报告的时间间隔和次数。例如,每隔2秒报告一次,共报告5次:

sar -u 2 5

查看 CPU 使用率历史数据

使用 sar 命令可以查看系统的 CPU 使用率历史数据。下面的命令将报告过去24小时内每隔10分钟的 CPU 使用率:

sar -u -s 00:00:00 -e 23:59:59 -i 600

输出到文件

你也可以将 sar 的输出保存到文件中,以便后续分析。例如,将 CPU 使用率报告保存到文件 cpu_usage.log

sar -u 2 5 > cpu_usage.log

使用 sar 的数据,你可以利用其他工具如 ksarsar2html 等,将性能数据图形化展示,更直观地观察趋势。

sar 收集的历史数据可以帮助你更深入地了解系统的性能特征,进行趋势分析和性能优化。

通过分析历史的 CPU 使用率数据,你可以识别高峰期、低谷期,并采取相应的措施进行性能优化。

sar 也可以报告磁盘 I/O 的性能数据,通过分析这些数据,你可以识别潜在的磁盘瓶颈。

使用 mpstat 命令

mpstat 是在多核 CPU 系统上运行的 sar 的一个前端工具,它提供了更详细的 CPU 使用率信息,包括每个 CPU 核心的利用率。

在终端中输入以下命令启动 mpstat

mpstat

这将显示每个 CPU 核心的使用率、上下文切换、中断等信息。

查看指定 CPU 核心

使用 -P 选项可以指定查看某个 CPU 核心的使用率。例如,查看第二个 CPU 核心的使用率:

mpstat -P 2

查看所有 CPU 核心的使用率

默认情况下,mpstat 将显示所有 CPU 核心的使用率。下面的命令将每隔2秒报告一次所有 CPU 核心的使用率:

mpstat 2

查看多个时间点的 CPU 使用率

使用 -I 选项可以设置报告的时间间隔和次数。例如,每隔5秒报告一次,共报告3次:

mpstat -I 5 3

结合 top 进行监控

mpstat 可以与 top 结合使用,实现对多核 CPU 的更全面监控。例如,使用以下命令:

mpstat -P ALL 2 | top

与前面的工具一样,mpstat 的输出也可以通过图形化工具进行更直观的展示和分析。

使用 perf 命令

perf 是 Linux 系统上的性能分析工具,它可以收集性能数据,并生成详细的报告,帮助你找到系统中的性能瓶颈。

在终端中输入以下命令启动 perf

perf

这将进入 perf 的交互式命令行界面。你可以通过输入不同的命令来执行各种性能分析任务。

收集性能数据

使用 perf record 命令可以开始收集性能数据。例如,收集一个命令的性能数据:

perf record command

生成报告

使用 perf report 命令可以生成性能报告,显示各种性能事件的统计信息。

perf report

收集 CPU 使用率数据

使用 perf 可以收集 CPU 使用率的详细数据,包括函数调用图、指令和缓存的分析等。

perf record -g -a sleep 10

查看调用图

使用 perf 查看函数调用图,以便深入了解代码执行路径。

perf report -g graph

使用 perf script

perf script 可以输出性能数据的脚本,以便进一步分析。

perf script

使用 perf annotate

perf annotate 可以在源代码中显示性能数据,帮助你找到瓶颈。

perf annotate -d /path/to/binary

使用 strace 命令

strace 是一个用于跟踪进程系统调用和信号的命令行工具。通过在程序执行期间截获和记录系统调用的信息,可以帮助你了解程序的运行情况,尤其是在寻找性能问题时非常有用。

在终端中输入以下命令启动 strace

strace command

这将输出程序的系统调用信息,并可帮助你分析程序的执行过程。

输出到文件

使用 -o 选项可以将 strace 的输出保存到文件中:

strace -o output.txt command

输出详细信息

使用 -v 选项可以输出更详细的信息,包括寄存器和内存的内容:

strace -v command

输出调用次数

使用 -c 选项可以统计系统调用的次数:

strace -c command

跟踪特定系统调用

使用 -e 选项可以指定要跟踪的系统调用:

strace -e trace=open,read command

跟踪子进程

使用 -f 选项可以跟踪子进程的系统调用:

strace -f command

结合 top 进行监控

strace 可以与 top 结合使用,实现对程序的更全面监控。

strace -c -p PID

结合 perf 进行性能分析

与前面的工具一样,strace 的输出也可以通过 perf 进行更深入的性能分析。

perf record -e syscalls:sys_enter_openat -g -p PID

总结

  • 实时监控: 使用 top 来实时查看系统资源的使用情况,特别是 CPU 和内存的使用率。
  • 历史数据分析: 使用 sar 定期收集系统性能数据,以便后续分析历史性能趋势。
  • 多核 CPU 监控: 使用 mpstat 来监控多核 CPU 的使用率,了解每个核心的性能状况。
  • 性能分析: 使用 perf 进行更深入的性能分析,包括函数调用图、指令和缓存的分析等。
  • 系统调用跟踪: 使用 strace 跟踪系统调用,解决程序执行中的异常情况。

建议的使用场景:

  • 系统监控: 使用 topvmstatsar 进行实时和历史性能监控,以便了解系统整体的健康状况。
  • CPU 瓶颈分析: 使用 mpstatperfstrace 进行更深入的 CPU 使用率分析,找出潜在的性能瓶颈。
  • 性能优化: 结合 perf 进行性能分析,找到性能瓶颈并进行优化,以提高系统性能。
  • 程序异常分析: 使用 strace 跟踪系统调用,解决程序执行过程中的异常问题,如卡顿、死锁等。

相关文章

  • 如何进行 Nginx HTTPS服务器搭建

    通过本文的介绍,我们详细了解了Nginx的listen指令,它用于配置服务器监听的端口和IP地址。我们学习了基本的语法结构、常见的示例和一些可选的参数。这些知识将帮助您更好地配置Nginx服务器,以满足您的需求。

  • 如何在 Nginx 中进行速率限制?

    http {server {# 其他配置...在这个例子中,当请求超过速率限制时,通过error_page指令将 503 错误映射到页面。这使得可以为用户提供更友好的自定义页面,以解释为什么请求被拒绝。在本文中,我们详细介绍了在 Nginx 中进行速率限制的方法。我们从基础开始,讨论了模块的使用以及指令的配置。随后,我们深入探讨了不同的速率限制策略,包括按 IP 进行限制、限制特定 URI 或请求类型,以及设定速率限制的阈值。在高级策略方面,我们讨论了如何使用。

  • 如何在 Linux 中安装 Fish Shell(带 Starship)?

    Fish Shell是一款现代的、用户友好的命令行 Shell,设计初衷是提供更好的用户体验和强大的功能。它采用友好的语法和强大的自动补全功能,使得命令行操作更加轻松愉快。Starship是一款轻量级的、快速的命令行提示符,它为Shell提供了一个漂亮、高度可定制的提示符。Starship的设计理念是简洁、高效,同时允许用户自由定制外观和显示的信息。Fish Shell允许你创建自定义提示符,包括颜色、图标、以及显示的信息。修改# 自定义提示符end。

  • 如何在 Ubuntu 22.04 上安装 Consul 服务器?

    通过这篇文章,你已经学会了在 Ubuntu 22.04 上安装 Consul 服务器的详细步骤,包括配置集群、服务发现、健康检查、安全性特性等方面。同时,你还了解了如何维护 Consul 和进行故障排除,以及一些进阶主题。Consul 是一个功能强大的工具,适用于构建可靠的微服务架构,希望这篇文章对你有帮助。

  • WebSocket原理详解

    我们知道TCP连接的两端,同一时间里双方都可以主动向对方发送数据。这就是所谓的全双工。而现在使用最广泛的HTTP1.1,也是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,这就是所谓的半双工。也就是说,好好的全双工TCP,被HTTP用成了半双工。为什么?这是由于HTTP协议设计之初,考虑的是看看网页文本的场景,能做到客户端发起请求再由服务器响应,就够了,根本就没考虑网页游戏这种,客户端和服务器之间都要互相主动发大量数据的场景。所以为了更好的支持这样的场景,我们需要另外一个。

  • 【Linux】信号保存与信号捕捉处理

    介绍信号的保存,理解信号在操作系统中的保存方式,理解系统中信号捕捉的处理过程以及介绍信号的其它知识!

  • Makefile 和 Bash 脚本之间区别和联系

    在 Makefile 中可以调 Bash 脚本,或在 Makefile 中直接写入 Bash 命令。这使得在构建过程中执行更复杂的任务成为可能。Makefile和Bash脚本由于它们的设计目标和用途不同,它们在基本结构、命令执行、通配符使用、错误处理等方面存在显著的差异。了解这些差异对于正确编写和理解Makefile和Bash脚本至关重要。Makefile主要用于编译和构建软件项目,而Bash脚本则更广泛地应用于系统管理和自动化任务。在实际工作中,两者可以结合使用,以创建一个完整、自动化的构建和部署。

  • DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

    DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基于容器安装方式,部署方便高效,浏览和维护docker单节点或集群节点worker和manager。DockerUI具有易于使用的界面。它不需要记住 docker 指令。只需下载镜像即可立即加入并完成部署。使用DockerUI并结合cpolar内网穿透可以更加轻松的管理docker和swarm,实现后台公网访问并管理,视觉性更加直观,后台开发更加便利。

  • 【Linux】linux自动化构建工具make/makefile

    是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。当对文件的内容做修改时,该文件的Modify和Change的时间都会被修改,所以当改变文件的属性时,修改时间发生了变化,再次make时,会比源文件的最近修改时间新。这里的mytest-d表示的是目标文件,test.c表示的是要编译的源文件,第二行则是编译指令。是一个命令,用来执行makefile里面编写的编译命令。

  • 解决VSCode使用Remote SSH连接远程服务器免密登陆

    这样我们就可以不必在文件夹中跳转一次次的重新输入密码了。真是美滋滋。过去日记。

  • 同样都是光纤接入设备,OLT和ONT到底有啥区别?

    你好,这里是网络技术联盟站,我是瑞哥。光纤通信系统在现代通信网络中扮演着至关重要的角色。为了实现高效、快速的光纤接入,OLT(Optical Line Terminal)和ONT(Optical Network Terminal)这两种关键设备发挥着不可替代的作用。本文将深入研究OLT和ONT之间的主要区别,解释它们各自的功能、硬件特点、通信协议以及应用场景。

  • 【Docker】linux、nginx、容器镜像三者基本概念

    由于在工作中接触到的都是windows操作系统,服务器也是,所以对于linux系统就比较陌生。对于windows操作系统,web服务器一般都是使用IIS。那对于linux系统,web服务器一般使用的是nginx。不同操作系统,web服务器自然不一样,但是目的都是一样的,都是为了渲染和呈现网站内容。因此,基本概念还是要了解一下。

  • 服务器与普通电脑的区别,普通电脑可以当作服务器用吗?

    服务器在我们日常应用中非常常见,手机APP、手机游戏、PC游戏、小程序、网站等等都需要部署在服务器上,为我们提供各种计算、应用服务。服务器也是计算机的一种,虽然内部结构相差不大,但是服务器的运行速度更快、负载更高、成本更高。服务器与普通电脑主要有哪些区别,让我们来看下吧!

  • git提交代码到远端仓库的方法详解

    自己学习到的git关联远端仓库的方法,希望可以帮到大家。

  • 高清网络视频监控系统技术方案

    随着数字技术、计算机技术和网络技术的发展,基于互联网的各种业务呈几何指数规律飞速增长,远程视频监控作为基于互联网的一种全新业务也得到了飞速的发展。高清网络摄像机IPC,高清硬盘录像机NVR/DVR等设备得到很大的发展。

  • 什么是BGP路由属性?BGP13条选路规则你还记得吗?

    BGP路由属性是一组参数,用于进一步描述特定路由的属性。这些属性的存在使得BGP能够根据网络的需求对路由进行精细的控制。在BGP的路由更新消息中,这些属性提供了丰富的信息,从而让网络管理员能够实施各种策略,例如负载均衡、路径选择和拓扑优化。公认必须遵循公认可选可选过渡可选非过渡BGP路由属性作为BGP协议的核心组成部分,在互联网路由中扮演着关键的角色。本文详细探讨了BGP路由属性的分类和功能,以及它们在网络设计和优化中的重要性。公认必须遵循属性。

  • IntelliJ IDEA如何使用固定地址公网远程访问本地Mysql数据库

    IDEA作为Java开发最主力的工具,在开发过程中需要经常用到数据库,如Mysql数据库,但是在IDEA中只能连接本地数据库,有时候需要访问其他地方如家里或者公司的数据库,将无法访问,内网的局限性导致我们只能在同一网络访问,无法跨网络访问,所以,本例将介绍如何在异地也可以实现远程连接本地的数据库,这里我们需要用到一个工具,叫Cpolar.隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网TCP协议的地址,该地址就是公网地址,我们可以在任何设备中的IDEA中都可以访问。

  • Inis博客系统本地部署结合内网穿透实现远程访问本地站点

    互联网技术总在不断进步,新技术和新软件也会来带更多功能,就以最常见的个人博客系统,也在不断推陈出新,发掘出更多功能和特色。从早期少量自定义和编辑功能,发展到现在的支持各种自定义模块和外观,以及更多更全的支持软件适配(包括php程序、数据库程序等)。今天,笔者就为大家介绍,如何在Ubuntu系统上部署新版Inis博客系统,并使用cpolar创建的内网穿透数据隧道,将Inis博客网站发布到公共互联网上。

  • 千兆网口、2.5G端口、5G端口有啥区别?如何选择?

    通过本文对千兆以太网、2.5G 以太网和5G 以太网的详细介绍,我们深入了解了它们的技术原理、优势、局限性以及在不同行业和应用场景中的应用。千兆以太网适用于一般用途,而2.5G网口和5G网口则更适用于对速度和性能有更高要求的专业场景。在做决策时,始终确保您的选择符合当前需求,并具备未来的可扩展性。

  • 文件传输协议:FTP、TFTP、SFTP和SCP

    你好,这里是网络技术联盟站。文件传输协议在计算机网络中扮演着关键的角色,为用户提供了在网络上共享和传输文件的标准化方式。本文将深入介绍四种常见的文件传输协议:FTP、TFTP、SFTP和SCP,探讨它们的工作原理、特点以及在不同场景下的应用。

  • 2024年了,Fedora和Ubuntu,哪个更适合工程师使用?

    在Fedora与Ubuntu的比较中,我们深入探讨了它们在安装和配置、桌面环境、软件包管理、系统更新与稳定性、社区支持、性能、安全性、容器化支持、桌面用户体验、开发者工具、虚拟化支持、硬件兼容性、多版本支持、跨平台支持等方面的差异。最终,选择Fedora还是Ubuntu取决于您的个人需求和偏好。如果您是一个追求最新技术和功能的开发者,喜欢滚动更新的模式,那么Fedora可能更适合您。如果您更注重系统的稳定性,希望在长期内获得支持,并且对桌面和服务器环境都有需求,那么Ubuntu可能更符合您的期望。

  • 如何强制Linux用户在下次登录时更改密码?

    在Linux系统中,用户账户的密码信息存储在和文件中。其中,文件包含用户的基本信息,而文件包含用户的加密密码以及与密码相关的设置。PAM模块允许管理员定义在用户登录、更改密码等操作时执行的任务。在密码管理方面,我们关注的是模块。本文介绍了如何强制Linux用户在下次登录时更改密码,并详细讨论了密码管理的各个方面。通过配置密码过期策略、使用PAM模块增加密码复杂性要求、设置强制密码更改通知、批量更改用户密码以及自动化密码更改过程,管理员可以提高系统的安全性,降低密码被滥用的风险。

  • 计算机网络中,距离矢量协议和链路状态协议到底有啥区别?

    距离矢量协议和链路状态协议都在不同的情境下展现出各自的优势和劣势。在选择使用哪种协议时,需要考虑网络的规模、带宽利用率、安全性需求等因素。对于小型网络或对带宽敏感的场景,距离矢量协议可能更为合适。而在大型网络、需要更好安全性和更快收敛速度的情况下,链路状态协议可能更具优势。在实际应用中,有时候也会采用混合使用这两种协议的方式,以充分发挥它们各自的优势,提高网络的性能和可靠性。这使得在不同的网络环境中选择合适的路由协议成为一个复杂而重要的决策。境中的优劣势。

  • SCCP 和 MTP3 之间有啥区别?

    通过详细介绍 SCCP 和 MTP3,以及它们之间的比较和协同工作,我们深入了解了它们在信令传输协议栈中的角色和功能。在设计和管理电信网络时,对 SCCP 和 MTP3 的理解是至关重要的,因为它们直接影响信令的可靠性、灵活性和性能。这样的理解有助于工程师和网络管理员更好地优化网络配置,确保通信系统的稳定运行。

  • 什么是虚拟路由器?与传统物理路由器有啥区别?

    虚拟路由器(Virtual Router)是一种软件功能,它在x86服务器硬件上以虚拟机实例的形式部署,提供基于云的网络服务。运行在虚拟化平台上的虚拟路由器承担着多种功能,包括路由、交换、安全和VPN等。通过这种虚拟化的方式,用户可以在云环境中便捷地配置和管理网络,实现高度灵活性和可定制性,为用户提供了强大的网络通信服务。虚拟机技术是虚拟路由器中常用的虚拟化手段之一。通过使用虚拟机管理程序(如VMware、KVM等),虚拟路由器可以在一台物理服务器上同时运行多个虚拟实例。

  • 网络安全之道:DMZ与端口转发有啥区别?

    通过本文的介绍,我们深入了解了DMZ和端口转发这两个网络安全和应用配置中的重要概念。DMZ在网络中扮演了重要的缓冲带角色,既确保了对外服务的可用性,又有效地隔离了来自外部的潜在威胁。端口转发通过设置网络设备的规则,将外部网络的请求定向到内部网络的特定主机或服务。这一技术为远程访问、个人服务器搭建等提供了便利。结合DMZ和端口转发,可以实现更灵活的网络架构。DMZ中部署公共服务,通过端口转发映射外部请求,不仅提高了网络的可用性,也增强了网络的安全性。

  • 一文带你全方位了解 Shell 脚本,给力!

    使用等号(=)给变量赋值,并通过美元符号($)引用变量的值。# 变量的定义和使用通过本文的学习,您已经了解了如何为 Linux 命令创建脚本的基础知识和高级技巧。Shell 脚本是一种强大的工具,通过结合 Linux 命令和脚本编程,您可以实现自动化任务、系统管理以及日志分析等各种功能。深入学习和实践将使您成为一个熟练的脚本程序员,能够更高效地处理各种任务。