首页 > 系统相关 >Linux Top 命令计算进程CPU使用率

Linux Top 命令计算进程CPU使用率

时间:2024-11-08 23:42:34浏览次数:1  
标签:Top top CPU Linux 进程 使用率 proc cpu

Linux Top 命令计算进程CPU使用率


 

top 命令是一个实时进程监控工具,在 Linux 中通过读取系统文件(尤其是 /proc 文件系统)来获取进程的 CPU 使用率。其实现中关键的部分是对进程的 CPU 使用率进行采集和计算。这里我简要介绍 top 命令的实现思路,以及它如何通过源码计算进程的 CPU 使用率。

top 命令的源码最初是用 C 语言编写的,通常可以在 procps 项目中找到其源码(例如 procps-ng 项目)。以下是 top 计算进程 CPU 使用率的主要步骤和原理:

1. 数据获取

top/proc/stat/proc/[pid]/stat 文件中获取 CPU 使用数据:

  • 系统级 CPU 数据/proc/stat):

    • /proc/stat 文件包含系统总的 CPU 使用时间。第一行 cpu 后面跟着的数值代表了 CPU 在不同状态下的时间(如用户态、内核态、空闲等)。
    • 每个数字的单位是 “jiffies” (时间片),这是系统中断的最小时间单位。
  • 进程级 CPU 数据/proc/[pid]/stat):

    • 每个进程的状态文件 /proc/[pid]/stat 包含了该进程的 CPU 使用信息,包括用户态时间 (utime)、内核态时间 (stime)、子进程的用户态时间 (cutime)、子进程的内核态时间 (cstime)。
    • 这些数据同样以 jiffies 为单位。

2. CPU 使用率的计算步骤

top 通过周期性读取和比较前后两次的数据差值来计算 CPU 使用率。其计算流程如下:

  1. 采样初始时间点

    • 读取系统级别和进程级别的 CPU 数据,得到初始的 total_cpu_timeprocess_cpu_time
    • 其中,total_cpu_time 是所有 CPU 核心的总时间,包括用户态、内核态和空闲时间的总和。
    • process_cpu_time 是某个进程的总时间(包含 utimestimecutimecstime 的和)。
  2. 采样第二时间点(经过一个刷新周期,例如 1 秒):

    • 再次读取 /proc/stat/proc/[pid]/stat 中的数据,得到新的 total_cpu_timeprocess_cpu_time
  3. 计算差值

    • total_delta = total_cpu_time(T2) - total_cpu_time(T1)
    • process_delta = process_cpu_time(T2) - process_cpu_time(T1)
  4. 计算 CPU 使用率

    • 使用以下公式计算进程的 CPU 使用率:

      CPU 使用率(%)= (process_delta / total_delta)×100

  • 如果系统是多核,则再乘以 CPU 核数,使得 CPU 使用率可以反映在多核环境下的真实使用量。

在实际的 top 源码中,数据采集和计算更加复杂,包含:

  • 多核的支持,计算时乘以核心数。
  • 进程的调度优先级和 nice 值的影响。
  • 不同类型的时间(用户态、系统态等)的具体占比等。

4. 关键源码实现位置

procps-ngtop 源码中:

  • linux/Display.c:包含了主要的数据读取和显示逻辑。
  • proc/readproc.c:实现了对 /proc 文件系统的解析,用于读取 CPU 和进程的状态信息。

总结

top 命令使用两个时间点的系统和进程 CPU 时间差值来计算进程的 CPU 使用率。这种方法避免了直接采样瞬时数据的误差,提供了相对准确的 CPU 使用率。在多核系统中,CPU 使用率可以超过 100%,并且 top 会根据各核心的总和来进行计算。

 

参考:https://www.cnblogs.com/gufengchen/p/11335300.html

标签:Top,top,CPU,Linux,进程,使用率,proc,cpu
From: https://www.cnblogs.com/miracle-luna/p/18536127

相关文章

  • 服务器CPU是多核的情况下,Linux Top 命令计算进程CPU使用率为什么要乘以CPU逻辑核数
    服务器CPU是多核的情况下,LinuxTop命令计算进程CPU使用率为什么要乘以CPU逻辑核数  在多核服务器上,top命令计算进程的CPU使用率时,乘以的是CPU的逻辑核数(LogicalCPUs),而不是物理核数。逻辑核数与物理核数的区别物理核数:指物理CPU中实际存在的核心数量。例如,如果......
  • Linux下含有中文日志输出到终端显示不出来
    问题描述:今天遇到一个中文日志输出到终端显示不出来的问题。用户要升级操作系统,由redhat7.9升级到redhat8.6,x86_64的环境。升级完后,交易服务端程序启动过程中,预期是会在终端输出一些标准输出或标准错误的日志信息,用于提示服务端程序启动过程中的状态,日志信息中包含中文字......
  • Linux基础练习题
    1、截取登录成功界面2、进入用户主目录后切换root用户suroot//输入管理员密码切换到root用户3、在该目录下新建名为teacher和students的文件夹mkdirteacherstudents//使用mkdir创建文件夹ls-a/home/roots//ls-a用于查看是否创建成功4、在teache......
  • Linux基础(2)
    学习地点(泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频(bilibili.com))LInux目录介绍   Linux常见目录及作用        /:操作系统的根路径      /bin:存储二进制可执行目录,普通用户和管理员都可以执行的命令      /etc:系统管理和配置文件......
  • Linux磁盘存储
    磁盘存储设备文件设备文件是类Unix操作系统(包括Linux)中一种特殊的文件类型,它代表了设备接口,使得用户空间的程序可以通过标准的文件操作来访问和控制硬件设备。设备文件为周边设备提供了简单的接口,如打印机、硬盘等,也可以访问没有连接到任何真实设备的系统资源,如随机数生成......
  • linux文件系统挂载
    文件系统文件系统基础定位文件系统是对文件存储设备的空间进行组织和分配组成用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfatlinux的虚拟文件系统:vfs内核的模块:ext4,xfs,vfat信息查看内核支持的文件系统/lib/modules/$(uname-r)/kernel/fs可用的文件系统cat......
  • linux基础——详细篇
    免责声明学习视频来自B站up主泷羽sec,如涉及侵权马上删除文章。笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。linux基础命令重现cd(切换目录)ls(展示所有目录)clear(清屏)——不好截图,不做演示pwd......
  • linux基础命令
    本文来自泷羽sec-哔哩哔哩_bilibili查看权限:ls-la/etc/passwd-rw-r--r--:表示文件的权限。第一个字符 -:表示这是一个普通文件(如果是目录则会显示为d)。接下来的三个字符 rw-:表示文件拥有者(在这里是root)的权限,表示可读(r)和可写(w),但不可执行(-)。再接下来的三个字符 r--:表示与......
  • 【linux内核】 BCC Tools命令汇总
    什么是BCCTools直接通过BPF指令编写BPF程序是非常繁琐的事情,尤其对于运维人员来说,花70%的时间来编写一个BPF程序来实现一个检查点,不如花70%的时间来熟悉别人已经写好的BPF程序,并且把别人的BPF程序有效的串联起来形成自己分析问题的套路,等有了闲暇时间再去尝试突破自己,写一些现......
  • Linux上的各种查询
    在Linux中,有许多命令可以用于查询系统信息、文件和进程等。以下是一些常用的查询命令及其简要介绍:ls:用途:列出目录中的文件和子目录。示例:ls-l(以详细格式显示)或ls-a(包括隐藏文件)。pwd:用途:显示当前工作目录的完整路径。示例:只需输入pwd。cd:用途:更改当前工作目......