atop - 参考手册、选项、命令示例


姓名

atop - 先进的系统和过程监控

概要

atop -B[H] [interval [samples]]
atop [-g|-m|-d|-n|-u|-p|-s|-c|-v|-o|-y|-Y] [-C|-M|-D|-N|-A] [-fFG1xR] [interval [samples]]
atop [-Plabel[,label]... [-Z]] [-Jlabel[,label]...] [interval [samples]]
atop -w rawfile [-a] [-S] [interval [samples]]
atop -B[H]r [rawfile|yyy...] [-b [YYYYMMDD]hhmm] [-e [YYYYMMDD]hhmm]
atop -r [rawfile|yyy...] [-b [YYYYMMDD]hhmm] [-e [YYYYMMDD]hhmm] [-g|-m|-d|-n|-u|-p|-s|-c|-v|-o|-y|-Y] [-C|-M|-D|-N|-A] [-fFG1xR]
atop -r [rawfile|yyy...] [-b [YYYYMMDD]hhmm] [-e [YYYYMMDD]hhmm] [-Plabel[,label]... [-Z]] [-Jlabel[,label]...]

描述

程序atop是一个交互式监视器,用于查看Linux系统上的负载。每间隔秒(默认:10秒)收集有关最关键硬件资源(从性能角度来看)的系统级别资源占用情况的信息,即CPU、内存、磁盘和网络接口。此外,还会收集有关负责 CPU、内存和磁盘利用率的进程(或线程)的信息。仅当安装了netatop内核模块时,才会显示每个进程的网络负载。

条形图模式

运行atop时,您可以选择以条形图模式或文本模式查看系统负载。在条形图模式下,CPU、内存、磁盘和网络接口的资源利用率通过(基于字符的)条形图显示,但仅在系统级别显示。当您想查看系统级别的更详细信息或想查看进程或线程级别的资源消耗时,可以通过按“B”键切换到文本模式。或者,您可以再次使用“B”键从文本模式切换到条形图模式。
默认情况下,atop 以文本模式启动,除非使用 -B 标志,或者除非已在 .atoprc 中将“B”配置为默认标志 文件(有关默认标志的更多信息,请参阅 atoprc 手册页)。

在条形图模式下,终端将分为四个基于字符的窗口,即每个硬件资源一个窗口:

Processors

第一个条显示所有 CPU 的平均繁忙百分比,条形标签为“Avg”(可能缩写为“Av”,甚至只是“A”)。后续条形显示单个 CPU 的繁忙百分比。
当没有足够的水平空间来显示所有 CPU 时,在每个条形的宽度减小到最小后,只会显示每个样本最繁忙的 CPU。

默认情况下,CPU 消耗的类别在条形中以不同颜色显示,并标有字符“S”(系统模式)、“U”(用户模式)、“I”(中断处理)、“s”(窃取) )和“G”(来宾,即由虚拟机消耗)。
条形的顶部可能由代表“中性”类别的未标记颜色组成。假设规模单位为每行 5%,总繁忙百分比为 54%,由两类 27% 组成。这两个类别将四舍五入到 25%(5 行,每行 5%),但总繁忙百分比将四舍五入到 55%(11 行,每行 5%)。那么顶线将代表“中性”类别。
通过按“H”键或使用“-H”标志在顶部启动,不会显示任何类别。

条形图中绘制的红线作为临界阈值。默认情况下,该值为 90%,可以通过配置文件中的“cpucritperc”选项进行修改(请参阅单独的 atoprc 手册页)。当该值设置为零时,不会绘制阈值线。

Memory and swap space

内存以一列的形式呈现,其中显示了内存消耗的特定类别。这些类别是(代码、数据和堆栈)进程/内核、slab 缓存(即动态分配的内核内存)、共享内存、tmpfs、页面缓存和可用内存。
交换空间(如果存在)也显示为一列,其中显示类别进程/tmpfs、共享内存和可用空间。右侧显示与内存相关的事件计数器。
当没有内存压力时,底部三个计数器显示为绿色。当注意到相当多的活动时,此类计数器可能会呈橙色,并且高活动度会呈红色。
当内存压力开始时,通常会首先激活内存页面扫描。当压力增加时,进程的内存页面可能会被交换到交换空间(如果存在)。
“oomkills”计数器(内存不足杀死)是最严重的:它反映了由于内存不足(和交换)而被杀死的进程数量。因此,此计数器显示在最后一个时间间隔内被终止的进程的绝对数量(不是每秒),并且当它为 1 或更多时,将立即着色为红色。此外,在atop注意到OOM杀死之后,“oomkills”计数器在接下来的15分钟内保持橙色,以防万一您错过了OOM杀死事件本身。
当内存窗口中有足够的垂直空间时,事件计数器会显示有关正在换入的内存页数、调出到块设备的内存页数以及从块设备调入的内存页数的事件计数器。

内存和交换空间消耗最好显示在基于字符的窗口中,该窗口垂直使用整个屏幕以获得最佳粒度。但是,当有大量磁盘和/或网络接口时,内存和交换空间消耗将显示在仅使用屏幕上半部分的基于字符的窗口中。

Disks

对于每个磁盘,繁忙百分比显示为条形。
当没有足够的水平空间来显示所有磁盘时,将仅显示每个样本最繁忙的磁盘。

默认情况下,磁盘消耗的类别在条形中以不同颜色显示,并用字符“R”(读取)和“W”(写入)标记。
条形的顶部可能由代表“中性”类别的未标记颜色组成。假设规模单位为每行 5%,总繁忙百分比为 54%,由两类 27% 组成。这两个类别将四舍五入到 25%(5 行,每行 5%),但总繁忙百分比将四舍五入到 55%(11 行,每行 5%)。那么顶线将代表“中性”类别。
通过按“H”键或使用“-H”标志在顶部启动,不会显示任何类别。

条形图中绘制的红线作为临界阈值。默认情况下,该值为 90%,可以通过配置文件中的“dskcritperc”选项进行修改(请参阅单独的 atoprc 手册页)。当该值设置为零时,不会绘制阈值线。

Interfaces

对于每个非虚拟网络接口,都会显示一个双条形图,并带有反映流量速率的专用比例。其中一个条显示传输速率(“TX”),另一条显示接收速率(“RX”)。各网络接口的流量规模保持在最高水平。所有界面刻度均可在测量过程中按“L”键重置。大多数情况下,网络接口的实际速度(最大带宽)是未知的,例如对于虚拟机的网络接口。因此,无法以百分比形式显示接口利用率。但是,当知道接口的实际速度时,它将显示在相关条形图下方。当没有足够的水平空间来显示所有网络接口时,只会显示每个样本最繁忙的接口。

通常,当有足够的水平空间时,条形图不会按繁忙百分比排序。但是,从文本模式切换到条形图模式后,条形图可能已排序,因为这是在文本模式下演示所需要的。条形图模式中的下一个间隔将再次显示未排序的条形,除非窗口宽度不足以容纳所有条形。

本手册页的其余部分主要描述以文本模式显示的信息。当某些描述也适用于条形图模式时,将明确提及。

文本模式概述

文本模式下的初始屏幕显示atop是否以受限视图(非特权用户)或不受限视图(特权用户)运行。如果视图受限,atop 没有权限(没有 root 身份,也没有必要的功能)来检索系统级别和进程级别的所有计数器值。

每个时间间隔都会显示有关系统级别资源占用(CPU、内存、磁盘和网络层)的信息,然后是上一个时间间隔期间处于活动状态的进程列表。请注意,不会显示在最后一个时间间隔内未更改的所有进程,除非已按下“a”键或完成了内存占用排序(然后非活动进程也相关)。如果活动进程列表不能完全显示在屏幕上,则仅显示列表顶部(按活动顺序排序)。
重复间隔,直到达到样本数(指定为命令参数),或者直到在交互模式下按下“q”键。

当atop启动时,它会检查标准输出通道是否连接到屏幕或文件/管道。在第一种情况下,它生成屏幕控制代码(通过 ncurses 库)并交互运行;在第二种情况下,它会产生平面文本输出。

在交互模式下,atop 的输出会动态缩放到屏幕/窗口的当前尺寸。
如果水平调整窗口大小,将自动添加或删除列。为此,每列都有特定的权重。将显示适合当前宽度的具有最高权重的列。
如果垂直调整窗口大小,进程/线程列表的行将自动添加或删除。

在交互模式下,可以通过按特定键来控制atop的输出。然而,也可以在命令行上指定诸如 flag 这样的键。在这种情况下,atop 会预先切换到指定的模式。该模式可以再次交互修改。当运行 atop 并将输出输出到管道或文件(非交互方式)时,将此类键指定为 flag 特别有用。这些标志与交互模式下可以按下的键相同(请参阅交互命令部分)。
其他标志可用于支持原始格式的 atop 数据存储(请参阅原始数据存储部分)。

流程会计

在每个时间间隔,atop 都会读取内核管理以获取有关所有正在运行的进程的信息。但是,进程很可能在该时间间隔期间终止。这些进程在终止之前可能已在此时间间隔内消耗了系统资源。因此,atop尝试读取包含已终止进程的记帐信息的进程记帐记录并报告这些进程。只有当内核中的进程记帐机制被激活时,内核才会为每个终止的进程将这样的进程记帐记录写入文件中。

atop 有多种方法可以访问流程记帐记录(按此顺序尝试):

1.

当设置环境变量 ATOPACCT 时,它指定进程记帐文件的名称。在这种情况下,应该事先激活该文件的进程记帐。在打开此文件进行读取之前,atop 会删除其 root 权限(如果有)。
当此环境变量存在但其内容为空时,根本不会使用进程记帐。

2.

这是处理流程会计记录的首选方式!
当atopacctd守护进程处于活动状态时,它会激活内核中的进程记帐机制,并将原始记帐记录传输到影子文件中。在这种情况下,atop 会放弃其 root 权限并打开当前的影子文件进行读取。
这种方式是首选方式,因为 atopacctd 守护进程保持对内核写入的原始进程记帐文件的大小以及 atop 进程读取的影子文件的大小(es )。

atopacct 服务将在 atop 服务之前激活,以使 atop 能够检测到进程记帐是由 atopacctd 管理的> 守护进程。作为一个分叉服务,atopacctd 负责在父进程终止之前初始化所有目录和文件。子进程继续作为守护进程。

有关详细信息,请参阅 atopacctd 手册页。

3.

当 atopacctd 守护进程未激活时,atop 验证是否已通过单独的 psacct 或 acct 打开进程记帐机制 package(包名称取决于 Linux 发行版)。在这种情况下,文件之一 /var/log/pacct、 /var/account/pacct 或 /var/log/account/pacct > 正在用作进程记帐文件,atop 打开此文件进行读取。

