详解Linux atop命令:系统性能监控工具使用教程
atop命令是Linux系统资源监控工具,它显示与系统资源负载量相关的大量信息,并可在进程级别进行监控。掌握此实用程序对用户来说具有无限优势。
首先,我们必须在系统上安装atop命令。Debian/Ubuntu用户可以通过以下方式完成安装:
sudo apt install atop
其他Linux用户可以使用他们的标准软件包管理器,然后输入”atop”关键词。
这个命令具有显示系统相关多个机密信息的功能。为了防止数据被窃取,我们可以使用’sudo su’或’sudo -s’获得提升的访问权限。关于sudo,我们有完整的文档。
atop命令的基本输出
为了显示系统资源的所有进程级使用情况,我们可以在终端中简单地运行’atop’命令。
atop

如我们所见,整个布局分为两个面板。上面的面板提供了系统资源的累积使用情况,而下面的面板则显示了每个进程的细分信息。让我们来看看每一个。
atop命令的累积统计数据
这个视图中的每个条目都集中于特定的系统资源。
1. 进程相关的统计数据
- PRC – 代表”process”(进程)。
- 前两个值是’sys’(系统)和’user’(用户)进程消耗的时间。
- 接下来是进程总数,表示为’#proc’。
- 下一个值是系统中当前运行的线程数(’#trun’)。
- ‘#tslpi’表示当前可中断睡眠的线程数。
- ‘#tslpu’表示当前不可中断睡眠的线程数。
- 接下来的值是僵尸进程的数量。
- 然后是clone系统调用的数量。
- 最后一个值是在经过时间内结束的进程数(’#exit’)。
2. 与性能相关的统计数据
- CPU – 与CPU利用率相关。
- 前两个值显示所有核心被系统和用户进程利用的百分比。
- 用于中断请求的CPU百分比(’irq’)。
- 下一个值是所有核心组合的空闲百分比。
- 接下来的值表示每个CPU核心必须等待的时间。
- 接下来是窃取时间的百分比。
- ‘guest’表示客户机百分比,即在其他虚拟机上花费的CPU时间。
- 最后两个值表示CPU的当前频率。
- 现在,’atop’为每个核心独立显示上述统计数据。
- CPL – 指CPU负载。
- 前三个值是不同时间段的平均负载:1分钟、5分钟和15分钟。
- 接下来是上下文切换次数(’csw’)。
- 接下来是中断次数(’intr’)。
- 最后一个值是可用CPU的数量。
3. 与内存相关的统计数据
- MEM – 内存利用率
- 支持的总物理内存。
- 当前空闲的内存。
- 当前的缓存内存。
- ‘buff’即”buffer”(缓冲区),是文件系统元数据消耗的内存量。
- 内核内存分配的内存总和显示为’slab’。
- 共享内存的量。
- SWP – 交换内存。
- 交换空间的总大小。
- 当前空闲的交换空间。
- 当前使用的交换内存。
- 交换内存的利用率。
4. 与硬盘相关的统计数据
- DSK – 磁盘使用情况
- 第一个值表示系统忙于处理请求的时间百分比。
- 发出的读取请求数。
- 发出的写入请求数。
- 每次读取请求读取数据(KB)的速率。
- 每次写入请求写入数据(KB)的速率。
- 接下来的两个值是磁盘上读取和写入的时间速率(以兆字节为单位)。
- 最后一个值是处理请求所花费的平均毫秒数。
5. 网络相关统计数据
- NET – 传输层网络统计
‘transport’表示网络中的传输层,处理数据协议。
系统按照TCP协议接收的段数。(’tcpi’)
传输的段数。(’tcpo’)
UDP协议的类似统计。(’udpi’表示UDP输入)和(’udpo’表示UDP输出)。
‘tcpao’是活动的TCP开放连接数。
与之前的’tcppo’相反,它是被动的TCP连接数,但仍处于打开状态。
TCP重传次数为’tcprs’。
UDP输入错误数为’udpie’。 - NET – 网络层网络统计
‘network’表示网络层,处理互联网协议,包括IPv4和IPv6。
网络接口接收的IP包数量。(’ipi’)
从接口传输出去的IP包数量。(’ipo’)
转发到其他接口的IP包数量。(’ipfrw’)
传递的IP包数量。(’deliv’)
最后两个条目是网络接口接收和传输的ICMP包数量。 - 以下行指的是每个活动的网络接口。
第一个值是网络接口的名称,如’wlp19s0’。
接下来的两个数据包是通过特定接口接收和传输的数据包数量。(’pcki’和’pcko’)
网络速度,单位为兆比特(Mbps),表示为’sp’。
每秒接收和传输的比特速率。(’si’和’so’)
接收和传输的数据包中的错误数量。(’erri’和’erro’)。
最后两个值是双向丢弃的数据包。(’drpi’和’drpo’)
这就是对atop命令的顶部面板解释的总结。
每个进程的系统资源
值得注意的是,在一定时间间隔后,”atop”命令中的值会不断更新。
‘atop’命令的通用输出为每个进程条目显示以下细节:
- PID – 进程ID。
- SYSCPU – 进程在系统处理期间消耗的CPU量。
- USRCPU – 进程在用户模式下运行时消耗的CPU量。
- VGROW – 自上次值更新以来进程占用的虚拟内存量。
- RGROW – 自上次值更新以来增长的驻留(物理)内存量。
- RDDSK – 磁盘读取期间传输的数据大小。
- WRDSK – 磁盘写入期间传输的数据大小。
- RUID – 进程正在执行的真实用户ID。
- EUID – 进程正在执行的有效用户ID。
- ST – 进程的当前状态。
- EXC – 进程终止后的退出代码。
- THR – 进程内的线程数。
- S – 进程主线程的当前状态。
- CPU – 整个进程的CPU利用率百分比。
- CMD – 进程的名称。
在这个通用输出中,进程是根据CPU利用率的百分比排序的。从这个特定的输出中,我们可以看到,对于每种类型的系统资源,我们只获得了很少的信息。
让我们尝试研究每种类型系统资源的流程级信息。
atop命令的基于内存的输出
使用”atop”命令可以研究系统中每个正在运行的进程的内存消耗。我们可以通过运行以下命令来实现:
atop -m

正如我们所见,即使我们添加了内存选项”-m”,顶部面板仍保持不变。现在让我们了解每个进程条目的列。
- PID – 进程ID。
- TID – 线程ID。
- MINFLT – 通过访问空闲页面中的数据解决的次要页面错误数。
- MAJFLT – 通过特别从磁盘检索数据解决的主要页面错误数。
- VSTEXT – 进程文本占用的虚拟内存。
- VSLIBS – 进程共享库占用的虚拟内存。
- VDATA – 进程私有数据的虚拟内存大小。
- VSTACK – 进程私有堆栈的虚拟内存大小。
- VSIZE – 进程的总虚拟内存大小。
- RSIZE – 进程占用的总驻留内存。
- MEM – 进程消耗的RAM百分比。
根据”MEM”列对进程进行排序。
由于”atop”在某种程度上是一个交互式命令实用程序,我们可以在其中更改列。我们所要做的就是在显示信息时输入特定选项。
例如,在终端上运行”atop”之后,我们只需输入”m”即可切换到与内存相关的输出。
在Linux中使用atop命令的磁盘特定输出
为了提取与磁盘使用相关的信息,我们可以使用’atop’命令的’-d’选项。
atop -d

在磁盘特定的输出中,并没有很多需要注意的内容。其中一些关键发现包括:
- RDDSK – 磁盘读取期间传输的数据大小。
- WRDSK – 磁盘写入期间传输的数据大小。
- WCANCL – 最初写入但后来撤消的数据大小。
- DSK – 占用的磁盘百分比。
- CMD – 进程的名称。
必须注意,进程是根据”DSK”列排序的。
使用atop命令查找在后台运行的命令
这提供了以命令行输出格式展示的在后台运行的进程命令。
atop -c

如果你复制粘贴”命令行”列下的代码,就可以重新运行相同的进程。这个输出能告诉我们具体是哪个命令在后台启动了该进程。
基于线程的信息
与仅仅检查进程信息不同,atop命令提供了检查特定线程资源利用率的能力。要访问该输出,我们可以运行以下命令之一:
atop -y
当命令已经显示系统资源信息时,您可以选择按下”y”键。

很明显,系统资源列的任何一个都没有发生变化。只增加了各自进程的线程数量。
杂项信息
使用’atop’命令可以提取许多种信息。其中一些有用的信息包括:
找到进程的启动时间
通过使用”-v”选项,我们可以获取进程的特征。
atop -v

每个用户在系统中的进程数量
atop -au

进程正在运行的核心是哪个?
这种特定类型的信息属于进程的调度特征。可以通过使用”-s”选项来访问。
atop -s

几个”高手”的小把戏
有一些”atop”命令的技巧可能会很有用:
- 暂停’atop’屏幕 – 使用’z’键。
- 更改数值更新的时间间隔 – 使用’i’键,然后输入您希望更改为的秒数。
- 中断以立即更新数值 – 使用’t’键。
- 退出显示 – 使用’q’键。
结论
我们知道,”atop”命令对于任何Linux用户来说可能会难以处理。学习这个强大命令需要耐心和毅力。如果有任何疑问,请随时在评论区留言给我们。