洞悉 Linux 系统运行细节,使用 atop 监测和回看系统负载状态

本文最后更新于 2024年11月12日 下午

Linux系统的资源使用情况,你可以通过使用命令如freetopnetstat来实时监控内存、CPU及端口的使用状态。对于需要追踪历史资源消耗动态的场景,atop命令则能有效帮助用户查看过去的系统负载情况。

本篇教程的灵感源自一位小伙伴的真实经历:她曾遇到服务器不定期卡顿的问题,没想到腾讯云的客服指导她使用 atop 进行故障排查,结果发现是 dnf-makecache 周期性执行导致的系统卡顿。腾讯云客服的专业性让人印象深刻。鉴于此,本次使用腾讯云的轻量应用服务器详解 atop 的使用,更好地监控服务器性能。

什么是 atop

atop 是一个用于Linux和Unix类操作系统的时间间隔内系统活动分析工具。看它的名字,很容易联想到 Linux 自带的 top,其实确实挺像的,不过与 top 更像的,应该是 btophtopatop 主要是允许用户从命令行界面上查看系统过去的CPU使用率、磁盘I/O、内存与交换分区使用情况。甚至可以记录进程统计以及网络接口活动在内的多种信息。

atop

atop 的 GitHub 项目地址: https://github.com/Atoptool/atop/

对比 top

我们先来看看 top 命令:

1
2
3
4
5
# Linux 上 使用 top -h 输出
top -h
procps-ng 3.3.17
Usage:
top -hv | -bcEeHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]

比如: 我们想看 mintimate 用户的进程占用,就可以使用:

1
top -u mintimate

top 添加 user 过滤

发现 chromium 的进程比较多,这个时候,还可以用 ps 命令查看端口号:

1
2
3
4
# ps 命令查看
ps aux | grep 'chromium'
# 再秀一下(o′ω`o)ノ,ps 过滤 chromium 并 kill
ps aux | grep 'chromium' | grep -v grep | awk '{ print $2 }' | xargs kill

你可以看到,top 命令是一个实时展示 Linux 系统中进程活动及其资源占用情况的动态监视工具,无法查看历史数据

至于 atop 的主要特点包括:

  • 自动周期性记录:它可以定期捕获系统活动快照,这些快照可以存储在日志文件中以供日后分析。
  • 历史数据回放:用户能够以类似于“即时”视图的方式浏览过去的数据,其实就是回看历史快照。
  • 丰富的信息展示:提供丰富的系统性能指标,涵盖系统层面的各种活动。
  • 灵活的查询选项:支持对特定时间段内的数据进行筛选和查询。

因此,那些需要深入了解其系统过去一段时间内行为的系统管理员来说,atop 是一个非常有价值的工具。

你可以理解为,是加强且命令行版本的腾讯云控制台监控曲线:

腾讯云监控曲线

区别在于,腾讯云轻量应用服务器控制台的曲线是宏观的,但是 atop 的信息更加细致,可以到进程级别。

选择 atop?

主要的原因,还是 atop 的历史数据回放功能。虽然我们自己也可以用 crontab 来定时记录系统活动快照,但是,atopsystemctl 服务,可以自动记录系统活动快照,而且,atop 还可以自动删除过期的系统活动快照,非常方便。与其自己造造轮子,不如直接使用 atopsystemctl 服务。

其次,还有一个很有趣的事情: 就是粉丝用户的反馈,她说她在用腾讯云的轻量应用服务器,总是不知道为什么,服务器卡顿,腾讯云的客服教她使用 atop 排障,最后发现是服务器内 dnf-makecache 周期性执行,导致系统卡顿,感觉腾讯云的客服很专业,很细心;同时,她想更了解这个工具。

很 Nice 的客服