4.

作为最后一种可能性,atop 本身尝试使用文件 /var/cache/atop.d/atop.acct 激活进程记帐机制(需要 root 权限)(以由内核写入,由atop本身读取)。只要至少有一个atop进程处于活动状态,进程记帐就会保持活动状态。每当最后一个atop进程停止时(通过按“q”或“kill -15”),它会再次停用进程记帐机制。因此,您永远不应该通过“kill -9”终止atop,因为这样它就没有机会停止进程记帐。结果,记账文件在一段时间后可能会消耗大量磁盘空间。
为了避免进程记帐文件消耗过多的磁盘空间,atop 在每个示例结束时验证进程记帐文件的大小是否超过 200 MiB,并且该 atop进程是当前唯一正在使用该文件的进程。在这种情况下,文件的大小将被截断为零。

请注意,需要 root 权限才能打开/关闭内核中的进程记帐。您可以以 root 用户身份启动,或者为可执行文件指定 setuid-root 权限。在后一种情况下,atop 打开进程记帐并再次删除 root 权限。
如果atop不以root权限运行,则它不会显示有关已完成进程的信息。它通过右上角的消息“no procacct”(而不是显示退出进程数的计数器)来指示这种情况。

当在一个时间间隔内完成许多进程时,在该时间间隔结束时读取所有进程记帐记录时,atop 可能会在内存中大幅增长。为了避免这种过度增长,atop 绝不会在每个时间间隔从进程记帐文件中读取超过 50 MiB 的进程信息(大约 54000 个已完成的进程)。在交互模式下,只要进程因此被跳过,就会发出警告。

颜色

对于系统级别的资源消耗,atop使用文本模式的颜色来表示已经(几乎)达到了临界占用百分比。临界占用百分比意味着该负载可能会对使用该资源的应用程序造成明显的负面性能影响。临界百分比取决于资源类型:例如对于应用程序/用户来说,繁忙百分比为 80% 的磁盘对性能的影响可能比繁忙百分比为 90% 的 CPU 更明显。
目前,atop 使用以下默认值来计算每个资源的加权百分比:

Processor

90% 或更高的繁忙百分比被认为是“关键”(在条形图模式下也是如此)。

Disk

90% 或更高的繁忙百分比被认为是“关键”。

Network

接口负载的繁忙百分比为 90% 或更高被认为是“关键”。

Memory

90% 的占用率被认为是“关键”。注意,这个占用百分比是内核(包括slab)和所有进程的累计内存消耗。页面缓存(MEM 行中的“cache”和“buff”)和平板的可回收部分(“slrec”)的内存并不隐含!
如果换出的页数(PAG 行中的“swout”)大于每秒 10 个,则内存资源被视为“关键”。每秒至少 1 次的值被视为“几乎关键”。
如果提交的虚拟内存超过限制(SWP 行中的“vmcom”和“vmlim”),则 SWP 行会因系统过度使用而显示颜色。

Swap

80% 的占用百分比被认为是“关键”,因为交换空间可能在不久的将来完全耗尽。从性能的角度来看,这并不重要。

这些默认值可以在配置文件中修改(请参阅单独的 atoprc 手册页)。

当资源超过其临界占用百分比时,屏幕行中的相关值默认显示为红色。
当资源超过(默认)其关键百分比的 80%(因此几乎是关键)时,屏幕行中的相关值默认为青色。这个“几乎关键的百分比”(所有资源都有一个值)也可以在配置文件中修改(请参阅单独的 atoprc 手册页)。
默认颜色红色和青色也可以在配置文件中修改(请参阅单独的 atoprc 手册页)。

使用键“x”(或标志 -x),可以在文本模式下抑制颜色的使用。然而,在条形图模式下,颜色的使用是强制性的。

网络拓扑模块

每个进程和每个线程的网络活动可以通过netatop内核模块来测量。您可以从网站(在本手册页末尾提到)下载此内核模块并将其安装在您的系统上。
当atop收集新间隔的计数器时,它会验证netatop模块当前是否处于活动状态。如果是这样,atop从此模块获取相关网络计数器,并在通用屏幕中显示每个进程/线程发送和接收的数据包数量。此外,可以通过按“n”键来请求详细计数器。
当 netatopd 守护进程也在运行时,atop 还会读取该守护进程记录的已退出进程的网络计数器(与进程记帐类似)。

有关可选 netatop 内核模块和 netatopd 守护进程的更多信息可以在相关手册页以及本手册页末尾提到的网站上找到。

GPU 统计数据收集

GPU 统计信息可以通过 atopgpud 来收集,这是一个单独的数据收集守护进程。它收集系统中每个 Nvidia GPU 的累积利用率计数器,以及使用 GPU 的每个进程的利用率计数器。当atop注意到守护进程处于活动状态时,它会在每个时间间隔读取这些 GPU 使用计数器。

atopgpud 守护进程是用 Python 编写的,因此应该在目标系统上安装 Python 解释器。为了收集统计信息,守护进程使用 pynvml 模块。在激活守护进程之前,通过以 root 用户身份运行命令 pip 来确保该模块已安装在目标系统上:

pip install nvidia-ml-py

atopgpud 守护进程默认安装为 atop 软件包的一部分,但它不会自动启用。现在可以通过运行以下命令(以 root 身份)来启用和启动守护进程:

systemctl启用atopgpu
systemctl start atopgpu

在“输出描述”部分中查找有关利用率计数器的描述。

交互式命令

当交互运行atop时(无输出重定向),可以按键来控制输出。一般来说,小写键可用于显示活动进程的其他信息,而某些大写键可用于影响活动进程/线程列表的排序顺序。其中一些键还可用于从条形图模式切换到文本模式下的特定详细过程信息。

g

显示通用输出(默认)。

在窗口宽度为 80 个位置的情况下,每个进程显示以下字段:进程 ID、系统和用户模式下最后一个时间间隔的 CPU 消耗、进程的虚拟内存和常驻内存增长。
仅当 atop 以 root 权限运行时,才能显示每个进程在磁盘上读/写的数据传输。
当加载内核模块“netatop”时,会显示每个进程发送/接收网络数据包的数据传输。
最后一列包含状态、所选资源的占用百分比(默认:CPU)和进程名称。

当可用职位超过 80 个时,会添加其他信息。

m

显示与内存相关的输出。

在窗口宽度为 80 个位置的情况下,每个进程显示以下字段:进程 ID、次要和主要内存故障、虚拟共享文本的大小、总虚拟进程大小、总驻留进程大小、最后时间间隔期间的虚拟和驻留增长、内存占用百分比和进程名称。

当可用职位超过 80 个时,会添加其他信息。

对于内存消耗,始终显示所有进程(以及在时间间隔期间不活动的进程)。

d

显示与磁盘相关的输出。

当atop以root权限运行时,会显示以下字段:process-id、从磁盘读取的数据量、写入磁盘的数据量、已写入但已再次撤回的数据量( WCANCL)、磁盘占用百分比和进程名称。

n

显示网络相关的输出。

