如何找人帮我做网站推广,wordpress 文章在数据库,北京封闭最新消息,怎么学平面设计啊Linux系统的资源使用情况#xff0c;你可以通过使用命令如free、top和netstat来实时监控内存、CPU及端口的使用状态。对于需要追踪历史资源消耗动态的场景#xff0c;atop命令则能有效帮助用户查看过去的系统负载情况。
本篇教程的灵感源自一位小伙伴的真实经历#xff1a;…Linux系统的资源使用情况你可以通过使用命令如free、top和netstat来实时监控内存、CPU及端口的使用状态。对于需要追踪历史资源消耗动态的场景atop命令则能有效帮助用户查看过去的系统负载情况。
本篇教程的灵感源自一位小伙伴的真实经历她曾遇到服务器不定期卡顿的问题没想到腾讯云的客服指导她使用 atop 进行故障排查结果发现是 dnf-makecache 周期性执行导致的系统卡顿。腾讯云客服的专业性让人印象深刻。鉴于此本次使用腾讯云的轻量应用服务器详解 atop 的使用更好地监控服务器性能。
什么是 atop
atop 是一个用于Linux和Unix类操作系统的时间间隔内系统活动分析工具。看它的名字很容易联想到 Linux 自带的 top其实确实挺像的不过与 top 更像的应该是 btop 和 htop。atop 主要是允许用户从命令行界面上查看系统过去的CPU使用率、磁盘I/O、内存与交换分区使用情况。甚至可以记录进程统计以及网络接口活动在内的多种信息。 atop 的 GitHub 项目地址: https://github.com/Atoptool/atop/
对比 top
我们先来看看 top 命令
# Linux 上 使用 top -h 输出
top -hprocps-ng 3.3.17
Usage:top -hv | -bcEeHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]比如: 我们想看 mintimate 用户的进程占用就可以使用
top -u mintimate发现 chromium 的进程比较多这个时候还可以用 ps 命令查看端口号:
# 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 来定时记录系统活动快照但是atop 的 systemctl 服务可以自动记录系统活动快照而且atop 还可以自动删除过期的系统活动快照非常方便。与其自己造造轮子不如直接使用 atop 的 systemctl 服务。
其次还有一个很有趣的事情: 就是粉丝用户的反馈她说她在用腾讯云的轻量应用服务器总是不知道为什么服务器卡顿腾讯云的客服教她使用 atop 排障最后发现是服务器内 dnf-makecache 周期性执行导致系统卡顿感觉腾讯云的客服很专业很细心同时她想更了解这个工具。 我是很惊讶的没想到腾讯云的客服这么专业 而且这个问题本身我认为是超出腾讯云服务范围的本来就是用户自己的事情但是腾讯云的售后客服还是给出专业的解决方案让人感觉挺有温度的也有点小惊喜(o′ωo)ノ
我甚至发现腾讯云的官方文档也有提到 atop 的使用方法: https://cloud.tencent.com/document/product/213/61086。既然官方都这么推荐我也就详细介绍一下 atop 的使用方法。
操作前提
其实作为一个命令行工具atop 本身没什么要求: atop 的第一个发行版本 1.20 版本对内核的最低要求是 2.6.2。只要你用的是目前主流 Linux都可以运行 atop可能版本有所差异但是不会影响使用。
当然我推荐使用腾讯云的轻量应用服务器目前腾讯云的轻量应用服务器 Linux 系统的内核版本都是足够新的用来实操本教程都是没有问题的
目前正好腾讯云的轻量应用服务器的有活动可以进去探索一下
本站专属腾讯云轻量应用服务器: https://curl.mintimate.cn/1Hs6qNOVjJo
比如我就趁机买了这台轻量应用服务器体验一下 atop 的使用方法:
建议新建一台服务器后登录服务器后第一时间更新一次软件包管理器。这倒不是腾讯云的轻量应用服务器有问题而是更新软件包管理器可以保证软件包是最新的避免一些潜在的 bug:
# Debian/Ubuntu 系统
apt update apt upgrade -y
# CentOS/RedHat/OpenCloudOS 系统
yum update yum upgrade -yatop 基础使用
其实atop 大体可以分为两个模式
实时检测模式: 直接使用 atop 进入 atop 的交互界面查看实时的数据并且可以使用命令进行交互。历史数据模式: 通过预先设定的监控定时器配置查看历史数据快照。
历史数据模式其实就是历史的实时检测模式快照所以我们使用 atop 命令只需要知道 atop 交互模式如何使用以及配置历史数据模式即可。
交互模式
我们直接使用 atop 进入类似于 top 的交互模式查看实时数据:
# 进入 atop 交互模式
atop上方是 CPU、内存、磁盘、网络、GPU 的利用率以及使用量。下方是进程列表以及进程的详细信息。介绍一下常用的字段含义
PID: 进程 IDProcess 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: 实际用户 IDReal User ID启动进程的用户的 ID。EUID: 有效用户 IDEffective User ID进程当前运行时的用户 ID。ST: 进程状态State表示进程的当前状态如运行、睡眠、僵尸等。EXC: 进程的退出代码Exit Code进程终止时的退出状态码。THR: 线程数Threads进程中当前运行的线程数量。S: 进程的调度优先级Scheduling priority进程的调度优先级。CPUNR: CPU 编号CPU Number进程当前运行的 CPU 编号。MEM: 内存使用量进程当前使用的内存量。CMD: 命令行启动进程的命令行。
这些字段提供了关于系统中各个进程的详细信息帮助用户监控和分析系统性能。
这个时候你按下 q 即可退出或者按住 Ctrl C 退出。如果你保持这个界面并不退出可以按 h 或者 ? 查看帮助信息 给大家翻译一下:
显示模式B - 显示系统利用率的条形图切换文本模式下关于 cgroups v2 的信息G - cgroups v2 指标2-7 - cgroups 树级别选择默认 78 - 显示与相关进程的 cgroups除了内核进程9 - 显示与相关进程的 cgroupsa - 显示所有 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 - 显示进程列表的下一页或 ^FPgUp - 显示进程列表的上一页或 ^BArDn - 向下箭头显示进程列表的下一行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 退出即可。
在进入交互模式的时候你可以直接追加参数就不用进入交互模式后再按相关指令排序进程列表或者切换展示视图了
# 进入交互模式并按使用 CPU 占用率排序
atop -C
# 进入交互模式并按使用内存的占用率排序
atop -M接下来我们看几个具体使用的场景。
kill 进程
我们使用 atop 的时候如果想杀掉某个进程那么使用 atop 也是可以操作的。先使用 z 冻结刷新之后你可以选择资源排序(比如: 按 C 就是使用 CPU 占用率排序[默认]按 M 就是使用内存的占用率排序)
我们只需要按 k (终止一个进程) 进入选择进程的输入界面:
比如我们这里 kill 掉 chromium 进程输入进程的 PID: 619981
之后询问发送的信号:
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 没有权限查看网络流量这个时候我们只需要使用 root 权限运行 atop 即可。netatop 进程没有启动: atop 会自动关联 netatop 进程如果 netatop 进程没有启动那么就会报错。可以使用 systemctl status netatop 查看 netatop 进程是否启动如果没启动那么可以使用 systemctl start netatop 启动 netatop 进程。
安装 atop
安装好后的 atop 主要包括两个部分:
atop 命令: 用于实时查看系统负载状态。atop 的 systemnctl 服务: 用于定期记录系统活动快照。如果要查看历史数据atop 的 systemctl 服务是必不可少的。
至于安装 atop 方法很多主要有
软件包管理器安装: atop 已经在各个软件包管理器内发布不过版本可能不是最新的。源码编译安装: 下载 atop 的源码可以直接安装最新或者指定版本的 atop。
安装 atop 命令都会自动配置 atop 的 systemctl 接下来我们都简单介绍一下上述两种安装方法。
软件包管理器
atop 工具已经在各个软件包管理器内发布你只需要使用系统自带的软件包管理器进行安装即可
# Debian/Ubuntu
apt install atop
# CentOS/RedHat/OpenCloudOS
yum install atop源码编译
如果你想用高版本的 atop 那么就需要手动编译可以在 atop 官方下载界面 找到下载地址之后下载到本地编译安装比如我这里使用腾讯云轻量应用服务器操作
# 下载源代码
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之后进行编译
# 编译
make
# 安装
make install
# 查看版本信息
atop -V网络扩展插件
默认情况下atop 没有自带网络监控模块(即可: netaop)需要我们自己安装。同样首先前往官网下载最新的 netatop 源码:
# 这里下载 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之后进行安装
# 编译
make
# 安装
make install如果编译过程出现内核头文件找不到类似于
./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 内核版本并使用软件包管理器安装内核头部文件
# Debian/Ubuntu
apt install linux-headers-$(uname -r)
# CentOS/RedHat/OpenCloudOS
yum install kernel-devel-$(uname -r)如果出现
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 就已经安装好了:
# 使用 systemctl 查看 netatop 的运行状态
systemctl status netatop历史监控日志
上文说到atop 部署和安装后会自动配置一个由 systemctl 所管理的守护进程这个守护进程会自动运行 atop。如果想卸载这个守护进程可以使用 systemctl stop atop 停止 atop 守护进程然后使用 systemctl disable atop 禁用 atop 守护进程。
查看这个守护进程的状态可以使用 systemctl status atop 命令 根据上面的输出我们可以看到atop 守护进程的配置文件是 /lib/systemd/system/atop.service我们可以通过 /lib/systemd/system/atop.service 查看这个配置文件的内容
[Unit]
DescriptionAtop advanced performance monitor
Documentationman:atop(1)[Service]
Typesimple
EnvironmentLOGOPTS
EnvironmentLOGINTERVAL600
EnvironmentLOGGENERATIONS28
EnvironmentLOGPATH/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 {} \;
KillSignalSIGUSR2[Install]
WantedBymulti-user.target解释一下各个参数:
LOGOPT: 控制日志文件记录允许您自定义日志文件的保存路径、命名规则、滚动周期以及其他与日志记录相关的选项。为表示不使用任何额外选项;LOGINT: 监控周期单位是秒LOGGEN: 日志保留时间单位是天LOGPATH: 指定atop日志文件的路径。
当然你也不用修改这个配置文件只需要修改 /etc/default/atop 文件即可覆写 /lib/systemd/system/atop.service 内的相关配置。
覆写配置文件
使用 vim 覆写或新建 /etc/default/atop 文件比如我们想修改 atop 的日志间隔时间那么只需要修改 LOGINTERVAL 即可比如:
LOGOPTS
LOGINTERVAL30
LOGGENERATIONS7
LOGPATH/var/log/atop上述的配置表示 atop 的日志间隔时间是 30 秒日志保留时间是 7 天日志文件保存在 /var/log/atop 目录下。
之后我们只需要重启 atop 守护进程即可生效:
systemctl restart atop那么atop 守护进程产生的日志文件如何有效地查看某段时间内的系统负载变化呢
我们只需要用 atop -r 「日志文件」 命令即可比如:
# 查看 20241029 日志文件
atop -r /var/log/atop/atop_20241029这个时候我们按 t 可以查看下一个时间快照节点按 shift t 可以查看上一个时间快照节点。如果你想直接查看某个时间节点那么可以使用 b之后出现的提示框
# 输入时间戳其中年月日和秒是可选的
Enter new time (format [YYYYMMDD]hhmm[ss]):是不是很方便呢还有更方便的你可以直接用组合键
# 查看 20241029 日志文件时间戳为 23 点
atop -r /var/log/atop/atop_20241029 -b 2300atop 卸载
其实我个人认为 atop 是没有必要卸载的因为 atop 的功能非常强大而且 atop 的守护进程对系统资源的消耗不大可能只有 10M 左右的内存占用
如果关闭 atop 和 netatop 的守护进程 那么 atop 甚至没有资源的占用(top 命令的 plus 版本)。
如果还是想卸载 atop ~~ 软件包管理器安装的 atop那么卸载 atop 就非常简单了只需要使用 apt 或 yum 卸载即可
# Debian/Ubuntu
apt purge atop
# CentOS/RHEL
yum remove atop反编译 atop
如果你是手动编译安装的 atop那么卸载 atop 就需要手动删除(其实就是把 make install 自动执行的反过来因为源码包内没有提供 uninstall 的脚本只能手动反操作了)
# 停止并禁用 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 了同样根据编译步骤逆向操作即可
# 停止并禁用 netatop 服务
systemctl stop netatop
systemctl disable netatop
# dkms 移除 netatop 模块
dkms remove -m netatop -v 3.2.2 --allEND
哈哈我们了解了 atop 的优势特别是其自动周期性记录和历史数据回放功能。本次的 atop 分享就到这里啦~~ 感谢阅读。也给腾讯云的服务团队点个赞非常专业和耐心帮用户解决实际的问题。
其实和 atop 类似的工具还有很多(比如: htop、glances、nmon 等)主要还是看个人的使用习惯。就好比查看端口的占用情况你可以使用 netstat、ss、lsof 等命令也可以使用 nmap、ncat 等工具
如果你有更好的工具推荐欢迎在评论区留言有机会我也给大家出一些其他工具的使用教程。
最后如果你对云服务器、CDN、云数据库和Linux等云计算感兴趣亦或者喜欢编程、设计、产品、运营等领域欢迎加入我们的开发者爱好群一起交流学习: 812198734 (目前可能就我一个人毕竟才刚刚创建 ~。