我正在运行一个软件,在它运行时,我想知道它占用了多少 CPU 使用率或 RAM……以及其他可能有趣的事情。为此,我需要确切地知道诸如 、 等词的含义。VIRT
我SHR
试图N
在 Google 上找到它,但没有找到。有人可以指导我找到一个可以详细阅读这些命令的来源top
吗?
此外,根据我的理解,%CPU
显示 CPU 使用率并%MEM
显示正在使用的 RAM 百分比。对吗?
另外,我不知道为什么会有 3-4 个用户同时使用 100% 的 CPU,有时甚至有人使用 400%。这是什么意思?
答案1
以下是示例输出top
:
top - 14:21:40 up 7 days, 21:57, 7 users, load average: 0.13, 0.04, 0.04
Tasks: 107 total, 2 running, 105 sleeping, 0 stopped, 0 zombie
Cpu0 : 1.0% us, 1.0% sy, 0.0% ni, 96.1% id, 1.9% wa, 0.0% hi, 0.0% si
Cpu1 : 1.0% us, 1.0% sy, 0.0% ni, 98.0% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 2050756k total, 2034236k used, 16520k free, 22252k buffers
Swap: 2097144k total, 87108k used, 2010036k free, 1609212k cached
- 第一行很容易解释,只是为什么有三个不同的负载平均值并不明显:这些值使用三个不同的时间尺度。
- 第二行:任务摘要,按状态分组
CPU 线路有两种模式,
Cpu(s): 1.0% us, 0.5% sy, 0.0% ni, 98.5% id, 0.0% wa, 0.0% hi, 0.0% si
其中所有 CPU 核心都汇总在一起,或者像上例中那样,每个核心都有自己的一行。您可以使用 在这些模式之间切换1。每个核心都可以 100% 使用,因此如果有两个核心,全部的最大值是200%。
以下列表中的两个字母缩写以粗体显示(c&p 来自较早的答案):
- 我们er:在用户模式下执行的正常进程
- 你ce:在用户模式下执行的 niced 进程
- 西stem:在内核模式下执行的进程
- ID无所事事
- io哇它:等待 I/O 完成
- irq:服务中断[硬中断你好]
- softirq: 服务软中断 [软中断锡]
- 英石eal:非自愿等待
Mem 和 Swap 分别用于物理 RAM 和交换空间。
进程列表在 top 的 man 页中有详细说明(2a. 字段描述)。由于您的手册页似乎不完整,下面是摘录;还有完整的副本互联网上的手册页。默认情况下显示这些列(使用 自定义f):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
回答您关于 CPU 使用率的具体问题:如果一个进程并行运行,即可以使用多个 CPU 核心,则 400% 的使用率表示 4 个核心已被完全使用。
PID -- 进程 ID:任务的唯一进程 ID,它会定期包装,但不会从零重新启动。
局部局部性病变 -- 父进程 Pid:任务父进程的进程 ID。
鲁用户 -- 真实用户名:任务所有者的真实用户名。
唯一标识 -- 用户 ID:任务所有者的有效用户 ID。Blockquote
用户 -- 用户名:任务所有者的有效用户名。
团体 -- 群组名称:任务拥有者的有效群组名称。
终端电话 -- 控制 Tty:控制终端的名称。这通常是启动进程的设备(串行端口、pty 等),并用于输入或输出。但是,任务不需要与终端相关联,在这种情况下,您将看到显示的“?”。
公共关系 -- 优先级:任务的优先级。
你 -- Nice 值:任务的 Nice 值。负的 Nice 值表示优先级较高,而正的 Nice 值表示优先级较低。此字段为零仅表示在确定任务的可调度性时不会调整优先级。
磷 -- 最后使用的 CPU (SMP):表示最后使用的处理器的数字。在真正的 SMP 环境中,此数字可能会频繁更改,因为内核有意使用弱亲和性。此外,运行 top 的行为本身可能会破坏这种弱亲和性,并导致更多进程更频繁地更改 CPU(因为对 CPU 时间有额外的需求)。
%中央处理器 -- CPU 使用率:自上次屏幕更新以来,任务所占的 CPU 时间份额,以占总 CPU 时间的百分比表示。在真正的 SMP 环境中,如果“Irix 模式”关闭,top 将以“Solaris 模式”运行,其中任务的 CPU 使用率将除以 CPU 总数。您可以使用“I”交互命令切换“Irix/Solaris”模式。
时间 -- CPU 时间:任务自启动以来使用的总 CPU 时间。当“累积模式”处于开启状态时,每个进程及其已死亡子进程使用的 CPU 时间都会列出。您可以使用“S”切换“累积模式”,这是一个命令行选项和交互式命令。有关此模式的更多信息,请参阅“S”交互式命令。
时间+ -- CPU 时间,百分之一:与“TIME”相同,但通过百分之一秒反映更多的粒度。
%内存 -- 内存使用情况 (RES):任务当前使用的可用物理内存份额。
虚拟仿真测试系统 -- 虚拟映像 (kb):任务使用的虚拟内存总量。它包括所有代码、数据和共享库以及已换出的页面。
VIRT = SWAP + RES
交换 -- 交换大小(kb):任务的总虚拟内存映像的换出部分。
可再生能源 -- 驻留大小(kb):任务已使用的非交换物理内存。
RES = CODE + DATA
代码 -- 代码大小(kb):用于可执行代码的物理内存量,也称为“文本驻留集”大小或 TRS。
数据 -- 数据+堆栈大小(kb):用于除可执行代码以外的物理内存量,也称为“数据驻留集”大小或 DRS。
自发性高血压 -- 共享内存大小 (kb):任务使用的共享内存量。它只是反映可能与其他进程共享的内存。
正常FLT -- 页面错误计数:任务中发生的重大页面错误数。当进程尝试读取或写入当前不存在于其地址空间中的虚拟页面时,就会发生页面错误。重大页面错误是指在使该页面可用时需要访问磁盘。
抗逆转录病毒 -- 脏页数:自上次写入磁盘以来被修改过的页面数。必须先将脏页写入磁盘,然后相应的物理内存位置才可用于其他虚拟页。
年代 -- 进程状态任务的状态可以是以下之一: 德= 不间断睡眠, R= 跑步, 年代=睡觉, 电视= 被追踪或被停止, 是= 僵尸。显示为正在运行的任务更应该被认为是“准备运行”——它们的 task_struct 只是在 Linux 运行队列中表示。即使没有真正的 SMP 机器,您也可能会看到许多处于此状态的任务,具体取决于 top 的延迟间隔和 nice 值。
命令 -- 命令行或程序名称:显示用于启动任务的命令行或相关程序的名称。您可以使用“c”在命令行和名称之间切换,这既是命令行选项,也是交互式命令。当您选择显示命令行时,没有命令行的进程(如内核线程)将只显示括号中的程序名称,如以下示例所示:(mdrecoveryd)如果显示太长而无法容纳在此字段的当前宽度中,则任何形式的显示都可能被截断。该宽度取决于所选的其他字段、它们的顺序和当前屏幕宽度。 笔记:“命令”字段/列是独一无二的,因为它不是固定宽度的。显示时,此列将分配所有剩余的屏幕宽度(最多 512 个字符),以适应程序名称在命令行中的潜在增长。
西哈努克市 -- 休眠函数:根据内核链接图 ('System.map') 的可用性,此字段将显示任务当前休眠的内核函数的名称或地址。正在运行的任务将在此列中显示破折号 ('-')。 笔记:通过显示此字段,top 自己的工作集将增加超过 700Kb。减少该开销的唯一方法是停止并重新启动 top。
标志 -- 任务标志:此列表示任务的当前调度标志,以十六进制表示法表示,并隐藏零。这些标志在 中有正式记录。在“字段选择”和“排序字段”屏幕上也可以找到不太正式的文档。