在窗口宽度为 80 个位置的情况下,每个进程显示以下字段:进程 ID、线程 ID、接收数据包的总带宽、发送数据包的总带宽、接收的 TCP 数据包数量以及每个数据包的平均大小(以发送的 TCP 数据包数量和每个数据包的平均大小(以字节为单位)、接收的 UDP 数据包数量和每个数据包的平均大小(以字节为单位)、发送的 UDP 数据包数量和每个数据包的平均大小(以字节为单位) 、网络占用百分比和进程名称。
仅当安装了内核模块“netatop”时才能显示此信息。

当可用职位超过 80 个时,会添加其他信息。

s

显示调度特性。

在窗口宽度为 80 个位置的情况下,每个进程显示以下字段:进程 ID、处于“运行”状态的线程数 (R)、处于“可中断睡眠”状态的线程数 (S)、处于“可中断睡眠”状态的线程数状态“不间断睡眠”(D)、调度策略(正常分时、实时循环、实时先进先出)、nice值、优先级、实时优先级、当前处理器、状态、退出代码、状态、所选资源的占用百分比以及进程名称。

当可用职位超过 80 个时,会添加其他信息。

v

显示各种工艺特性。

在窗口宽度为 80 个位置的情况下,每个进程显示以下字段:进程 ID、用户名和组、开始日期和时间、状态(例如,如果进程已完成,则退出代码)、状态、占用百分比选择的资源和进程名称。

当可用职位超过 80 个时,会添加其他信息。

c

显示进程的命令行。

每个进程显示以下字段:进程 ID、所选资源的占用百分比以及包含参数的命令行。

X

显示 cgroup v2 信息。

每个进程显示以下字段:进程 ID、进程所属 cgroup 的“cpu.weight”、进程所属 cgroup 的“cpu.max”值(重新计算为百分比)、最严格的“cpu.max” ' 在上层目录中找到的值,进程所属的 cgroup 的 'memory.max' 值,在上层目录中找到的最严格的 'memory.max' 值,进程所属的 cgroup 的 'memory.swap.max' 值到,在上层目录、命令名称和 cgroup 路径名称(可水平滚动)中找到的最严格的“memory.swap.max”值。

e

显示 GPU 利用率。

每个进程至少显示以下字段:进程 ID、当前运行进程的 GPU 编号范围、所有 GPU 上的 GPU 繁忙百分比、所有 GPU 上的内存繁忙百分比(即内存上的读写访问)、内存占用采样时刻、采样期间的平均内存占用以及 GPU 百分比。

当atopgpud守护进程不以root权限运行时,GPU繁忙百分比和内存繁忙百分比在进程级别不可用。在这种情况下,进程级别的 GPU 百分比反映的是 GPU 内存占用,而不是 GPU 繁忙百分比(这是首选)。

o

显示进程的用户定义行。

在配置文件中,可以使用用户定义的输出行的描述来指定关键字ownprocline。
有关详细说明,请参阅 atoprc 的手册页。

y

显示进程中的各个线程(切换)。

单线程进程仍然显示为一行。
对于多线程进程,一行代表进程,而其他行显示每个单独线程的活动(以不同的颜色)。根据选项“a”(全部或活动切换),显示所有线程或仅显示在上一个时间间隔期间处于活动状态的线程。根据选项“Y”(排序线程),每个进程的线程将根据所选的排序标准进行排序或不排序。
该键是否处于活动状态可以在标题行中看到。

Y

与选项“y”(切换)结合使用时,对每个进程的线程进行排序。

u

显示每个用户累积的流程活动。

每个用户显示以下字段:上一个时间间隔期间活动或终止的进程数(如果与命令“a”组合,则为总数)、系统和用户模式下上一个时间间隔期间累积的 CPU 消耗、当前消耗的虚拟和常驻内存空间通过活动进程(或用户的所有进程,如果与命令“a”组合)。
当atop以root权限运行时,会显示磁盘上累积的读写吞吐量。安装内核模块“netatop”后,会显示累计接收和发送的网络数据包数量。
最后一列包含所选资源(默认:CPU)的累计占用百分比和用户名。

p

显示每个程序累积的流程活动(即流程名称)。

每个程序显示以下字段:上一个时间间隔期间活动或终止的进程数(如果与命令“a”组合,则为总数)、系统和用户模式下最后一个时间间隔内累积的 CPU 消耗、当前消耗的虚拟和常驻内存空间通过活动进程(或用户的所有进程,如果与命令“a”组合)。
当atop以root权限运行时,会显示磁盘上累积的读写吞吐量。安装内核模块“netatop”后,会显示累计接收和发送的网络数据包数量。
最后一列包含所选资源(默认:CPU)的累计占用百分比和程序名称。

j

显示每个 Docker 容器累积的进程活动。

每个容器显示以下字段:上一个时间间隔期间活动或终止的进程数(如果与命令“a”组合,则为总数)、系统和用户模式下上一个时间间隔期间累积的 CPU 消耗、当前消耗的虚拟和常驻内存空间通过活动进程(或用户的所有进程,如果与命令“a”组合)。
当atop以root权限运行时,会显示磁盘上累积的读写吞吐量。安装内核模块“netatop”后,会显示累计接收和发送的网络数据包数量。
最后一列包含所选资源(默认:CPU)的累计占用百分比和 Docker 容器 ID (CID)。

C

按 CPU 消耗顺序对当前列表进行排序(默认)。最后一列更改为“CPU”。

E

按照 GPU 利用率的顺序(首选,但仅适用于 atopgpud 守护进程在 root 权限下运行)或 GPU 内存占用的顺序对当前列表进行排序。最后一列更改为“GPU”。

M

按照常驻内存消耗的顺序对当前列表进行排序。最后一列更改为“MEM”。如果在内存上排序,将显示完整的进程列表(不仅仅是活动进程)。

D

按发出磁盘访问的顺序对当前列表进行排序。最后一列更改为“DSK”。

N

按网络带宽(接收和传输)的顺序对当前列表进行排序。最后一列更改为“NET”。

A

在此时间间隔内,按照最繁忙的系统资源的顺序自动对当前列表进行排序。最后一列显示“ACPU”、“AMEM”、“ADSK”或“ANET”(前面的“A”表示自动排序顺序)。最繁忙的资源是通过比较系统资源的加权繁忙百分比来确定的,如前面“颜色”部分中所述。
此选项保持有效,直到再次显式选择另一个排序顺序。
仅当 atop 以 root 权限运行时,才能对磁盘进行排序。
仅当加载内核模块“netatop”时,网络排序顺序才可能。

各种交互式命令:

?

请求帮助信息(也可以按“h”键)。

V

请求版本信息(版本号和日期)。

R

收集并计算进程的比例集大小(切换)。收集计算进程 PSIZE 所需的所有值是一项非常耗时的任务,因此只有在分析进程的常驻内存消耗时,才应激活此键。

W

获取每个线程的 WCHAN(切换)。收集每个线程的 WCHAN 字符串是一项相对耗时的任务,因此只有在分析线程处于睡眠状态的原因时才应激活该键。

x

抑制颜色以突出显示关键资源(切换)。
该键是否处于活动状态可以在标题行中看到。

z

暂停键可用于冻结当前情况,以便调查屏幕上的输出。当atop暂停时,可以按下上述键来显示有关当前进程列表的其他信息。每当再次按下暂停键时,atop 将继续下一个示例。
暂停键可用于文本模式和条形图模式。

i

修改间隔计时器(默认值:10 秒)。如果输入的间隔计时器为 0,则间隔计时器将关闭。在这种情况下,只能通过按“t”键手动触发新样本。
文本模式和条形图模式下均可修改间隔。

t

手动触发新样本。如果当前采样应在定时器超时之前完成,或者根本没有设置定时器(间隔定时器定义为 0),则可以按此键。在后一种情况下,atop可以用作秒表来测量由特定应用程序事务引起的负载,而无需事先知道该事务将持续多少秒。
该键可用于文本模式和条形图模式。

查看原始文件的内容时,此键可用于显示文件中的下一个样本。通过管道查看原始数据时也可以使用此键。

T

当查看原始文件的内容时,此键可用于显示文件中的先前示例,但在从管道读取原始数据时则不能。
该键可用于文本模式和条形图模式。

b

查看原始文件的内容时,此键可用于向前或向后分支到文件中的某个时间戳。当查看来自管道的原始数据时,只能进行前向分支。
该键可用于文本模式和条形图模式。

r

将所有计数器重置为零,以查看自再次启动以来的系统和进程活动。
该键可用于文本模式和条形图模式。

当查看原始文件的内容时,该键可用于再次倒回到文件的开头(从管道读取原始数据时除外)。

U

将特定用户名的搜索字符串指定为正则表达式。从现在开始,将仅显示与正则表达式匹配的用户的(活动)进程。系统统计数据仍然是全系统范围的。如果按下 Enter 键而不指定名称,所有用户的(活动)进程将再次显示。
该键是否处于活动状态可以在标题行中看到。

I

指定一个包含一个或多个要选择的 PID 的列表。从现在开始,只会显示 PID 与给定列表之一匹配的进程。系统统计数据仍然是全系统范围的。如果在没有指定 PID 的情况下按下 Enter 键,所有(活动的)进程将再次显示。
该键是否处于活动状态可以在标题行中看到。

P

将特定进程名称的搜索字符串指定为正则表达式。从现在开始,只有名称与正则表达式匹配的进程才会显示。系统统计数据仍然是全系统范围的。如果按下 Enter 键而不指定名称,所有(活动的)进程将再次显示。
该键是否处于活动状态可以在标题行中看到。

/

将特定的命令行搜索字符串指定为正则表达式。从现在开始,只有进程才会显示与正则表达式匹配的命令行。系统统计数据仍然是全系统范围的。如果按下 Enter 键而不指定字符串,所有(活动的)进程将再次显示。
该键是否处于活动状态可以在标题行中看到。

J

指定 12 个(十六进制)字符的 Docker 容器 ID。从现在开始,将仅显示在特定 Docker 容器 (CID) 中运行的进程。系统统计数据仍然是全系统范围的。如果在未指定容器 ID 的情况下按下 Enter 键,所有(活动)进程将再次显示。
该键是否处于活动状态可以在标题行中看到。

Q

指定以逗号分隔的进程/线程状态字符列表。从现在开始,仅显示处于这些特定状态的进程/线程。接受的状态有:R(运行)、S(睡眠)、D(磁盘睡眠)、I(空闲)、T(停止)、t(跟踪停止)、X(死机)、Z(僵尸)和 P(停止) 。系统统计数据仍然是全系统范围的。如果按下 Enter 键而不指定状态,所有(活动的)进程/线程将再次显示。
该键是否处于活动状态可以在标题行中看到。

S

指定特定逻辑卷名称、特定磁盘名称和特定网络接口名称的搜索字符串。所有搜索字符串都被解释为正则表达式。从现在开始,仅显示与相关正则表达式匹配的系统资源。如果按下 Enter 键但未指定搜索字符串,则将再次显示该类型的所有(活动)系统资源。
该键是否处于活动状态可以在标题行中看到。

a

“all/active”键可用于在仅显示/累积上一个时间间隔(默认)期间处于活动状态的进程或显示/累积所有进程之间切换。
该键是否处于活动状态可以在标题行中看到。

G

默认情况下,atop 显示/累积上一个时间间隔内活动的进程和退出的进程。使用此键(切换),可以抑制显示/累积退出的进程。
该键是否处于活动状态可以在标题行中看到。

f

显示系统资源固定(最大)数量的标题行(切换)。默认情况下,仅显示有关在上一个时间间隔内真正处于活动状态的系统资源(CPU、分页、逻辑卷、磁盘、网络接口)的行。使用此键,您还可以强制atop显示非活动资源的行。
该键是否处于活动状态可以在标题行中看到。

F

禁止对系统资源进行排序(切换)。默认情况下,系统资源(CPU、逻辑卷、磁盘、网络接口)按利用率排序。
该键是否处于活动状态可以在标题行中看到。

1

将相关计数器显示为每秒平均值(格式为“..../s”),而不是间隔期间的总数(切换)。
该键是否处于活动状态可以在标题行中看到。

l

限制每个 CPU 的计数器、活动磁盘和网络接口的系统级行数。默认情况下,显示上一个时间间隔内处于活动状态的所有 CPU、磁盘和网络接口的行。限制这些行对于具有大量 CPU、磁盘或接口的系统非常有用,以便能够在屏幕/窗口上运行,例如:仅 24 行。
对于所有提到的资源,可以交互式地指定最大行数。使用标志 -l 时,每个 cpu 线路的最大数量设置为 0,磁盘线路的最大数量设置为 5,接口线路的最大数量设置为 3。这些值可以再次修改在交互模式下。

k

向活动进程发送信号(也称为终止进程)。

q

退出程序。
该键可用于文本模式和条形图模式。

PgDn

显示进程/线程列表的下一页。
使用向下箭头键可以单行向下滚动列表。

^F

显示进程/线程列表的下一页(向前)。
使用向下箭头键可以单行向下滚动列表。

PgUp

显示进程/线程列表的上一页。
使用向上箭头键可以单行向上滚动列表。

^B

显示进程/线程列表的上一页(向后)。
使用向上箭头键可以单行向上滚动列表。

^L

重新绘制屏幕。

原始数据存储

为了存储系统和进程级统计数据以进行长期分析(例如,检查系统负载和昨天下午 3:00 到 4:00 之间运行的活动进程),atop 可以存储系统以及原始文件中压缩二进制格式的进程级别统计信息,带有标志 -w 后跟文件名。如果此文件已存在并且被识别为原始数据文件,atop 会将新样本附加到该文件(从反映启动以来活动的样本开始)。如果文件不存在,则会创建该文件。
有关系统、进程和线程活动的所有信息都存储在原始文件中。
间隔(默认值:10 秒)和样本数(默认值:无限)可以作为最后一个参数传递。可以使用标志 -S 代替样本数来指示 atop 无论如何应该在午夜之前完成。

可以使用标志 -r 后跟文件名来读取和再次可视化原始文件。如果未指定文件名,则打开文件/var/log/atop/atop_YYYYMMDD进行输入(其中YYYYMMDD是代表当前日期)。如果以 YYYYMMDD(代表任何有效日期)格式指定文件名,则会打开文件 /var/log/atop/atop_YYYYMMDD。如果指定了符号名 y 的文件名,则打开昨天的每日日志文件(可以重复此操作,因此“yyyy”表示四天前的日志文件)。如果使用文件名-,则将读取stdin。
可以使用“t”键显示下一个样本、使用“T”键显示上一个样本、使用“b”键分支到特定时间或使用“r”键以交互方式查看文件中的样本快退到文件的开头。这些键可以在文本模式和条形图模式下使用。
当输出重定向到文件或管道时,atop 以纯 ASCII 格式打印所有样本。在这种情况下,默认行长度为 80 个字符。使用标志 -L 后跟备用行长度,将显示更多(或更少)列。
使用标志 -b(开始时间)和/或 -e(结束时间),后跟 [YYYYMMDD]hhmm 形式的时间参数,表示内的某个时间段可以选择原始文件。

每天午夜,atop 都会由 atop-rotate.timer 和 atop-rotate.service 单元文件重新启动,以将压缩的二进制数据写入文件/var/log/atop/atop_YYYYMMDD,默认间隔10分钟。
此外,所有超过 28 天的原始文件都会被删除(默认情况下)。
所提到的默认值可以在文件 /etc/default/atop 中被否决,该文件可能包含 LOGOPTS 的其他值(默认情况下没有任何标志)、LOGINTERVAL<(以秒为单位,默认为 600)、LOGGENERATIONS(以天为单位,默认为 28)和 LOGPATH(存储日志文件的目录)。

不幸的是,并不总是能够在新版本的atop中保持原始文件的格式兼容,特别是当必须维护许多新计数器时。因此,安装了atopconvert程序,将旧版本atop创建的原始文件转换为新版本atop可以读取的原始文件 (有关更多详细信息,请参阅 atopconvert 的手册页)。

输出描述

第一个示例显示了自启动以来的系统级活动(标头中的经过时间显示了自启动以来的时间)。

在文本模式下,atop 首先显示与每个样本的系统级活动相关的行。如果在该时间间隔内未使用特定的系统资源,则与该资源相关的整条线路将被抑制。因此每个样本的系统级线路数量可能会有所不同。
之后,将显示上一个时间间隔内处于活动状态的进程的列表。默认情况下,此列表按 CPU 消耗排序,但可以通过前面描述的键更改此顺序。

如果值必须通过atop显示,但不适合列宽,则使用另一种格式。如果例如233216毫秒的CPU消耗应该显示在4个位置的列宽中,它显示为“233s”(以秒为单位)。对于大内存数字,如果值不适合,则选择另一个单位(Mb 代替 Kb、Gb 代替 Mb、Tb 代替 Gb 等)。对于其他值,使用一种指数表示法(5 个位置列中显示的值 123456789 给出 123e6)。

输出描述 - 系统级

文本模式下的系统级信息由以下输出行组成:

PRC

进程和线程级别总计。
该行包含系统模式('sys')和用户模式('user')消耗的总 CPU 时间、此时存在的进程总数('#proc')、此时存在的线程总数处于“运行”状态(“#trun”)、“可中断睡眠”(“#tslpi”)和“不可中断睡眠”(“#tslpu”)状态的时刻、僵尸进程数量(“#zombie”)、克隆系统调用(“克隆”),以及使用进程记帐时在时间间隔(“#exit”)期间结束的进程数。最后一列可能表示无法激活进程记帐(“no procacct”),而不是“#exit”。
如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。

CPU

CPU 利用率。
至少一行显示所有 CPU 的总占用情况。
如果是多处理器系统,则会为每个单独的处理器(“cpu”小写)显示一条附加行,并按活动排序。默认情况下不会显示不活动的 CPU。显示每个 CPU 占用情况的行包含字段中的 CPU 数量以及等待百分比。

每行包含所有活动进程 ('sys') 在内核模式下消耗的 CPU 时间百分比、所有活动进程 (包括以大于零)、用于中断处理(“irq”)(包括软中断)的 CPU 时间百分比、没有进程等待磁盘 I/O(“空闲”)时未使用 CPU 时间的百分比,以及在没有进程等待磁盘 I/O(“空闲”)时未使用 CPU 时间的百分比至少有一个进程正在等待磁盘 I/O(“等待”)。
如果是每个 cpu 占用,则为该 CPU 的 CPU 数量和等待百分比 ('w')。显示每个 cpu 占用情况的行数可以受到限制。

对于虚拟机,steal-percentage(“steal”)显示被运行在同一硬件上的其他虚拟机窃取的 CPU 时间的百分比。
对于托管一台或多台虚拟机的物理机,来宾百分比(“来宾”)显示虚拟机使用的 CPU 时间的百分比。请注意,该百分比与用户百分比重叠!

当 CPU 和内核支持 PMC 性能监控计数器(并且 atop 以 root 权限运行)时,会显示每个 CPU 周期 ('ipc') 的指令数。第一个示例始终显示值“initial”,因为计数器在 atop 启动时才被激活。
当CPU繁忙百分比较高且IPC小于1.0时,很可能CPU在指令执行过程中频繁等待内存访问(更大的CPU缓存或更快的内存可能有助于提高性能)。当CPU 繁忙百分比较高且 IPC 大于 1.0 时,CPU 很可能是指令绑定的(更多/更快的内核可能有助于提高性能)。
此外,还显示了每个 CPU 的有效周期数(“周期”)。如果CPU 100% 繁忙,则该值可以达到当前CPU 频率。当空闲 CPU 停止时,有效周期数可能(大大)低于当前频率。
请注意,每个周期的平均指令和周期数显示在所有 CPU 的 CPU 行中。
请注意,读取虚拟机(来宾)中的周期计数器可能会导致性能延迟。因此,默认情况下,该指标在虚拟机中处于禁用状态。但是,通过 atoprc 文件中的关键字“perfevents”,可以将此指标显式设置为“启用”或“禁用”(请参阅 atoprc 的单独手册页)。
另请参阅:http://www.brendangregg.com/blog/2017-05-09/cpu-utilization-is-wrong.html

在频率缩放的情况下,前面提到的所有 CPU 百分比都与时间间隔内使用的 CPU 缩放有关。如果 CPU 已处于活动状态,例如50%用户模式,而该CPU的频率缩放为40%,用户模式仅使用了CPU全部容量的20%。
如果内核模块“cpufreq_stats”处于活动状态(在发出“modprobe cpufreq_stats”之后),则平均频率(“avgf”)和平均缩放百分比(“avgscal”) ') 显示。否则,将在采样时显示当前频率('curf')和当前缩放百分比('curscal')。请注意,每个 CPU 的 CPU 行中都会显示频率和缩放比例的平均值。
仅针对最多具有 8 个 CPU 的系统收集频率缩放统计信息,因为收集每个 CPU 的这些值非常耗时。

如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。

CPL

CPU负载信息。
该行包含负载平均数据,反映可在 CPU 上运行的线程数(即运行队列的一部分)或正在等待磁盘 I/O 的线程数。这些数字是 1 分钟(“avg1”)、5 分钟(“avg5”)和 15 分钟(“avg15”)的平均值。
此外,还显示了上下文切换的数量(“csw”)、服务中断的数量(“intr”)以及可用 CPU 的数量。

如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。

GPU

GPU 利用率 (Nvidia)。
阅读本文档中的 GPU 统计信息收集部分,了解有关激活 atopgpud 守护进程的详细信息。

每行的第一列显示总线 ID(最后九个字符)和 GPU 编号。随后的列显示一个或多个内核在 GPU 上执行的时间百分比('gpubusy')、全局(设备)内存被读取或写入的时间百分比('membusy')、内存占用百分比('memocc')、总内存 ('total')、采样时正在使用的内存 ('used')、采样期间正在使用的平均内存 ('usavg')、数量采样时 GPU 上处于活动状态的进程数 ('#proc') 以及 GPU 的类型。

如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。
显示 GPU 的行数可以受到限制。

MEM

内存占用(两行)。
这些行包含物理内存总量(“tot”)、当前空闲内存量(“free”)、用作页面缓存的内存量,包括总驻留共享内存(“cache”),页面缓存中必须刷新到磁盘的内存量(“dirty”)、用于文件系统元数据的内存量(“buff”)、用于内核 malloc 的内存量(“slab”) 、可回收的slab内存量('slrec')、共享内存的驻留大小(包括tmpfs)('shmem')、共享内存的驻留大小('shrss')当前交换的共享内存量( 'shswp'),当前用于页表的内存量('pgtab'),该系统中的 NUMA 节点数('numnode'),当前由 vmware 的气球驱动程序声明的内存量(' vmbal'),当前由 ZFSonlinux 的 ARC(缓存)声明的内存量('zfarc'),为大页声明的内存量('hptot'),大页内存量实际使用的内存量(“hpuse”)、用于 TCP 套接字的内存量(“tcps”)以及用于 UDP 套接字的内存量(“udps”)。

如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。

SWP

交换职业并过度使用信息。
该行包含磁盘上的交换空间总量('tot')、可用交换空间量('free')、交换缓存大小('swcac')、zswap 中压缩存储的总大小( 'zpool')、zswap 中存储的压缩页面的总大小('zstor')、用于 KSM 的内存总大小('ksuse',即共享)以及节省的内存总大小(重复数据删除)通过 KSM(“kssav”,即共享)。
此外,还会显示提交的虚拟内存空间 ('vmcom') 和提交空间的最大限制 ('vmlim',默认情况下交换大小加上内存大小的 50%)。提交空间是为进程的所有私有内存空间分配保留的虚拟空间。如果配置了严格的过量使用处理(vm.overcommit_memory 为 2),内核仅验证提交的空间是否超出限制。

LLC

CPU信息末级缓存。
该行包含 LLC 的总内存带宽('tot')、本地 NUMA 节点的带宽('loc')以及 LLC 的使用百分比('LLCXX YY%')。

请注意,此功能取决于“resctrl”伪文件系统。确保内核是使用相关配置构建的,并注意安装了伪文件系统:

mount -t resctrl resctrl -o mba_MBps /sys/fs/resctrl(基于 Intel)
mount -t resctrl resctrl -o cdp /sys/fs/resctrl(在 AMD 上)

NUM

每个 NUMA 节点的内存利用率(未显示单个 NUMA 节点)。
这一行显示了该节点的物理内存总量(‘tot’)、空闲内存量(‘free’)、缓存文件数据的内存量(‘file’)、修改后的缓存文件数据(‘dirty’) ')、最近使用的内存 ('activ')、最近较少使用的内存 ('inact')、用于内核 malloc 的内存 ('slab')、可回收的平板内存量 ('slrec')、共享内存包括 tmpfs ('shmem')、总大页 ('hptot') 和碎片百分比 ('frag')。

NUC

每个 NUMA 节点的 CPU 利用率(未显示单个 NUMA 节点)。
此行显示与此 NUMA 节点相关的所有 CPU 的利用率百分比,分类为系统模式 ('sys')、用户模式 ('user')、niced 进程的用户模式 ('niced')、空闲模式 ('idle') )、等待模式('w' 前面加节点号)、中断模式 ('irq')、软中断模式 ('sirq')、窃取模式 ('steal') 和访客模式 ('guest') 重叠用户模式。

PAG

寻呼频率。
该行包含由于可用内存低于特定阈值而扫描的页面数(“扫描”)、由于可用内存低于特定阈值而回收的页面数(“窃取”)、内核因紧急需要而尝试回收页面的次数(“stall”)、运行内存压缩以分配大页面的进程停顿次数(“compact”)、迁移的 NUMA 页面数量(“numamig”) ,以及成功迁移的内存页总数,例如显示了 NUMA 节点之间或用于压缩(“迁移”)的情况。
还有系统从块设备读取的内存页数('pgin')、系统写入块设备的内存页数('pgout')、系统从交换空间读取的内存页数('swin') )、系统写入交换空间的内存页数(“swout”)以及内存不足终止的数量(“oomkill”)。