我是很惊讶的,没想到腾讯云的客服这么专业; 而且这个问题本身,我认为是超出腾讯云服务范围的,本来就是用户自己的事情,但是腾讯云的售后客服还是给出专业的解决方案,让人感觉挺有温度的,也有点小惊喜(o′ω`o)ノ;

我甚至发现腾讯云的官方文档,也有提到 atop 的使用方法: https://cloud.tencent.com/document/product/213/61086。既然官方都这么推荐,我也就详细介绍一下 atop 的使用方法。

操作前提

其实,作为一个命令行工具,atop 本身没什么要求: atop 的第一个发行版本 1.20 版本,对内核的最低要求是 2.6.2。只要你用的是目前主流 Linux,都可以运行 atop,可能版本有所差异,但是不会影响使用。

当然,我推荐使用腾讯云的轻量应用服务器,目前腾讯云的轻量应用服务器 Linux 系统的内核版本都是足够新的,用来实操本教程都是没有问题的:

腾讯云轻量应用服务器

目前正好腾讯云的轻量应用服务器的有活动,可以进去探索一下:

比如:我就趁机买了这台轻量应用服务器,体验一下 atop 的使用方法:
我使用的轻量应用服务器

建议新建一台服务器后,登录服务器后,第一时间更新一次软件包管理器。这倒不是腾讯云的轻量应用服务器有问题,而是更新软件包管理器,可以保证软件包是最新的,避免一些潜在的 bug:

1
2
3
4
# Debian/Ubuntu 系统
apt update && apt upgrade -y
# CentOS/RedHat/OpenCloudOS 系统
yum update && yum upgrade -y

腾讯云 Debian 系统镜像更新软件包管理器

支持创作

制作教程不易,如果热心的小伙伴,想支持创作,可以加入我们的电圈(还可以解锁远程协助、好友位😃):

WebChart Recognise

志同道合的小伙伴也是知音难觅。

  • 开发者爱好群: 👉 如果你对云服务器、CDN、云数据库和Linux等云计算感兴趣,亦或者喜欢编程、设计、产品、运营等领域,欢迎加入我们的开发者爱好群,一起交流学习(目前可能就我一个人?🤔,毕竟才刚刚创建~)。
QQ_Group Recognise

当然,也欢迎在B站或YouTube上关注我们:

更多:

atop 基础使用

其实,atop 大体可以分为两个模式:

  • 实时检测模式: 直接使用 atop 进入 atop 的交互界面,查看实时的数据,并且可以使用命令进行交互。
  • 历史数据模式: 通过预先设定的监控定时器配置,查看历史数据快照。

历史数据模式其实就是历史的实时检测模式快照,所以我们使用 atop 命令,只需要知道 atop 交互模式如何使用,以及配置历史数据模式即可。

交互模式

我们直接使用 atop 进入类似于 top 的交互模式,查看实时数据:

1
2
# 进入 atop 交互模式
atop

atop 交互模式

上方是 CPU、内存、磁盘、网络、GPU 的利用率以及使用量。下方是进程列表,以及进程的详细信息。介绍一下常用的字段含义:

  • PID: 进程 ID(Process ID),唯一标识一个进程的编号。
  • CID/POD: 容器 ID 或 Pod 名称,表示进程所属的容器或 Pod。
  • SYSCPU: 系统 CPU 时间,进程在内核态运行所消耗的 CPU 时间。
  • USRCPU: 用户 CPU 时间,进程在用户态运行所消耗的 CPU 时间。
  • RDELAY: 资源延迟时间,进程等待资源(如 CPU、内存、I/O 等)所消耗的时间。
  • BDELAY: 块设备延迟时间,进程等待块设备(如磁盘 I/O)所消耗的时间。
  • VGROW: 虚拟内存增长量,进程的虚拟内存使用量的变化。
  • RGROW: 常驻内存增长量,进程的常驻内存(物理内存)使用量的变化。
  • RDDSK: 读取磁盘的数据量,进程从磁盘读取的数据量。
  • WRDSK: 写入磁盘的数据量,进程向磁盘写入的数据量。
  • RNET: 接收网络数据量,进程从网络接收的数据量。
  • SNET: 发送网络数据量,进程向网络发送的数据量。
  • RUID: 实际用户 ID(Real User ID),启动进程的用户的 ID。
  • EUID: 有效用户 ID(Effective User ID),进程当前运行时的用户 ID。
  • ST: 进程状态(State),表示进程的当前状态(如运行、睡眠、僵尸等)。
  • EXC: 进程的退出代码(Exit Code),进程终止时的退出状态码。
  • THR: 线程数(Threads),进程中当前运行的线程数量。
  • S: 进程的调度优先级(Scheduling priority),进程的调度优先级。
  • CPUNR: CPU 编号(CPU Number),进程当前运行的 CPU 编号。
  • MEM: 内存使用量,进程当前使用的内存量。
  • CMD: 命令行,启动进程的命令行。

这些字段提供了关于系统中各个进程的详细信息,帮助用户监控和分析系统性能。

这个时候,你按下 q 即可退出,或者按住 Ctrl + C 退出。如果你保持这个界面,并不退出,可以按 h 或者 ? 查看帮助信息:

atop 帮助信息

给大家翻译一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
显示模式:
'B' - 显示系统利用率的条形图(切换)


文本模式下关于 cgroups v2 的信息:
'G' - cgroups v2 指标
2-7 - cgroups 树级别选择(默认 7)
8 - 显示与相关进程的 cgroups,除了内核进程
9 - 显示与相关进程的 cgroups
'a' - 显示所有 cgroups/进程,而不仅仅是活跃的(切换)
'C' - 按 CPU 活动排序
'M' - 按内存利用率排序
'D' - 按磁盘传输速率排序


文本模式下关于进程的信息:
'g' - 通用信息(默认)
'm' - 内存详情
'd' - 磁盘详情
'n' - 网络详情
's' - 调度和线程组信息
'e' - GPU 详情
'v' - 各种信息(父进程 ID、用户/组、日期/时间、状态、退出码)
'c' - 每个进程的完整命令行
'o' - 使用自定义的输出行定义


按以下顺序排序进程列表:
'C' - CPU 活动
'M' - 内存消耗
'D' - 磁盘活动
'N' - 网络活动
'E' - GPU 活动
'A' - 最活跃的系统资源(自动模式)


累积的进程数据:
'u' - 每个用户的总资源消耗
'p' - 每个程序的总资源消耗(即相同进程名)
'j' - 每个容器/Pod 的总资源消耗
'U' - 聚焦于特定用户名(正则表达式)
'P' - 聚焦于特定程序名(正则表达式)
'J' - 聚焦于特定容器/Pod 名
'/' - 聚焦于特定命令行字符串(正则表达式)
'I' - 聚焦于特定进程 ID (PID)
'Q' - 聚焦于特定进程/线程状态


系统资源选择(在标题行中显示的按键):
'S' - 聚焦于特定系统资源(正则表达式)


屏幕处理:
^L - 重绘屏幕
PgDn - 显示进程列表的下一页(或 ^F)
PgUp - 显示进程列表的上一页(或 ^B)
ArDn - 向下箭头,显示进程列表的下一行
ArUp - 向上箭头,显示进程列表的上一行
ArRt - 向右箭头,显示完整命令行的下一个字符
ArLt - 向左箭头,显示完整命令行的上一个字符


展示(在标题行中显示的按键):
'a' - 显示所有进程/线程(而不是活跃的)(切换)
'y' - 显示进程内的线程(线程视图)(切换)
'Y' - 排序线程(与线程视图结合使用时)(切换)
'f' - 显示固定数量的标题行(切换)
'F' - 禁止排序系统资源(切换)
'X' - 在输出中禁止显示已终止的进程(切换)
'x' - 不使用颜色来表示高占用(切换)
'1' - 显示每秒平均值而不是总值(切换)
'R' - 计算比例集大小 (PSIZE)(切换)
'W' - 确定每个线程的 WCHAN(切换)


其他命令:
'i' - 更改间隔计时器(0 = 仅手动触发)
't' - 手动触发以强制下一个采样
'r' - 将计数器重置为启动时的值
'z' - 暂停按钮以冻结当前采样(切换)

'l' - 限制每个 CPU、磁盘和接口资源的行数
'k' - 终止一个进程(即发送信号)

'V' - 版本信息
'?' - 帮助信息
'h' - 帮助信息
'q' - 退出此程序

可以看到,命令还是很强大的。通常使用,我们只需要进入交互模式,之后排序一下进程列表,然后查看进程的详细信息即可。

比如: 如果你想看那个进程占用了最多的 CPU,那么我们只需要进入交互模式,然后按 C (按 CPU 消耗资源排序) 排序,然后按 g (显示通用信息) 查看进程信息,这个时候,你可以按 z 冻结刷新,观察好后按 q 退出即可。

在进入交互模式的时候,你可以直接追加参数,就不用进入交互模式后,再按相关指令排序进程列表或者切换展示视图了:

1
2
3
4
# 进入交互模式并按使用 CPU 占用率排序
atop -C
# 进入交互模式并按使用内存的占用率排序
atop -M

接下来,我们看几个具体使用的场景。

kill 进程

我们使用 atop 的时候,如果想杀掉某个进程,那么使用 atop 也是可以操作的。先使用 z 冻结刷新,之后你可以选择资源排序(比如: C 就是使用 CPU 占用率排序[默认],按 M 就是使用内存的占用率排序):

atop 冻结刷新

我们只需要按 k (终止一个进程) ,进入选择进程的输入界面:

atop 输入杀死的进程

比如,我们这里 kill 掉 chromium 进程,输入进程的 PID: 619981

输入目标进程

之后,询问发送的信号:

1
Signal [15]

默认情况,我们直接填 15 就可以了,也就是我们 kill 「pid」 的默认信号。如果无法 kill 可以考虑使用 root 权限运行 atop,或者使用 9

  • SIGKILL (9):强制终止信号。不能被捕获或忽略,进程必须立即终止。
  • SIGTERM (15):终止信号。通常用于请求进程正常终止。

就可以杀掉这个进程了。

进程杀死成功

查看网络流量

首先,网络模块 netatop 并不是 atop 自带的模块。是需要手动安装的,和 atop 不同的是,它使用 动态内核模块支持(DKMS) 来装载到 atop。安装方法,可以看下一个章节的 网络扩展插件

在安装好后,我们只需要进入交互模式,然后按 n (网络流量) 排序,就可以看到网络流量了。

不过可能会出现错误 Module 'netatop' or 'netatop-bpf' not active or no root privs; request ignored!:

atop 查看网络流量错误

这个时候,有两种可能:

  • 权限不足: atop 没有权限查看网络流量,这个时候,我们只需要使用 root 权限运行 atop 即可
  • netatop 进程没有启动: atop 会自动关联 netatop 进程,如果 netatop 进程没有启动,那么就会报错。可以使用 systemctl status netatop 查看 netatop 进程是否启动,如果没启动,那么可以使用 systemctl start netatop 启动 netatop 进程

安装 atop

安装好后的 atop 主要包括两个部分:

  • atop 命令: 用于实时查看系统负载状态。
  • atopsystemnctl 服务: 用于定期记录系统活动快照。如果要查看历史数据,atopsystemctl 服务是必不可少的。

至于安装 atop, 方法很多,主要有:

  • 软件包管理器安装: atop 已经在各个软件包管理器内发布,不过版本可能不是最新的。
  • 源码编译安装: 下载 atop 的源码,可以直接安装最新或者指定版本的 atop

安装 atop 命令,都会自动配置 atopsystemctl ;接下来我们都简单介绍一下上述两种安装方法。

好奇

软件包管理器

atop 工具,已经在各个软件包管理器内发布,你只需要使用系统自带的软件包管理器进行安装即可:

1
2
3
4
# Debian/Ubuntu
apt install atop
# CentOS/RedHat/OpenCloudOS
yum install atop

源码编译

如果你想用高版本的 atop ,那么就需要手动编译,可以在 atop 官方下载界面 找到下载地址,之后下载到本地编译安装,比如我这里使用腾讯云轻量应用服务器操作:

1
2
3
4
5
# 下载源代码
wget https://www.atoptool.nl/download/atop-2.11.0.tar.gz
# 解压并进入
tar -xf atop-2.11.0.tar.gz
cd atop-2.11.0

下载 2.11 版本的源码

之后,进行编译:

1
2
3
4
5
6
# 编译
make
# 安装
make install
# 查看版本信息
atop -V

手动编译安装

网络扩展插件

默认情况下,atop 没有自带网络监控模块(即可: netaop),需要我们自己安装。同样,首先前往官网,下载最新的 netatop 源码:

1
2
3
4
5
# 这里下载 3.2.2 版本的
wget https://www.atoptool.nl/download/netatop-3.2.2.tar.gz
# 解压并进入
tar -xf netatop-3.2.2.tar.gz
cd netatop-3.2.2

之后进行安装:

1
2
3
4
# 编译
make
# 安装
make install

如果编译过程出现内核头文件找不到,类似于:

1
2
3
4
./mkversion
make -C /lib/modules/5.10.0-32-amd64/build M=/usr/local/src/netatop-3.2.2 modules
make[1]: *** /lib/modules/5.10.0-32-amd64/build: No such file or directory. Stop.
make: *** [Makefile:13: netatop.ko] Error 2

这个时候,我们可以使用uname -r查看 Linux 内核版本,并使用软件包管理器安装内核头部文件:

1
2
3
4
# Debian/Ubuntu 
apt install linux-headers-$(uname -r)
# CentOS/RedHat/OpenCloudOS
yum install kernel-devel-$(uname -r)

内核头文件安装

如果出现

1
2
3
4
cd /usr/src; dkms add -m netatop -v 3.2.2
Error! Could not find module source directory.
Directory: /usr/src/netatop-3.2.2 does not exist.
make: *** [Makefile:23: install] Error 2

那么是 netatop 的源码需要放在 /usr/src 下的原因。比如:

移动源码并继续编译

这个时候 netatop 就已经安装好了:

1
2
# 使用 systemctl 查看 netatop 的运行状态
systemctl status netatop

netatop 运行状态

历史监控日志

上文说到,atop 部署和安装后,会自动配置一个由 systemctl 所管理的守护进程,这个守护进程会自动运行 atop。如果想卸载这个守护进程,可以使用 systemctl stop atop 停止 atop 守护进程,然后使用 systemctl disable atop 禁用 atop 守护进程。

查看这个守护进程的状态,可以使用 systemctl status atop 命令:

查看 atop 守护进程状态

根据上面的输出,我们可以看到,atop 守护进程的配置文件是 /lib/systemd/system/atop.service,我们可以通过 /lib/systemd/system/atop.service 查看这个配置文件的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Unit]
Description=Atop advanced performance monitor
Documentation=man:atop(1)

[Service]
Type=simple
Environment="LOGOPTS="
Environment="LOGINTERVAL=600"
Environment="LOGGENERATIONS=28"
Environment="LOGPATH=/var/log/atop"
EnvironmentFile=/etc/default/atop
ExecStartPre=/bin/sh -c 'test -d "${LOGPATH}" || mkdir -p "${LOGPATH}"'
ExecStartPre=/bin/sh -c 'test -n "$LOGINTERVAL" -a "$LOGINTERVAL" -eq "$LOGINTERVAL"'
ExecStartPre=/bin/sh -c 'test -n "$LOGGENERATIONS" -a "$LOGGENERATIONS" -eq "$LOGGENERATIONS"'
ExecStart=/bin/sh -c 'exec /usr/bin/atop ${LOGOPTS} -w "${LOGPATH}/atop_$(date +%%Y%%m%%d)" ${LOGINTERVAL}'
ExecStartPost=/usr/bin/find "${LOGPATH}" -name "atop_*" -mtime +${LOGGENERATIONS} -exec rm -v {} \;
KillSignal=SIGUSR2

[Install]
WantedBy=multi-user.target

解释一下各个参数:

  • LOGOPT: 控制日志文件记录,允许您自定义日志文件的保存路径、命名规则、滚动周期以及其他与日志记录相关的选项。为""表示不使用任何额外选项;
  • LOGINT: 监控周期,单位是秒;
  • LOGGEN: 日志保留时间,单位是天;
  • LOGPATH: 指定atop日志文件的路径。

当然,你也不用修改这个配置文件,只需要修改 /etc/default/atop 文件即可覆写 /lib/systemd/system/atop.service 内的相关配置。

覆写配置文件

使用 vim 覆写或新建 /etc/default/atop 文件,比如,我们想修改 atop 的日志间隔时间,那么只需要修改 LOGINTERVAL 即可,比如:

1
2
3
4
LOGOPTS=""
LOGINTERVAL=30
LOGGENERATIONS=7
LOGPATH=/var/log/atop

上述的配置,表示 atop 的日志间隔时间是 30 秒,日志保留时间是 7 天,日志文件保存在 /var/log/atop 目录下。

之后,我们只需要重启 atop 守护进程即可生效:

1
systemctl restart atop

配置 atop 守护进程

那么,atop 守护进程产生的日志文件,如何有效地查看某段时间内的系统负载变化呢?

我们只需要用 atop -r 「日志文件」 命令即可,比如:

1
2
# 查看 20241029 日志文件
atop -r /var/log/atop/atop_20241029

查看 atop 守护进程历史日志

这个时候,我们按 t 可以查看下一个时间快照节点,按 shift + t 可以查看上一个时间快照节点。如果你想直接查看某个时间节点,那么可以使用 b,之后出现的提示框:

1
2
# 输入时间戳,其中年月日和秒是可选的
Enter new time (format [YYYYMMDD]hhmm[ss]):

查看 atop 守护进程历史日志

是不是很方便呢?还有更方便的,你可以直接用组合键:

1
2
# 查看 20241029 日志文件,时间戳为 23 点
atop -r /var/log/atop/atop_20241029 -b 2300

atop 卸载

其实,我个人认为 atop 是没有必要卸载的,因为 atop 的功能非常强大,而且 atop 的守护进程对系统资源的消耗不大(可能只有 10M 左右的内存占用);

如果关闭 atopnetatop 的守护进程 ,那么 atop 甚至没有资源的占用(top 命令的 plus 版本🤔)。

如果还是想卸载 atop ~~

Keep Going

软件包管理器安装的 atop,那么卸载 atop 就非常简单了,只需要使用 aptyum 卸载即可:

1
2
3
4
# Debian/Ubuntu
apt purge atop
# CentOS/RHEL
yum remove atop

反编译 atop

如果你是手动编译安装的 atop,那么卸载 atop 就需要手动删除(其实就是把 make install 自动执行的反过来(因为源码包内没有提供 uninstall 的脚本,只能手动反操作了):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 停止并禁用 atop 服务
systemctl stop atop
systemctl disable atop
# 停止并禁用 atopacct 服务
systemctl stop atopacct
systemctl disable atopacct
# 删除 systemd 服务文件
rm /lib/systemd/system/atop.service
rm /lib/systemd/system/atopgpu.service
rm /lib/systemd/system/atop-rotate.service
rm /lib/systemd/system/atop-rotate.timer
rm /lib/systemd/system/atopacct.service
# 删除 systemd 系统服务的软链接
rm /etc/systemd/system/multi-user.target.wants/atopacct.service
rm /etc/systemd/system/multi-user.target.wants/atop.service
rm /etc/systemd/system/timers.target.wants/atop-rotate.timer
# 删除二进制文件和配置文件
rm /usr/bin/atop
rm /usr/bin/atopsar
rm /usr/sbin/atopacctd
rm /usr/sbin/atopgpud
rm /usr/bin/atopconvert
rm /usr/bin/atopcat
rm /usr/bin/atophide
rm /etc/default/atop
# 删除 man 页面
rm /usr/share/man/man1/atop.1
rm /usr/share/man/man1/atopsar.1
rm /usr/share/man/man1/atopconvert.1
rm /usr/share/man/man1/atopcat.1
rm /usr/share/man/man1/atophide.1
rm /usr/share/man/man5/atoprc.5
rm /usr/share/man/man8/atopacctd.8
rm /usr/share/man/man8/atopgpud.8
# 删除 atop 日志目录
rm -rf /var/log/atop

卸载 netatop

既然 atop 已经卸载,那么也没必要保留 netatop 了,同样根据编译步骤,逆向操作即可:

1
2
3
4
5
# 停止并禁用 netatop 服务
systemctl stop netatop
systemctl disable netatop
# dkms 移除 netatop 模块
dkms remove -m netatop -v 3.2.2 --all

卸载 netatop

END

哈哈,我们了解了 atop 的优势,特别是其自动周期性记录和历史数据回放功能。本次的 atop 分享就到这里啦~~ 感谢阅读。也给腾讯云的服务团队点个赞,非常专业和耐心,帮用户解决实际的问题

其实和 atop 类似的工具还有很多(比如: htopglancesnmon 等),主要还是看个人的使用习惯。就好比,查看端口的占用情况,你可以使用 netstatsslsof 等命令,也可以使用 nmapncat 等工具;

如果你有更好的工具推荐,欢迎在评论区留言;有机会,我也给大家出一些其他工具的使用教程。

稳了

最后,如果你觉得本篇教程对你有帮助,欢迎在B站、知乎、公众号、博客园等平台分享给更多人。也欢迎加入我们的开发者交流群,一起交流学习,共同进步。



洞悉 Linux 系统运行细节,使用 atop 监测和回看系统负载状态
https://www.mintimate.cn/2024/11/11/GuideToATop/
作者
Mintimate
发布于
2024年11月11日
许可协议