PSI

压力失速信息。
此行包含与 CPU、内存和 I/O 相关的资源压力的百分比。某些百分比指的是“某些”,意味着某些进程/线程由于资源过载而被延迟。其他百分比指的是“满”,表示由于资源过载而导致总体吞吐量损失。
'cpusome'、'memsome'、'memfull'、'iosome' 和 'iofull' 值显示整个时间间隔内的压力百分比。
值“cs”(cpu some)、“ms”(内存 some)、“mf”(内存已满)、“is”(I/O some)和“if”(I/O full)分别显示三个百分比斜线:过去 10、60 和 300 秒的压力百分比。

LVM/MDD/DSK

逻辑卷/多设备/磁盘利用率。
每个活动单元都会生成一行,并根据单元活动进行排序。该行显示名称(例如逻辑卷的 VolGroup00-lvtmp 或硬盘的 sda)、向设备发出 I/O 请求所用时间的百分比(“忙”)(请注意,对于服务请求的设备并行(例如RAID阵列、SSD和NVMe,这个数字不反映其性能限制)、发出的读请求数('read')、发出的写请求数('write')、丢弃数发出的请求 ('discrd')(如果内核版本支持)、每次读取的千字节数 ('KiB/r')、每次写入的千字节数 ('KiB/w')、每次丢弃的千字节数 ('KiB) /d') 如果内核版本支持,每秒读取的 MiBytes 吞吐量 ('MBr/s')、每秒写入的 MiBytes 吞吐量 ('MBw/s')、向设备驱动程序发出的请求但未完成 ('inflt')、繁忙时的平均队列深度 ('avq') 以及请求所需的平均毫秒数 ('avio') 用于查找、延迟和数据传输。
如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。

显示单元的行数可以使用“l”键或静态地限制每个类(LVM、MDD 或 DSK)(请参阅 atoprc 的单独手册页)。通过为特定类指定值 0,该类将不再显示任何行。

NFM

网络文件系统(NFS)挂载在客户端。
对于每个 NFS 挂载的文件系统,显示一行,其中包含挂载的服务器目录、服务器名称 ('srv')、从服务器物理读取的总字节数 ('read') 以及总字节数以物理方式写入服务器(“写入”)。数据传输细分为通过正常 read() 系统调用('nread')读取的字节数、通过正常 read() 系统调用写入的字节数('nwrit')、通过直接 I/ 读取的字节数O ('dread')、通过直接 I/O 写入的字节数 ('dwrit')、通过内存映射 I/O 页读取的字节数 ('mread') 以及通过内存映射写入的字节数I/O 页('mwrit')。

NFC

网络文件系统 (NFS) 客户端计数器。
该行包含本地进程('rpc')发出的 RPC 调用数、向 NFS 服务器发出的读 RPC 调用('read')和写 RPC 调用('rpwrite')数,RPC 调用数为重传('retxmit')和授权刷新次数('autref')。

NFS

网络文件系统 (NFS) 服务器端计数器。
该行包含从 NFS 客户端接收的 RPC 调用数 ('rpc')、收到的读 RPC 调用数 ('cread')、收到的写 RPC 调用数 ('cwrit')、每秒兆字节数返回客户端的读取请求数 ('MBcr/s')、客户端写入请求中每秒传递的兆字节数 ('MBcw/s')、通过 TCP 处理的网络请求数 ('nettcp')、通过 UDP 处理的网络请求数 ('netudp')、回复缓存命中数 ('rchits')、回复缓存未命中数 ('rcmiss') 和未缓存请求数 ('rcnoca')。此外,一些错误计数器指示格式错误(“badfmt”)或错误授权(“badaut”)的请求数量,以及指示错误客户端数量(“badcln”)的计数器。

NET

网络利用率(TCP/IP)。
一行显示传输层(TCP 和 UDP)的活动,一行显示 IP 层,每一行显示每个活动接口。
对于传输层,显示的计数器涉及已接收 TCP 分段的数量(包括错误接收的分段)(“tcpi”)、已发送 TCP 分段的数量(不包括仅包含重传八位字节的分段(“tcpo”))、已接收 UDP 数据报的数量('udpi')、传输的 UDP 数据报数量 ('udpo')、主动 TCP 打开数量 ('tcpao')、被动 TCP 打开数量 ('tcppo')、TCP 输出重传数量 (' tcprs')、TCP 输入错误数('tcpie')、TCP 输出重置数('tcpor')、UDP 无端口数('udpnp')和 UDP 输入错误数('udpie') ').
如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。
这些计数器与 IPv4 和 IPv6 的组合相关。

对于 IP 层,显示的计数器涉及从接口接收到的 IP 数据报的数量,包括错误接收的数据报 ('ipi')、本地高层协议提供用于传输的 IP 数据报的数量 ('ipo')、转发到其他接口的已接收 IP 数据报数量(“ipfrw”)、传送到本地高层协议的 IP 数据报数量(“deliv”)、已接收 ICMP 数据报数量(“icmpi”)以及传输的 ICMP 数据报('icmpo')的数量。
如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。
这些计数器与 IPv4 和 IPv6 的组合相关。

对于每个活动网络接口,都会显示一行,并按接口活动排序。该行在第一列中显示接口的名称及其繁忙百分比。半双工的繁忙百分比是通过将接口速度与每秒发送和接收的位数进行比较来确定的;对于全双工,接口速度与发送或接收的最高位进行比较。当无法确定接口速度时(例如环回接口),将显示“---”而不是百分比。
此外,接收的数据包数量 ('pcki')、传输的数据包数量 ('pcko')、接口的线路速度 ('sp')、每秒接收的有效位数 ('si')、每秒传输的有效位数 ('so')、冲突数 ('coll')、接收到的多播数据包数 ('mlti')、接收数据包时的错误数 ('erri')、传输数据包时的错误数 ('erro')、接收到的丢弃数据包数 ('drpi') 以及传输的数据包丢弃数 ('drpo')。
如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。
显示网络接口的行数可以受到限制。

IFB

Infiniband 利用率。
对于每个活动的 Infiniband 端口,都会显示一行,并按活动排序。该行在第一列中显示端口的名称及其繁忙百分比。繁忙百分比是通过在时间间隔内获取传输或接收的最高位,将该值乘以通道数并将其与最大端口速度进行比较来确定的。
此外,接收到的数据包数量除以通道数 ('pcki')、发送数据包数除以通道数 ('pcko')、最大线路速度 ('sp')、有效位数每秒接收的数据量 ('si')、每秒传输的有效位数 ('so') 以及通道数 ('lanes')。
如果屏幕宽度不允许所有这些计数器,则仅显示相关子集。
显示 Infiniband 端口的行数可以受到限制。

输出描述 - 过程级别

在系统级信息之后,以文本模式显示进程列表,其中资源利用率在最后一个时间间隔内发生了变化。这些进程可能已使用 CPU 时间,或者可能已发出磁盘或网络请求。然而,如果进程的一部分由于内存不足而被调出(当进程本身处于睡眠状态时),也会显示该进程。

每个进程可能会显示以下字段(按字母顺序),具体取决于交互命令部分中所述的当前输出模式以及窗口的当前宽度:

AVGRSZ

磁盘上一次读取操作的平均大小。

AVGWSZ

磁盘上一次写入操作的平均大小。

BANDWI

此进程消耗的接收 TCP 和 UDP 数据包的总带宽(每秒位数)。该值可以与接口级别的“si”值(每个接口使用的带宽)进行比较。
仅当加载内核模块“netatop”时才会显示此信息。

BANDWO

此进程消耗的发送 TCP 和 UDP 数据包的总带宽(每秒位数)。该值可以与接口级别的“so”值(每个接口使用的带宽)进行比较。
仅当加载内核模块“netatop”时才会显示此信息。

BDELAY

聚合块 I/O 延迟,即等待磁盘 I/O 的时间。

CGROUP

该进程所属的 cgroup(版本 2)的路径名称。该路径名相对于 cgroup 根目录,通常为“/sys/fs/cgroup”。

CID

12位十六进制数字的容器ID(Docker),指的是进程/线程运行的容器。如果进程已在最后一个时间间隔内启动并完成,则会出现“?”显示该容器 ID 是因为容器 ID 不是标准进程记帐记录的一部分。

CMD

进程的名称。该名称可以被“小于/大于”符号('')包围,这意味着该过程已在最后一个时间间隔内完成。
在标题行中的缩写“CMD”后面,显示了进程/线程列表的当前页码和总页数。

COMMAND-LINE

进程的完整命令行(包括参数)。如果命令行的长度超过屏幕行的长度,可以使用方向键->和<-进行水平滚动。
在标题行中的动词“COMMAND-LINE”后面,显示当前页码和进程/线程列表的总页数。

CPU

该进程的占用百分比与系统级别该资源的可用容量相关。

CPUMAX

该进程所属的 cgroup(版本 2)的“cpu.max”值,以一个 CPU 的百分比计算。

CPUMAXR

该进程所属的 cgroup(版本 2)的上层目录定义的最严格(即有效)的“cpu.max”值,以一个 CPU 的百分比计算。

CPUNR

(主)线程正在运行或最近正在运行的 CPU 的标识。

CPUWGT

该进程所属的 cgroup(版本 2)的“cpu.weight”值。

CTID

容器 ID (OpenVZ)。如果进程已在最后一个时间间隔内启动并完成,则会出现“?”显示该容器 ID 是因为容器 ID 不是标准进程记帐记录的一部分。

DSK

该进程的占用百分比与所有进程产生的总负载(即最后一个时间间隔内所有进程的磁盘访问总数)相关。
当每个进程的“存储记帐”在内核中处于活动状态时,会显示此信息。

EGID

此进程在其下执行的有效组 ID。

ENDATE

该过程完成的日期。如果进程仍在运行,则该字段显示“活动”。

ENTIME

该过程完成的时间。如果进程仍在运行,则该字段显示“活动”。

ENVID

已识别虚拟环境(仅限 OpenVZ)。

EUID

此进程执行时使用的有效用户 ID。

EXC

终止进程的退出代码(“ST”列的第二个位置是 E)或致命信号号(“ST”列的第二个位置是 S 或 C)。

FSGID

此进程在其下执行的文件系统组 ID。

FSUID

此进程在其下执行的文件系统用户 ID。

GPU

当atopgpud守护进程不以root权限运行时,GPU百分比反映的是GPU内存占用百分比(所有GPU内存为100%)。
当atopgpud守护进程以root权限运行时,GPU百分比反映了GPU繁忙百分比。

GPUBUSY

所有 GPU 的繁忙百分比(一个 GPU 为 100%)。
当atopgpud守护进程不以root权限运行时,该值不可用。

GPUNUMS

进程在时间间隔内使用的 GPU 的逗号分隔列表。当逗号分隔的列表超出列的宽度时,将显示十六进制值。

LOCKSZ

该进程(或用户)锁定(即不可交换)的虚拟内存量。

MAJFLT

该进程发出的已通过创建/加载请求的内存页面解决的页面错误数。

MEM

该进程的占用百分比与系统级别该资源的可用容量相关。

MEMAVG

时间间隔内所有使用的 GPU 的平均内存占用情况。

MEMBUSY

所有GPU上内存的繁忙百分比(一个GPU为100%),即内存读写访问所需的时间。
当atopgpud守护进程不以root权限运行时,该值不可用。

MEMMAX

该进程所属的 cgroup(版本 2)的“memory.max”值。

MEMNOW

样本当前在所有使用的 GPU 上的内存占用情况。

MMMAXR

该进程所属的 cgroup(版本 2)的上层目录定义的最严格(即有效)的“memory.max”值。

MINFLT

该进程发出的页面错误数,这些错误已通过从空闲页面列表中回收所请求的内存页面来解决。

NET

该进程的占用百分比与所有进程产生的总负载(即上一个时间间隔内所有进程消耗的网络带宽)相关。
仅当加载内核模块“netatop”时才会显示此信息。

NICE

可以赋予进程的或多或少的静态优先级,范围从 -20(高优先级)到 +19(低优先级)。

NIVCSW

在时间片过期的情况下进程/线程非自愿上下文切换的次数。

NPROCS

该用户或程序累积的活动和终止进程的数量。

NVCSW

在阻塞系统调用的情况下,进程/线程自动进行上下文切换的次数,例如等待 I/O 操作完成。

PID

进程 ID。如果进程已在最后一个时间间隔内启动并完成,则会出现“?”之所以显示,是因为进程 ID 不是标准进程记帐记录的一部分。

POLI

策略“norm”(正常,即 SCHED_OTHER)、“btch”(批量)和“idle”指的是分时进程。策略“fifo”(SCHED_FIFO)和“rr”(循环,即 SCHED_RR)指的是实时进程。

PPID

父进程 ID。如果进程在最后一个时间间隔内启动并完成,则显示值 0,因为父进程 ID 不是标准进程记帐记录的一部分。

PRI

进程的优先级范围从0(最高优先级)到139(最低优先级)。优先级 0 到 99 用于实时进程(固定优先级与其行为无关),优先级 100 到 139 用于分时进程(可变优先级取决于其最近的 CPU 消耗和好值)。

PSIZE

该进程(或用户)的内存大小比例。
每个进程与其他进程共享常驻内存。例如。当特定程序启动多次时,代码页(文本)仅在内存中加载一次并由所有程序共享。此外,共享库的代码由使用该共享库的所有进程共享,以及共享内存和内存映射文件。对于进程的PSIZE计算,将与其他进程共享的进程的常驻内存除以共享者的数量。这意味着,每个进程都占用该内存的一定比例的部分。累加系统中所有进程的 PSIZE 值可以可靠地了解所有进程消耗的总驻留内存。
由于收集计算 PSIZE 所需的所有值是一项非常耗时的任务,因此“R”键(或“-R”标志)应该处于活动状态。收集这些值还需要超级用户权限(否则输出中会显示“?K”)。
如果进程在最后一个时间间隔内完成,则不会显示任何值,因为比例内存大小不是标准进程记帐记录的一部分。

RDDSK

物理上在磁盘上发出的读取数据传输(因此不考虑从磁盘缓存读取)。
不幸的是,内核在终止时将进程的数据传输聚合到其父进程的数据传输,因此您可能会看到 cron、bash 或 init 等(父)进程的传输,这些传输实际上并不是由它们发出的。

RDELAY

运行队列延迟,即等待运行队列所花费的时间。

RGID

进程在其下执行的真实组 ID。

RGROW

进程在上一个时间间隔内增长的常驻内存量。常驻增长可能是由于接触之前未物理创建/加载(按需加载)的内存页面而引起的。请注意,居民增长也可能是负数,例如当进程的一部分由于内存不足而被换出页面时,或者当进程释放动态分配的内存时。对于在最后一个时间间隔内启动的进程,常驻增长反映了该时刻进程的总常驻大小。
如果进程在最后一个时间间隔内完成,则不会显示任何值,因为常驻内存占用不是标准进程记帐记录的一部分。

RNET

此进程接收的 TCP 和 UDP 数据包的数量。仅当安装了内核模块“netatop”时才会显示此信息。
如果进程在最后一个时间间隔内完成,则不会显示任何值,因为网络计数器不是标准进程记帐记录的一部分。

RSIZE

该进程(或用户)消耗的总驻留内存使用量。请注意,进程的 RSIZE 包括该进程使用的所有常驻内存,即使某些内存部分与其他进程共享(另请参阅 PSIZE 的解释)。
如果进程在最后一个时间间隔内完成,则不会显示任何值,因为常驻内存占用不是标准进程记帐记录的一部分。

RTPR

根据 POSIX 标准的实时优先级。对于分时进程(策略“norm”、“btch”或“idle”),值可以为 0;对于实时进程(策略“rr”或“fifo”),其范围可以从 1(最低)到 99(最高)。

RUID

进程执行时的真实用户 ID。

S

(主)线程的当前状态:“R”表示正在运行(当前正在处理或在运行队列中),“S”表示睡眠可中断(等待事件发生),“D”表示睡眠不可中断,“Z” ' 表示僵尸进程(等待与其父进程同步),'T' 表示停止(挂起或跟踪),'W' 表示交换,'E'(退出)表示在上一个时间间隔内完成的进程。

SGID

保存的进程的组ID。

SNET

该进程传输的 TCP 和 UDP 数据包的数量。仅当加载内核模块“netatop”时才会显示此信息。

ST

进程的状态。
第一个位置指示进程是否已在最后一个时间间隔内启动(值N 表示“新进程”)。

第二个位置指示该过程是否在最后一个时间间隔内完成。
值E表示进程主动“退出”;退出代码显示在“EXC”列中。
值S表示进程已被信号非自愿终止;信号编号显示在“EXC”栏中。
值C表示进程已被信号非自愿终止,并在其当前目录中生成核心转储;信号编号显示在“EXC”列中。

STDATE

流程的开始日期。

STTIME

进程的开始时间。

SUID

保存的进程的用户 ID。

SWPMAX

该进程所属的 cgroup(版本 2)的“memory.swap.max”值。

SWAPSZ

该进程(或用户)消耗的交换空间。

SWMAXR

该进程所属的 cgroup(版本 2)的上层目录定义的最严格(即有效)的“memory.swap.max”值。

SYSCPU

该进程在系统模式(内核模式)下的CPU时间消耗,通常是由于系统调用处理造成的。

TCPRASZ

接收到的 TCP 缓冲区的平均大小(以字节为单位)。仅当加载内核模块“netatop”时才会显示此信息。

TCPRCV

此进程收到的 TCP 数据包数。仅当加载内核模块“netatop”时才会显示此信息。

TCPSASZ

传输的 TCP 缓冲区的平均大小(以字节为单位)。仅当加载内核模块“netatop”时才会显示此信息。

TCPSND

为此进程传输的 TCP 数据包数。仅当加载内核模块“netatop”时才会显示此信息。

THR

该进程内的线程总数。所有相关线程都包含在一个线程组中,由 atop 表示为一行,或者当“y”键(或 -y 标志)处于活动状态时表示为单独的行。

在 Linux 2.4 系统上,很难确定哪些线程(即进程)与同一线程组相关。每个线程都由 atop 表示为单独的一行。

TID

线程 ID。进程中的所有线程都使用相同的 PID 但不同的 TID 运行。该值针对多线程进程中的各个线程显示(当使用键“y”时)。

TRUN

该进程内处于“运行”(R) 状态的线程数。

TSLPI

该进程内处于“可中断睡眠”(S) 状态的线程数。

TSLPU

该进程内处于“不间断睡眠”状态的线程数 (D)。

UDPRASZ

接收到的 UDP 数据包的平均大小(以字节为单位)。仅当加载内核模块“netatop”时才会显示此信息。

UDPRCV

该进程接收到的UDP数据包的数量。仅当加载内核模块“netatop”时才会显示此信息。

UDPSASZ

传输的 UDP 数据包的平均大小(以字节为单位)。仅当加载内核模块“netatop”时才会显示此信息。

UDPSND

该进程发送的UDP数据包的数量。仅当加载内核模块“netatop”时才会显示此信息。

USRCPU

由于处理自己的程序文本,该进程在用户模式下消耗 CPU 时间。

VDATA

该进程使用的私有数据的虚拟内存大小(包括堆和共享库数据)。

VGROW

进程在上一个时间间隔内增长的虚拟内存量。虚拟增长可能是由以下原因引起的:发出 malloc() 或附加共享内存段。请注意,虚拟增长也可能是负的,例如发出 free() 或分离共享内存段。对于在最后一个时间间隔内启动的进程,虚拟增长反映了该时刻进程的总虚拟大小。
如果进程在最后一个时间间隔内完成,则不会显示任何值,因为虚拟内存占用不是标准进程记帐记录的一部分。

VPID

虚拟进程 ID(在 OpenVZ 容器内)。如果进程已在最后一个时间间隔内启动并完成,则会出现“?”之所以显示,是因为虚拟进程 ID 不是标准进程记帐记录的一部分。

VSIZE

该进程(或用户)消耗的总虚拟内存使用量。
如果进程在最后一个时间间隔内完成,则不会显示任何值,因为虚拟内存占用不是标准进程记帐记录的一部分。

VSLIBS

该进程使用的所有共享库的(共享)文本的虚拟内存大小。

VSTACK

该进程使用的(私有)堆栈的虚拟内存大小

VSTEXT

可执行程序(共享)文本的虚拟内存大小。

WCHAN

睡眠状态线程的等待通道,即线程进入睡眠状态的内核函数的名称。
由于确定内核函数的名称字符串是一项相对耗时的任务,因此“W”键(或“-W”标志)应该处于活动状态。

WRDSK

物理上在磁盘上发出的写入数据传输(因此不考虑写入磁盘缓存)。该计数器是为将其数据写入缓存的应用程序进程维护的(假设该数据稍后物理传输到磁盘)。请注意,没有考虑交换所需的磁盘 I/O。
不幸的是,内核在终止时将进程的数据传输聚合到其父进程的数据传输,因此您可能会看到 cron、bash 或 init 等(父)进程的传输,这些传输实际上并不是由它们发出的。

WCANCL

写入数据传输先前说明了该进程或已取消的另一个进程。假设一个进程将新数据写入文件,并且在缓存缓冲区刷新到磁盘之前再次删除该数据。然后,原始进程将写入的数据显示为 WRDSK,而删除/截断文件的进程将未刷新的删除数据显示为 WCANCL。

可解析的输出

使用标志 -P 后跟一个或多个标签(以逗号分隔)的列表,为每个样本生成可解析的输出。可以为系统级统计指定的标签对应于交互式输出中可以找到的标签(每行的第一个动词):“CPU”、“cpu”、“CPL”、“GPU”、“MEM” 、“SWP”、“PAG”、“PSI”、“LVM”、“MDD”、“DSK”、“NFM”、“NFC”、“NFS”、“NET”、“IFB”、“LLC”、“ NUM”和“NUC”。
对于进程级统计,可以使用特殊标签:“PRG”(常规)、“PRC”(CPU)、“PRE”(GPU)、“PRM”(内存)、“PRD”(磁盘,仅当“存储核算”时)处于活动状态)和“PRN”(网络,仅当已安装内核模块“netatop”时)。
使用标签“ALL”,显示所有系统和进程级别的统计数据。

可解析输出中的命令和命令行可能包含空格,因此默认情况下用括号括起来。然而,由于解析工具经常使用空格作为字段之间的分隔符,因此使用附加标志 -Z 可以通过下划线交换命令行(行)中的空格并省略括号。

对于每个间隔,都会显示所有请求的行,然后 atop 显示仅包含标签“SEP”作为分隔符的行,然后生成下一个示例的行。
当示例包含自启动以来的值时,atop 将在生成该示例的行之前显示仅包含标签“RESET”的行。

每个输出行的第一部分由以下六个字段组成:label(标签的名称)、host(本机的名称)、纪元(此间隔的时间,以自 1970 年 1 月 1 日以来的秒数表示)、日期(此间隔的日期,格式为 YYYY/MM/DD)、时间<(此间隔的时间,格式为 HH:MM:SS)和 interval(此间隔经过的秒数)。

每个输出行的后续字段取决于标签:

CPU

后续字段:该机器每秒的时钟节拍总数、处理器数量、系统模式下所有 CPU 的消耗(时钟节拍)、用户模式下所有 CPU 的消耗(时钟节拍)、用户模式下所有 CPU 的消耗Niced 进程的用户模式(时钟滴答)、空闲模式下所有 CPU 的消耗(时钟滴答)、等待模式下所有 CPU 的消耗(时钟滴答)、IRQ 模式下所有 CPU 的消耗(时钟滴答),所有 CPU 处于软中断模式的消耗(时钟周期)、所有 CPU 处于窃取模式的消耗(时钟周期)、所有 CPU 处于访客模式的消耗(时钟周期)、重叠用户模式、所有 CPU 的频率、频率百分比所有 CPU、所有 CPU 执行的指令以及所有 CPU 的周期。

cpu

后续字段:该机器每秒的时钟节拍总数、处理器编号、该 CPU 在系统模式下的消耗(时钟节拍)、该 CPU 在用户模式下的消耗(时钟节拍)、该 CPU 在好的进程的用户模式(时钟周期)、该 CPU 在空闲模式下的消耗(时钟周期)、该 CPU 在等待模式下的消耗(时钟周期)、该 CPU 在 irq 模式下的消耗(时钟周期),该 CPU 在软中断模式下的消耗(时钟滴答)、该 CPU 在窃取模式下的消耗(时钟滴答)、该 CPU 在访客模式下的消耗(时钟滴答) 重叠用户模式、该 CPU 的频率、该 CPU、该 CPU 执行的指令以及该 CPU 的周期。

CPL

后续字段:处理器数量、最后一分钟的平均负载、最后五分钟的平均负载、最后十五分钟的平均负载、上下文切换次数和设备中断次数。

GPU

后续字段:GPU编号、bus-id字符串、GPU字符串类型、上一秒GPU繁忙百分比(如果不可用则为-1)、上一秒内存繁忙百分比(如果不可用则为-1)、总内存大小(KiB) ,此时已用内存(KiB),间隔内采集的样本数,间隔内累计GPU繁忙百分比(除以平均繁忙百分比的样本数,如果没有则为-1),累计内存繁忙百分比间隔期间的内存占用情况(除以平均繁忙百分比的样本数,如果不可用,则为 -1),以及该间隔期间的累积内存占用情况(除以平均占用百分比的样本数)。

MEM

后续字段:本机的页面大小(以字节为单位)、物理内存大小(页)、可用内存大小(页)、页缓存大小(页)、缓冲区缓存大小(页)、slab 大小(页) )、缓存中的脏页(页)、slab 的可回收部分(页)、vmware 的气球页总大小(页)、共享内存总大小(页)、常驻共享内存大小(页)、交换共享内存大小内存(页)、大页大小(以字节为单位)、大页总大小(大页)、空闲大页(大页)大小、ZFSonlinux 的 ARC(缓存)大小(页)、共享页大小KSM(页)、KSM 共享页大小(页)、TCP 套接字使用的内存大小(页)、UDP 套接字使用的内存大小(页)以及页表大小(页)。

SWP

后续字段:本机的页面大小(以字节为单位)、交换大小(页)、可用交换大小(页)、交换缓存大小(页)、提交空间大小(页)、提交空间限制(页) )、交换缓存的大小(页)、zswap 中存储的压缩页的大小(页)以及 zswap 中压缩池的总大小(页)。

LLC

后续字段:LLC id、LLC 的使用百分比、该 LLC 的总内存带宽(以字节为单位)、该 LLC 本地 NUMA 节点上的内存带宽(以字节为单位)。

PAG

后续字段:本机的页面大小(以字节为单位)、页面扫描数、allocstalls 数、0(将来使用)、交换数、交换数、oomkills 数(当计数器不存在时为 -1)、进程因运行内存压缩而停顿、成功迁移的页面总数、迁移的 NUMA 页面数、从块设备读取的页面数以及写入块设备的页面数。

PSI

后续字段:此系统上存在的 PSI 统计信息(n 或 y)、CPU 某些 avg10、CPU 某些 avg60、CPU 某些 avg300、CPU 某些间隔期间累积微秒、内存某些 avg10、内存某些 avg60、内存某些 avg300、内存某些累积微秒间隔期间,内存满 avg10,内存满 avg60,内存满 avg300,间隔期间内存满累计微秒,I/O 一些 avg10,I/O 一些 avg60,I/O 一些 avg300,I/O 一些间隔期间累计微秒,I /O full avg10、I/O full avg60、I/O full avg300、间隔期间 I/O full 累计微秒数。

LVM/MDD/DSK

对于每个逻辑卷/多个设备/硬盘显示一行。
后续字段:名称、I/O 花费的毫秒数、发出的读取次数、读取传输的扇区数、发出的写入次数、写入传输的扇区数、发出的丢弃次数(如果不支持,则为 -1),为丢弃而传输的扇区数、当前正在处理的请求数(尚未完成)以及磁盘繁忙时的平均队列深度。

NFM

后续字段:挂载的 NFS 文件系统、读取的总字节数、写入的总字节数、正常系统调用读取的字节数、正常系统调用写入的字节数、直接 I/O 读取的字节数、字节数由直接 I/O 写入的页数、由内存映射 I/O 读取的页数以及由内存映射 I/O 写入的页数。

NFC

后续字段:传输的RPC次数、传输的读RPC次数、传输的写RPC次数、RPC重传次数、授权刷新次数。

NFS

后续字段:已处理的 RPC 数、已接收的读 RPC 数、已接收的写 RPC 数、客户端读取的字节数、客户端写入的字节数、格式错误的 RPC 数、授权错误的 RPC 数、来自不良客户端的 RPC、已处理的网络请求总数、通过 TCP 处理的网络请求数、通过 UDP 处理的网络请求数、已处理的 TCP 连接数、回复缓存命中数、回复缓存未命中数以及数量未缓存的请求。

NET

首先,为 TCP/IP 堆栈的上层生成一行。
后续字段:动词“上”、TCP接收的数据包数、TCP发送的数据包数、UDP接收的数据包数、UDP发送的数据包数、IP接收的数据包数、IP发送的数据包数、 IP 传递到高层的数据包数量、 IP 转发的数据包数量、 输入错误数 (UDP)、 noport 错误数 (UDP)、 主动打开数 (TCP)、 被动打开数 (TCP)、被动打开数 (TCP)、此时已建立的连接数 (TCP)、重传段数 (TCP)、输入错误数 (TCP) 和输出复位数 (TCP)。

接下来,每个接口显示一行。
后续字段:接口名称、接口接收报文数、接口接收字节数、接口发送报文数、接口发送字节数、接口速率、双工模式(0=半双工) ,1=满)。

IFB

后续字段:InfiniBand接口名称、端口号、通道数、最大速率(Mbps)、接收字节数、发送字节数、接收数据包数、发送数据包数。

NUM

后续字段:NUMA节点号、本机页面大小(以字节为单位)、本节点碎片百分比、物理内存大小(页)、空闲内存大小(页)、最近(活动)使用的内存(页)、最近(不活动)使用的内存(页)、缓存文件数据的大小(页)、缓存中的脏页(页)、用于内核 malloc 的板内存(页)、可回收的板内存(页)、共享内存包括tmpfs(页)和总大页(页)。

NUC

后续字段:NUMA 节点号、该节点的处理器数量、系统模式下的节点 CPU 消耗(时钟周期)、用户模式下的节点 CPU 消耗(时钟周期)、用户模式下的节点 CPU 用于 niced 进程的消耗(clock-ticks)、空闲模式下的节点 CPU 消耗 (clock-ticks)、等待模式下的节点 CPU 消耗 (clock-ticks)、irq 模式下的节点 CPU 消耗 (clock-ticks)、处于等待模式下的节点 CPU 消耗软中断模式(时钟周期)、窃取模式下节点 CPU 的消耗(时钟周期)以及客户模式下节点 CPU 的消耗(时钟周期)与用户模式重叠。

PRG

对于每个进程显示一行。
后续字段:PID(任务的唯一ID)、名称(括号或下划线之间为空格)、状态、真实uid、真实gid、TGID(相关任务/线程的组号)、线程总数、退出代码(以防万一)致命信号的数量:信号号 + 256)、开始时间(纪元)、完整命令行(括号或下划线之间的空格)、PPID、处于“运行”状态的线程数 (R)、处于“可中断睡眠”状态的线程数' (S)、处于“不间断睡眠”状态的线程数 (D)、有效 uid、有效 gid、保存的 uid、保存的 gid、文件系统 uid、文件系统 gid、终止进程的运行时间(赫兹)、is_process (y/n )、OpenVZ 虚拟 pid (VPID)、OpenVZ 容器 id (CTID)、Docker 容器 id (CID)、指示任务是否在此时间间隔内新启动 ('N')、cgroup v2 路径名(括号或下划线之间为空格) )和结束时间(纪元或 0,如果仍然有效)。

PRC

对于每个进程显示一行。
后续字段:PID、名称(括号或下划线之间的空格)、状态、本机每秒的时钟节拍总数、用户模式下的 CPU 消耗(时钟节拍)、系统模式下的 CPU 消耗(时钟节拍)、nice值、优先级、实时优先级、调度策略、当前 CPU(退出进程为 -1)、睡眠平均值、TGID(相关任务/线程的组数)、is_process (y/n)、此线程或的运行队列延迟(以纳秒为单位)所有线程(如果是进程)、该线程的等待通道(括号或下划线之间的空格)、块 I/O 延迟(时钟信号)、以百分比计算的 cgroup v2 'cpu.max'(-3 表示不支持 cgroup v2) ,-2 表示未定义,-1 表示最大值),上级目录中 cgroup v2 最严格的 'cpu.max' 以百分比计算(-3 表示不支持 cgroup v2,-2 表示未定义,-1 表示最大值),自愿数量上下文切换,以及非自愿上下文切换的数量。

PRE

对于每个进程显示一行。
后续字段:PID、名称(括号或下划线之间为空格)、进程状态、GPU 状态(A 表示活动、E 表示退出、N 表示无 GPU 用户)、该进程使用的 GPU 数量、反映已使用 GPU 的位列表、GPU区间内繁忙百分比、区间内内存繁忙百分比、此时内存占用(KiB)、区间内累计内存占用(KiB)、区间内采样数量。

PRM

对于每个进程显示一行。
后续字段:PID、名称(括号或下划线之间为空格)、状态、本机页面大小(以字节为单位)、虚拟内存大小 (KiB)、驻留内存大小 (KiB)、共享文本内存大小 (KiB)、虚拟内存增长 (KiB)、常驻内存增长 (KiB)、次要页面错误数量、主要页面错误数量、虚拟库执行大小 (KiB)、虚拟数据大小 (KiB)、虚拟堆栈大小 (KiB)、使用的交换空间(KiB)、TGID(相关任务/线程的组数)、is_process (y/n)、比例集大小 (KiB)(如果在“R”选项中指定)、虚拟锁定内存空间(KiB)、cgroup v2 '内存。 max',以 KiB 为单位(-3 表示不支持 cgroup v2,-2 表示未定义,-1 表示最大值),上级目录中 cgroup v2 最严格的“memory.max”(以 KiB 为单位)(-3 表示不支持 cgroup v2,-2 表示未定义,-1 表示最大值),cgroup v2 'memory.swap.max'(以 KiB 为单位)(-3 表示不支持 cgroup v2,-2 表示未定义,-1 表示最大值),以及 cgroup v2 最严格的 'memory.swap.max ' 在 KiB 的上层目录中(-3 表示不支持 cgroup v2,-2 表示未定义,-1 表示最大)。

PRD

对于每个进程显示一行。
后续字段:PID、名称(括号或下划线之间为空格)、状态、已安装的过时内核补丁('n')、使用的标准 io 统计信息('y' 或 'n')、磁盘读取次数、累积的读取次数读取的扇区数、磁盘上的写入次数、累计写入的扇区数、取消的写入扇区数、TGID(相关任务/线程的组数)、废弃值 ('n') 和 is_process (y/n)。

PRN

对于每个进程显示一行。
后续字段:PID、名称(在括号或下划线之间表示空格)、状态、加载的内核模块“netatop”(“y”或“n”)、传输的 TCP 数据包数量、传输的 TCP 数据包的累积大小、接收到的 TCP 数据包、接收到的 TCP 数据包的累积大小、传输的 UDP 数据包数量、传输的 UDP 数据包的累积大小、接收到的 UDP 数据包数量、传输的 UDP 数据包累积大小、传输的原始数据包数量(已废弃) ,始终为 0)、收到的原始数据包数量(已过时,始终为 0)、TGID(相关任务/线程的组数)和 is_process (y/n)。
如果内核模块未激活,则每个进程的网络 I/O 计数器不相关。

JSON 输出

使用标志 -J 后跟一个或多个标签列表(以逗号分隔),将为每个样本生成 JSON 输出。 JSON 标签的语法和名称与可解析输出相同。

信号

通过将 SIGUSR1 信号发送到 atop,即使当前计时器间隔尚未超过,也会强制执行新的采样。该行为类似于在交互式会话中按“t”键。

通过向 atop 发送 SIGUSR2 信号,将强制执行最终采样,之后 atop 将终止。

句法

Live measurement in bar graph mode:

atop -B[H] [interval [samples]]

Live measurement in text mode:

atop [-g|-m|-d|-n|-u|-p|-s|-c|-v|-o|-y|-Y] [-C|-M|-D|-N|-A] [-fFG1xR] [interval [samples]]

Live generation of parsable output (white-space separated or JSON):

atop [-Plabel[,label]... [-Z]] [-Jlabel[,label]...] [interval [samples]]

Write raw log files:

atop -w rawfile [-a] [-S] [interval [samples]]

Analyze raw log files in bar graph mode:

atop -B[H]r [rawfile|yyy...] [-b [YYYYMMDD]hhmm] [-e [YYYYMMDD]hhmm]

Analyze raw log files in text mode:

atop -r [rawfile|yyy...] [-b [YYYYMMDD]hhmm] [-e [YYYYMMDD]hhmm] [-g|-m|-d|-n|-u|-p|-s|-c|-v|-o|-y|-Y] [-C|-M|-D|-N|-A] [-fFG1xR]

Generate parsable output from raw log files (white-space separated or JSON):

atop -r [rawfile|yyy...] [-b [YYYYMMDD]hhmm] [-e [YYYYMMDD]hhmm] [-Plabel[,label]... [-Z]] [-Jlabel[,label]...]

例子

以文本模式监控当前系统负载,间隔(默认)10 秒:

atop

以间隔 5 秒的条形图形式监控当前系统负载:

atop -B 5

将有关系统和进程活动的信息以二进制压缩形式存储到一个文件中,在一小时内每隔十分钟存储一次:

atop -w /tmp/atop.raw 600 6

以交互方式查看该文件的内容:

atop -r /tmp/atop.raw

以可解析的格式查看该文件的处理器和磁盘利用率:

atop -PCPU,DSK -r /tmp/atop.raw

以交互方式查看今天标准日志文件的内容:

在 -r 之上

交互查看前天标准日志文件的内容:

顶部 -r yy

以交互方式查看 2023 年 4 月 15 日下午 02:00 起的标准日志文件内容:

atop -r 20230415 -b 1400

连接 2023 年 3 月的所有原始日志文件并生成有关 CPU 利用率的可解析输出:

atopcat /var/log/atop/atop_202303?? | atop -r - -PCPU

要监视系统负载并将其写入文件(以纯 ASCII 格式),在半小时内以一分钟为间隔,并根据内存消耗对活动进程进行排序:

atop -M 60 30 > /log/atop.mem

文件

/var/run/pacct_shadow.d/

包含当 atopacctd 守护进程处于活动状态时 atop 使用的进程记帐影子文件的目录。

/var/cache/atop.d/atop.acct

当atop本身激活进程记帐机制时,内核将记帐记录写入其中的文件。

/etc/atoprc

包含系统范围默认值的配置文件。有关默认值的更多信息,请参阅 atoprc 手册页)。

~/.atoprc

包含个人默认值的配置文件。有关默认值的更多信息,请参阅 atoprc 手册页)。

/etc/default/atop

配置文件来推翻在后台运行以创建每日日志文件的atop的设置。该文件是在安装atop时创建的。默认设置为:

.br

LOGOPTS=""
对数间隔=600
日志生成=28

/var/log/atop/atop_YYYYMMDD

原始文件,其中 YYYYMMDD 是代表当前日期的数字。在后台运行的 atop 使用此名称作为输出文件的默认名称,并在使用 -r 时由 atop 作为输入文件的默认名称 标志。
该文件中的所有二进制系统和进程级数据都以压缩格式存储。

/var/run/netatop.log

包含 netpertask 结构的文件,该结构包含已退出进程的网络计数器。这些结构由 netatopd 守护进程写入,并由 atop 在读取标准进程记帐记录后读取。

也可以看看

atopsar(1), atopconvert(1), atopcat(1), atoprc(5), atopacctd(8), netatop(4), netatopd(8), atopgpud(8), logrotate(8)
https://www.atoptool.nl

作者

格尔洛夫·朗格维尔德 (gerlof.langeveld@atoptool.nl)
JC范温克尔