使用atop工具监控Linux系统指标

文章摘要:本文详细介绍了使用atop工具监控Linux系统的方法,涵盖安装配置、实时/历史指标查看、日志分析及生产环境优化。主要内容包括: 安装与配置:支持多种Linux发行版,提供yum/dnf/apt安装命令,并指导设置开机自启和日志参数调整(采样频率、保留天数)。 功能使用: 实时监控:通过交互式界面查看CPU、内存、磁盘等资源占用,支持排序(如按内存/CPU排序)和进程级详情分析。 历史日志:解析二进制日志文件(/var/log/atop/),支持时间跳转和指定时间段查询。 高级应用: 通过atop

真实案例:突然接到消息服务器崩溃了,这时候又进不了linux,只能强制重启,但是没有捕捉的服务器崩溃,经过阿里云提交工单,给了我实质性建议安装atop,说下次遇到问题就可以导出日志分析原因了,下面是安装和体验过程记录,希望对大家有帮助!

一、使用atop工具监控Linux系统指标

更新时间:2026-08-04 22:57:13

atop允许用户通过交互界面即时洞察系统状态,还能作为后台服务运行,以指定频率记录系统与进程的活动快照,并将其保存为二进制日志,帮助用户精确回溯并诊断系统问题。

1.安装atop

  1. 使用Workbench登录Linux实例
  2. 安装atop。

【服务器类型1】Alibaba Cloud Linux 4/3/2、CentOS 7/8 Fedora

bash 复制代码
# 更新软件包
sudo yum update -y

# 安装 atop
sudo yum install atop -y

【服务器类型2】Ubuntu / Debian

bash 复制代码
# 更新软件包
sudo apt update -y

# 安装 atop
sudo apt install atop -y

【服务器类型3】CentOS Stream 9、Rocky Linux 9

bash 复制代码
# 更新软件包
sudo dnf update -y

# 安装 EPEL 源
sudo dnf install epel-release -y

# 安装 atop
sudo dnf install atop -y

【服务器类型4】openSUSE

bash 复制代码
# 更新软件包
sudo zypper update -y

# 安装 atop
sudo zypper install atop atop-daemon -y
  1. 启动 atop 服务。
bash 复制代码
sudo systemctl start atop
  1. 验证atop是否启动成功。
bash 复制代码
sudo systemctl status atop

执行sudo systemctl status atop查看服务状态,若回执信息包含active(running),表示启动成功。

5.设置开机自动启动

bash 复制代码
sudo systemctl enable atop

2.使用atop查看实时指标

2.1 查看前10占用进程【very good】

bash 复制代码
# 查看内存占用前十的进程
ps aux --sort=-%mem | head -10

# 或使用 atop 的内存排序模式(按 m 键)

使用 atop 的内存排序模式(按 m 键),如下图所示:

2.2 执行atop实时采集【ok】

  1. 执行atop [采样间隔秒数] [采样次数]命令进入交互模式。

    以默认配置查看(10秒刷新一次)。

    atop

    每5秒查看一次系统指标。

    atop 5

    以10秒为间隔,采集30次系统指标。

    atop 10 30

    以30秒为间隔,采集10次,并结果写入文件。

    atop 30 10 > /tmp/atop.mem

  • 系统资源概览:汇总了CPU、内存、交换空间、磁盘I/O和网络的整体使用情况。

    ATOP - 2025/09/17 15:04:49 ---------------- 10s elapsed
    PRC | sys 0.07s | user 0.07s | | #proc 102 | #trun 1 | #tslpi 202 | | #tslpu 40 | #zombie 0 | clones 4 | | #exit 0
    CPU | sys 1% | user 1% | | irq 1% | | idle 198% | wait 0% | steal 0% | | guest 0% | | curf 2.50GHz
    cpu | sys 0% | user 0% | | irq 0% | | idle 99% | cpu000 w 0% | steal 0% | | guest 0% | | curf 2.50GHz
    cpu | sys 0% | user 1% | | irq 0% | | idle 99% | cpu001 w 0% | steal 0% | | guest 0% | | curf 2.50GHz
    CPL | avg1 0.01 | | avg5 0.03 | avg15 0.04 | | | csw 43494 | | intr 22870 | | | numcpu 2 |
    MEM | tot 1.9G | free 240.7M | | cache 1.1G | dirty 0.3M | buff 51.8M | slab 104.4M | slrec 69.4M | shmem 2.0M | shrss 0.0M | shswp 0.0M | | numnode 1
    | vmcom 728.4M | | vmlim 952.1M |
    SWP | tot 0.0M | | free 0.0M | swcac 0.0M | | | | | | | | |
    DSK | vda | busy 0% | | read 0 | write 4 | | discrd 0 | KiB/r | KiB/w 19 | KiB/d 0 | MBr/s 0 | MBw/s | | avq 0.50 avio 0.50 ms
    NET | transport | tcpi 89 | tcpo 131 | udpi 13 | | udpo 13 | tcpao 9 | tcppo 0 | tcprs 0 | tcpie 0 | tcpor 0 | | udpnp 0 | udpie 0
    NET | network | ipi 102 | | ipo 108 | ipfrw 0 | | deliv 102 | | coll 0 | mlti 0 | erri 0 | | icmpi 0 | icmpo 0
    NET | eth0 ---- | pcki 108 | pcko 110 | | sp 0 Mbps | si 17 Kbps | so 66 Kbps | | | | erri 0 | erro 0 | drpi 0 | drpo 0

  • 进程级详情:展示了各个进程的资源消耗详情。

    PID TID TCPRCV TCPRASZ TCPSND TCPSASZ UDPRCV UDPRASZ UDPSND UDPSASZ BANDWI BANDWO NET CMD 1/
    6605 - 38 193 33 1569 4 205 4 126 6 Kbps 41 Kbps 57%
    6660 - 25 183 33 676 5 204 5 106 4 Kbps 18 Kbps 27%
    7429 - 12 507 17 125 4 142 4 101 5 Kbps 2 Kbps 9%
    1588 - 10 70 10 396 0 0 0 0 0 Kbps 3 Kbps 4%
    1179 - 4 58 2 1792 0 0 0 0 0 Kbps 2 Kbps 4%
    1201 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    7486 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    17891 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    7539 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    2116 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    641 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    7157 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    1108 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    979 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    652 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    11 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    12 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    29 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    31 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    90 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    129 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    130 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    157 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    352 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    7107 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    7186 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    7631 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%
    17612 - 0 0 0 0 0 0 0 0 0 Kbps 0 Kbps 0%

  1. 在交互模式下,可使用单个字母键切换视图或者排序。

|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|
| 按键 | 功能 | 用途 |
| c | 显示完整命令行 | 查看进程启动的具体参数。 |
| g | 通用视图(默认) | 综合查看 CPU、内存增长、磁盘 I/O。 |
| m/M | 内存视图/按内存排序 | 用于分析内存使用、页错误,排查内存泄漏。 |
| d/D | 磁盘视图/按磁盘排序 | 用于分析磁盘 I/O,定位磁盘读写高的进程。 |
| n/N | 网络视图/按网络排序(需安装并加载netatop内核模块) | 用于分析网络流量,定位网络流量大的进程。 |
| a | 聚合视图 | 将一个程序的所有线程/进程资源消耗聚合在一起。 |
| C | 按 CPU 排序 | 快速定位消耗 CPU 最多的进程。 |
| h | 显示帮助 | 查看更多快捷键。 |
| q | 退出 | 退出交互模式。 |

3.使用atop查看历史指标

atop服务成功运行后,会定期在/var/log/atop/目录下生成以atop_YYYYMMDD格式命名的二进制日志文件。

atop 的日志是二进制文件,使用 catlessvim等文本编辑器打开会显示乱码。

3.1 读取历史日志

  1. 读取历史日志文件。

使用atop -r <日志文件>命令加载指定的日志文件。

复制代码
# 查看当天的日志,atop会自动查找当天的日志文件
atop -r

# 查看指定日期的日志
atop -r /var/log/atop/atop_YYYYMMDD
  1. 在日志中跳转到指定时间点。

加载日志后,界面显示的是该日志文件的第一个时间点快照。

  1. 按 t 键:向后跳转到下一个时间点的快照。
  2. 按 T 键(大写):向前跳转到上一个时间点的快照。
  3. 按 b 键:输入具体时间(格式 HH:MM),直接跳转到该时间点。
  4. 直接通过命令行指定时间段查看历史日志。

若需查看特定时间段内的系统资源占用情况(例如排查固定时间点的异常),可在加载日志时通过 -b-e 参数直接指定起止时间,无需在交互界面中逐步翻页。

复制代码
atop -r /var/log/atop/atop_YYYYMMDD -b HH:MM -e HH:MM

参数说明:

|----------------------------------|----------------------------------------------|
| 参数 | 说明 |
| -r /var/log/atop/atop_YYYYMMDD | 指定要读取的历史日志文件,YYYYMMDD 为目标日期,例如 20250815。 |
| -b HH:MM | 指定查看的开始时间(Begin time),格式为 24 小时制,例如 09:00。 |
| -e HH:MM | 指定查看的结束时间(End time),格式为 24 小时制,例如 09:30。 |

示例:查看 2026 年 8 月 05 日 10:00 至 10:30 的系统资源占用情况:

bash 复制代码
atop -r /var/log/atop/atop_20260805 -b 10:00 -e 10:30

3.2 优化 atop 日志记录行为

在分析历史日志时,若发现默认的日志记录频率(10分钟一次)对于某些问题来说太过宽泛,或者默认的28天保留时长不能满足监控需求,可通过修改 atop 的配置文件来调整其后台日志的记录频率、保留天数和存储路径。

  1. 使用vim或其他文本编辑器打开配置文件。

    • RHEL 及其衍生版(Alibaba Cloud Linux,CentOS,Fedora,Rocky Linux)。

    sudo vim /etc/sysconfig/atop

  • Debian 及其衍生版(Ubuntu, Debian),openSUSE。

    sudo vim /etc/default/atop

  1. 默认配置文件的内容如下:

    LOGOPTS=""
    LOGINTERVAL=600
    LOGGENERATIONS=28
    LOGPATH=/var/log/atop

  • LOGOPTS:额外的日志记录选项。例如,设置-L可在日志轮转时创建一个指向最新日志的符号链接 /var/log/atop/atop_current,方便快速访问。
  • LOGINTERVAL:日志记录的采样间隔,单位是秒。默认值通常是 600(即10分钟),表示每10分钟记录一次系统快照。
  • LOGGENERATIONS:日志文件的生命周期,单位是天。默认值通常是 28,表示 atop 会自动删除28天前的旧日志文件。
  • LOGPATH:日志文件存储路径,默认为/var/log/atop

如果修改此路径,请确保新目录已存在且 atop 进程有写入权限。

  1. 配置修改后,需重启atop服务让配置生效。

    sudo systemctl restart atop

4.生成指标报告

atopsar是atop工具包中的一个非交互式的命令行工具,用于从atop记录的二进制日志文件中提取数据并生成系统性能报告。

4.1 使用示例
  • 查看当前系统在 1 分钟内(12 次,间隔 5 秒)的CPU使用率指标报告。

    atopsar -c 5 12

  • 查看当天指定时间段的内存指标报告。

    查看当天18:00至18:01的内存指标报告

    atopsar -m -b 18:00 -e 18:01

  • 查看指定日期内,指定时间段的内存指标报告。

    查看2025年8月15日 18:00至18:01的内存指标报告。

    atopsar -m -r /var/log/atop/atop_20250815 -b 18:00 -e 18:01

4.2 atopsar命令基本语法
复制代码
atopsar [options] [interval] [count]
  • options :用于指定报告类型的标志,例如-c(CPU),-m(内存),-d(磁盘)。
  • interval:指定输出报告的时间间隔,单位为秒。
  • count:指定输出报告的次数。

5.指标解读

5.1 系统资源概览

|---|---|---|---|
| | | | |

|------------------------------------------|-----------------------|--------------------------------------|----------------|
| 指标类别 | 指标 | 详细说明 | 单位 |
| ATOP | 主机名, 日期 | 显示当前主机名、采样日期和时间。 | - |
| ATOP | 采样间隔 | 显示两次采样之间的时间间隔。 | 秒 |
| PRC(进程总体情况) | sys | 在采样间隔内,所有进程在内核模式下消耗的CPU总时间。 | 秒 |
| PRC(进程总体情况) | user | 在采样间隔内,所有进程在用户模式下消耗的CPU总时间。 | 秒 |
| PRC(进程总体情况) | #proc | 系统当前的总进程数量。 | 个 |
| PRC(进程总体情况) | #trun | 处于运行中状态的平均线程数。 | 个 |
| PRC(进程总体情况) | #tslpi | 处于可中断睡眠状态的线程数。 | 个 |
| PRC(进程总体情况) | #tslpu | 处于不可中断睡眠状态的线程数。 | 个 |
| PRC(进程总体情况) | #zombie | 僵尸进程的数量。 | 个 |
| PRC(进程总体情况) | clones | 在采样间隔内,通过clone系统调用创建的新进程/线程数。 | 个/秒 |
| PRC(进程总体情况) | #exit | 在采样间隔内,退出的进程数量。 | 个/秒 |
| CPU/cpu(CPU整体/单个CPU核心) | %sys | CPU在内核模式下花费的时间百分比。 | % |
| CPU/cpu(CPU整体/单个CPU核心) | %user | CPU在用户模式下花费的时间百分比。 | % |
| CPU/cpu(CPU整体/单个CPU核心) | %irq | CPU处理硬件中断(irq)和软件中断(softirq)的时间百分比。 | % |
| CPU/cpu(CPU整体/单个CPU核心) | %idle | CPU处于完全空闲状态的时间百分比。 | % |
| CPU/cpu(CPU整体/单个CPU核心) | %wait | CPU因等待磁盘I/O完成而处于空闲状态的时间百分比。 | % |
| CPU/cpu(CPU整体/单个CPU核心) | %steal | 虚拟CPU等待物理CPU时间的百分比(被宿主机或其他虚拟机占用的时间)。 | % |
| CPU/cpu(CPU整体/单个CPU核心) | %guest | 运行虚拟机所花费的CPU时间的百分比。 | % |
| CPU/cpu(CPU整体/单个CPU核心) | %freq | CPU的平均运行频率,相对于其最大频率的百分比。 | % |
| CPL(CPU负载) | avg1/avg5/avg15 | 过去1分钟/5分钟/15分钟的系统平均负载。 | - |
| CPL(CPU负载) | csw | 在采样间隔内,上下文切换的次数。 | 次/秒 |
| CPL(CPU负载) | intr | 在采样间隔内,发生的中断总次数。 | 次/秒 |
| MEM(物理内存) | tot | 系统物理内存总量。 | GiB/MiB |
| MEM(物理内存) | free | 完全未被使用的空闲内存量。 | GiB/MiB |
| MEM(物理内存) | cache | 用作页面缓存的内存量,用于缓存文件数据。 | GiB/MiB |
| MEM(物理内存) | dirty | 在页面缓存中,已被修改但尚未写回磁盘的脏页大小。 | MiB |
| MEM(物理内存) | buff | 用作缓冲区缓存的内存量,用于缓存块设备元数据。 | MiB |
| MEM(物理内存) | slab | 内核用于自身数据结构(slab分配器)的内存量。 | MiB |
| MEM(物理内存) | shmem | 共享内存(包括tmpfs)的大小。 | MiB |
| MEM(物理内存) | vmbal | (仅限32位系统)用于虚拟内存区域的平衡内存量。 | MiB |
| SWP(交换分区) | tot | 交换分区的总大小。 | GiB/MiB |
| SWP(交换分区) | free | 空闲的交换分区大小。 | GiB/MiB |
| SWP(交换分区) | swcac | 已被换出但同时又被缓存的内存大小。 | MiB |
| SWP(交换分区) | vmcom | 已被应用程序申请的虚拟内存总量。 | GiB/MiB |
| SWP(交换分区) | vmlim | 允许申请的虚拟内存上限。 | GiB/MiB |
| PAG(分页活动) | scan | 内核在采样间隔内为回收内存而扫描的页数。 | 页/秒 |
| PAG(分页活动) | steal | 内核在扫描后成功回收的页数。 | 页/秒 |
| PAG(分页活动) | stall | 内核因内存不足而停滞以等待页面回收的次数。 | 次/秒 |
| PAG(分页活动) | swin | 从交换分区换入到物理内存的页面数。 | 页/秒 |
| PAG(分页活动) | swout | 从物理内存换出到交换分区的页面数。 | 页/秒 |
| DSK(磁盘) LVM(逻辑卷) | busy | 磁盘繁忙的时间百分比。达到100%表示磁盘饱和。 | % |
| DSK(磁盘) LVM(逻辑卷) | read/write | 在采样间隔内,完成的读/写请求数量。 | 个/秒 |
| DSK(磁盘) LVM(逻辑卷) | KiB/r/KiB/w | 每个读/写请求的平均数据大小。 | KB |
| DSK(磁盘) LVM(逻辑卷) | Msec/r/Msec/w | 每个读/写请求的平均耗时(包括排队和服务时间)。 | 毫秒 |
| DSK(磁盘) LVM(逻辑卷) | avio | 平均I/O请求的服务时间(不含排队时间)。 | 毫秒 |
| NET(网络) | transport | TCP和UDP层的收发包统计。 | 包/秒 |
| NET(网络) | network | IP层的收发包、转发包统计。 | 包/秒 |
| NET(网络) | *if* | 显示每个网络接口的活动情况。 | - |
| NET(网络) | pcki/pcko | 接口接收/发送的数据包数量。 | 包/秒 |
| NET(网络) | spdi/spdo | 接口接收/发送的速率。 | Mbps |
| NET(网络) | erri/erro | 接口接收/发送时发生的错误数。 | 个/秒 |
| NET(网络) | drpi/drpo | 接口接收/发送时丢弃的数据包数。 | 个/秒 |

5.2 进程级详情

|---|---|---|---|
| | | | |

|----------------------|-------------------|---------------------------------------------|----------------|
| 视图 | 指标 | 详细说明 | 单位 |
| 通用视图(默认) | PID | 进程ID。系统的唯一进程标识符。 | - |
| 通用视图(默认) | S | 进程状态。R-运行中, S-可中断睡眠, D-不可中断睡眠, Z-僵尸, E-已退出。 | - |
| 通用视图(默认) | CPU% | CPU使用率。 | % |
| 通用视图(默认) | MEM% | 内存使用率。 | % |
| 通用视图(默认) | THR | 线程数。 | 个 |
| 通用视图(默认) | PAG | 主要缺页错误。表示进程需要从磁盘读取数据到内存的次数,是衡量磁盘I/O压力的一个指标。 | 次/秒 |
| 通用视图(默认) | CMD | 命令名。进程的可执行文件名。按 c 键后会显示完整命令行。 | - |
| 内存视图 | VSIZE | 虚拟内存大小。进程向系统申请的虚拟地址空间总大小。 | KiB/MiB/GiB |
| 内存视图 | RSIZE | 常驻内存大小。进程当前实际占用物理内存的大小。 | KiB/MiB/GiB |
| 内存视图 | SHR | 共享内存大小。 | KiB/MiB/GiB |
| 内存视图 | RGROW | 常驻内存增长量。正数表示内存消耗在增加,负数表示在减少。 | KiB |
| 内存视图 | VGROW | 虚拟内存增长量。 | KiB |
| 磁盘视图 | DSK% | 磁盘活动百分比。进程产生的磁盘I/O繁忙时间占总磁盘繁忙时间的百分比。 | % |
| 磁盘视图 | RDDSK/WRDSK | 读取/写入的磁盘数据。 | KiB/MB |
| 磁盘视图 | WCANCL | 取消的写入量。进程写入页面缓存后,在数据被同步到磁盘前又被删除的数据量。 | KiB/MB |
| 网络视图 | NET% | 网络活动百分比。进程产生的网络流量占所有进程总流量的百分比。 | % |
| 网络视图 | TCPSND/TCPRCV | TCP发送/接收量。 | KiB/MB |
| 网络视图 | UDPSND/UDPRCV | UDP发送/接收量。 | KiB/MB |

6.应用于生产环境

  • 磁盘空间规划atop日志大小与采集频率、系统进程数和保留天数正相关。通过ls -lh /var/log/atop/命令观察单个日志文件的大小,然后乘以LOGGENERATIONS的值来估算总空间需求。
  • 监控间隔 :对于需要更细粒度分析的场景,可将默认配置LOGINTERVAL调整为30秒。但请注意,缩短间隔会增加磁盘 I/O 和 atop 进程的 CPU 开销,请根据实例负载合理配置。

7.常见问题

7.1 执行 atop -r时提示 stat raw file: No such file or directory******,是什么原因?******

这个错误表示atop找不到指定日期的日志文件。可能的原因有:

  1. 指定的日期atop服务并未运行。
  2. 日志文件因轮转策略已被删除(超过了LOGGENERATIONS设置的保留数量)。
  3. 查询的是未来的日期。

请检查/var/log/atop目录下实际存在的日志文件列表。

7.2 如何减少 atop占用的磁盘空间?

可通过修改配置减少磁盘空间占用,修改配置后,需重启atop服务:

  1. 减少日志保留天数 :在配置文件中调低LOGGENERATIONS的值,例如从28改为14
  2. 降低采集频率 :在配置文件中调高LOGINTERVAL的值,例如从600改为1200
7.3 为什么在 atop交互界面按 n键看不到按进程统计的网络流量?

atop默认不包含按进程统计网络流量的功能。要启用此功能,需要额外安装并加载netatop内核模块。

1.安装内核开发包及编译所需软件环境。

复制代码
sudo yum install -y kernel-devel dkms elfutils-libelf-devel
  1. 下载netatop源码至指定目录。

    cd /usr/src/ && sudo wget https://www.atoptool.nl/download/netatop-3.2.2.tar.gz

  2. 解压源码并进入源码目录。

    sudo tar -zxvf netatop-3.2.2.tar.gz && cd netatop-3.2.2

  3. 基于源码构建并安装模块和守护程序。

    sudo make && sudo make install

  4. 启动netatop服务。

    sudo systemctl start netatop

  5. 验证netatop是否安装成功。

执行atop进入交互操作界面,按n键查看,若进程详情列表中包含NET列,表示安装成功。

复制代码
ATOP -                    7                    2025/09/17 15:04:49                    --------------------                    10s elapsed
PRC | sys    0.07s | user    0.07s |              |              | #proc    102 | #trun      1 | #tslpi   202 |         | #tslpu    40 | #zombie   0 | clones     4 |              | #exit      0
CPU | sys       1% | user       1% |              | irq       1% |              |              | idle     198% | wait   0% | steal      0% |              | guest      0% |              | curf 2.50GHz
cpu | sys       0% | user       0% |              | irq          0% |              |              | idle      99% | cpu000 w | steal      0% |              | guest      0% |              | curf 2.50GHz
cpu | sys       0% | user       1% |              | irq          0% |              |              | idle      99% | cpu001 w | steal      0% |              | guest      0% |              | curf 2.50GHz
CPL | avg1    0.01 |              | avg5     0.03 | avg15    0.04 |              |              | csw     43494 |          | intr    22870 |              |              |              | numcpu       2
MEM | tot     1.9G | free   240.7M | cache    1.1G | dirty    0.3M | buff    51.8M | slab  104.4M | slrec  69.4M | shmem  2.0M | shrss      | shswp  0.0M |              | vmcom 728.4M |              | vmlim 952.1M
SWP | tot     0.0M |              | free     0.0M | swcac    0.0M |              |              |              |              |              |              |              |              |              |
DSK |    vda       | busy       0% | read       0 | write      4 |              | discrd     0 | KiB/r        | KiB/w    19 | KiB/d        | MBr/s    0 | MBw/s      0 |              | avq     0.50 | avio 0.0 ms
NET | transport    | tcpi      89  | tcpo     131 | udpi         |              | udpo      13 | tcpao      9 | tcppo      0 | tcprs        | tcpie        |              |              | udpnp        |
NET | network     | ipi      102  |              | ipo      108 | ipfrw      0 |              | deliv    102 |              |              | coll       0 | mlti       0 | erro         | icmpo        |
NET | eth0   ---- | pcki     108  | pcko     110 |              | sp   0 Mbps  | si   17 Kbps | so   66 Kbps |              |              |              |              |              |              |
  PID        TID      TCPRCV     TCPRASZ     TCPSND     TCPSASZ      UDPRCV     UDPRASZ      UDPSND     UDPSASZ      BANDWI      BANDWO        NET    CMD  1/1
 6605          -          38         193         33        1569           4         205           4         126       6 Kbps      41 Kbps        57%
 6660          -          25         183         33         676           5         204           5         106       4 Kbps      18 Kbps        27%
 7429          -          12         507         17         125           4         142           4         101       5 Kbps       2 Kbps         9%
 1588          -          10          70         10         396           0           0           0           0       0 Kbps       3 Kbps         4%
 1179          -           4          58          2        1792           0           0           0           0       0 Kbps       2 Kbps         4%
 1201          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 7486          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
17891          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 7539          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 2116          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
  641          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 7157          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 1108          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
  979          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
  652          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
   11          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
   12          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
   29          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
   31          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
   90          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
  129          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
  130          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
  157          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
  352          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 7107          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 7186          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
 7631          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
17612          -           0           0          0           0           0           0           0           0       0 Kbps       0 Kbps         0%
7.4 为什么 ECS 重启后无法查看导致故障的历史进程?

Linux 系统默认不记录进程级的历史资源占用,且重启会释放内存中的进程信息,因此在未安装监控工具的情况下,无法回溯重启前故障现场(包括系统夯死、内存不足、kswapd0 高负载、I/O 打满等问题)。要在下次故障发生时能够通过历史日志定位根因,需提前完成以下配置:

  • 参照本文安装 atop 工具,并设置开机自启(sudo systemctl enable atop),确保服务器重启后 atop 持续记录进程快照。

    sudo systemctl enable atop

  • 配置完成后,下次故障发生时可通过 atop -r /var/log/atop/atop_YYYYMMDD 加载历史日志,定位故障根因。

    atop -r /var/log/atop/atop_20260805

二、deepseek实战分析

124黄埔军校执行 atop监控:

bash 复制代码
ATOP - iZ7xv67xk******puh7xwbZ                                                                2026/08/05  10:05:54                                                                ----a-1----------                                                                10s elapsed
PRC | sys    0.33s  |              | user   0.91s  |              |               | #proc    176  | #trun      1 |               | #tslpi  1457 |  #tslpu    53 |              |  #zombie    0 | clones   4/s  |              |               | #exit     0/s |               |
CPU | sys    3%  |              | user      8%  | irq       4% |               |               |              | idle    386%  | wait      0% |               | steal     0% |               | guest     0%  |              |               | curf 2.50GHz |               |
cpu | sys    1%  |              | user      2%  | irq       1% |               |               |              | idle     96%  | cpu000 w  0% |               | steal     0% |               | guest     0%  |              |               | curf 2.50GHz |               |
cpu | sys    1%  |              | user      2%  | irq       1% |               |               |              | idle     96%  | cpu002 w  0% |               | steal     0% |               | guest     0%  |              |               | curf 2.50GHz |               |
cpu | sys    1%  |              | user      2%  | irq       1% |               |               |              | idle     96%  | cpu001 w  0% |               | steal     0% |               | guest     0%  |              |               | curf 2.50GHz |               |
cpu | sys    1%  |              | user      1%  | irq       1% |               |               |              | idle     97%  | cpu003 w  0% |               | steal     0% |               | guest     0%  |              |               | curf 2.50GHz |               |
CPL | avg1    0.06  |              | avg5    0.49  |              |  avg15   0.66 |               |              |               | csw  12990/s |               |              |  intr  7060/s |               |              |               | numcpu     4 |               |
MEM | tot    14.9G  | free    1.6G | cache   5.0G  | dirty   0.0M |               | buff  250.7M  | slab  392.3M | slrec 322.3M  |              |  shmem  22.4M | shrss   0.0M |  shswp   0.0M |               |              |               |              |  numnode    1 |
SWP | tot     0.0M  |              | free    0.0M  |              |  swcac   0.0M |               |              |               |              |               |              |               |               | vmcom  12.9G |               | vmlim   7.4G |               |
DSK |          vda  | busy      0% |               | read     0/s |  write    9/s |               | discrd   0/s | KiB/r     16  |              |  KiB/w      6 | KiB/d      0 |  MBr/s    0.0 |               | MBw/s    0.1 |  avq     3.00 |              |  avio 0.23 ms |
NET | transport     | tcpi    65/s |               | tcpo   116/s |  udpi     1/s |               | udpo     1/s | tcpao    2/s  |              |  tcppo    2/s | tcprs    0/s |  tcpie    0/s |               | tcpor    0/s |  udpnp    0/s |              |  udpie    0/s |
NET | network       |              | ipi     67/s  | ipo     72/s |               | ipfrw    0/s  |              | deliv   67/s  |              |               |              |               |               |              |  icmpi    0/s | icmpo    0/s |                |
NET | eth0    ----  |              | pcki   106/s  | pcko    61/s |               |               | sp    0 Mbps | si  749 Kbps  | so  661 Kbps |               | coll     0/s |  mlti     0/s | erri     0/s  |              |  erro     0/s | drpi     0/s |  drpo     0/s |
NET | lo      ----  |              | pcki    12/s  | pcko    12/s |               |               | sp    0 Mbps | si    9 Kbps  | so    9 Kbps |               | coll     0/s |  mlti     0/s | erri     0/s  |              |  erro     0/s | drpi     0/s |  drpo     0/s |

    PID         CID                  SYSCPU          USRCPU         RDELAY           VGROW          RGROW          RDDSK           WRDSK         RUID              EUID             ST         EXC           THR         S          CPUNR          MEM          CMD        1/5
   6437         host--------          0.04s           0.09s          0.00s              0B             0B           0B/s          819B/s         root              root             --           -           144         S              0           7%          java
   3639         host--------          0.03s           0.17s          0.00s              0B             0B           0B/s          2.0K/s         root              root             --           -            47         S              2           7%          java
 133927         host--------          0.01s           0.01s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -           147         S              1           6%          java
   3797         host--------          0.03s           0.04s          0.00s              0B             0B           0B/s          410B/s         root              root             --           -            45         S              0           5%          java
   5639         host--------          0.01s           0.04s          0.00s              0B             0B           0B/s          3.2K/s         root              root             --           -           286         S              1           5%          java
   8075         host--------          0.03s           0.07s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -           111         S              3           5%          java
   7490         host--------          0.03s           0.08s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -           104         S              0           4%          java
   7048         host--------          0.01s           0.08s          0.00s              0B             0B           0B/s          410B/s         root              root             --           -            85         S              0           3%          java
   7886         host--------          0.03s           0.07s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -           103         S              3           3%          java
   2453         host--------          0.00s           0.02s          0.00s              0B             0B           0B/s            0B/s         mysql             mysql            --           -            28         S              2           2%          mysqld
 213745         host--------          0.05s           0.03s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             1         R              2           1%          atop
    483         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s           12K/s         root              root             --           -             1         S              3           1%          systemd-journa
 158132         c08102088d8f          0.01s           0.02s          0.00s              0B             0B           0B/s          2.4K/s         systemd-          systemd-         --           -            33         S              1           1%          mongod
 157798         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -            24         S              0           1%          dockerd
 158156         18998e4e5946          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         redis             redis            --           -            11         S              2           1%          next-router-wo
   3259         host--------          0.02s           0.10s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -            30         S              1           0%          AliYunDunMonit
 158545         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -            10         S              1           0%          containerd
    881         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             1         S              2           0%          nginx
    882         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             1         S              1           0%          nginx
    879         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             1         S              1           0%          nginx
    880         host--------          0.00s           0.01s          0.00s              0B             0B         2.8K/s          819B/s         root              root             --           -             1         S              2           0%          nginx
 157615         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s          410B/s         root              root             --           -             3         S              1           0%          rsyslogd
   1072         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s          410B/s         root              root             --           -            10         S              3           0%          runner
 157507         host--------          0.00s           0.02s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             4         S              3           0%          tuned
   1973         host--------          0.01s           0.03s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -            12         S              3           0%          AliYunDun
 158197         295b628bd664          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         systemd-          systemd-         --           -             1         S              3           0%          postgres
   1067         host--------          0.00s           0.02s          0.00s              0B          44.0K           0B/s          410B/s         root              root             --           -            10         S              0           0%          aliyun-service
    796         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         promethe          promethe         --           -             8         S              3           0%          node_exporter
 157627         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         polkitd           polkitd          --           -             8         S              1           0%          polkitd
    786         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             3         S              0           0%          NetworkManager
 158101         host--------          0.00s           0.00s          0.00s              0B         -32.0K           0B/s            0B/s         root              root             --           -            12         S              3           0%          containerd-shi
    877         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             1         S              3           0%          nginx
 158157         host--------          0.00s           0.00s          0.00s              0B          64.0K           0B/s            0B/s         root              root             --           -            12         S              0           0%          containerd-shi
 158070         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -            11         S              2           0%          containerd-shi
      1         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             1         S              0           0%          systemd
 213558         host--------          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         root              root             --           -             1         S              0           0%          atop
    858         host--------          0.00s           0.01s          0.00s              0B             0B           0B/s            0B/s         redis             redis            --           -             5         S              0           0%          redis-server
 158350         295b628bd664          0.00s           0.00s          0.00s              0B             0B           0B/s            0B/s         systemd-          systemd-         --           -             1         S              3           0%          postgres

很好!ATOP显示当前系统完全正常,CPU整体使用率仅11%(sys 3% + user 8%),idle高达386%(4核总计)。

📊 ATOP关键数据分析

✅ 健康状态确认

|---------------|-------------------------------|------------|
| 指标 | 当前值 | 状态 |
| CPU整体 | sys 3% + user 8% | ✅ 极低 |
| 负载 | 0.06 / 0.49 / 0.66 | ✅ 远低于4核阈值 |
| 内存 | 14.9G总, 1.6G free, 5.0G cache | ✅ 充足 |
| 交换 | 0.0M (未使用) | ✅ 无内存压力 |
| 磁盘 | busy 0%, 读写极低 | ✅ 空闲 |
| 网络 | 749Kbps in / 661Kbps out | ✅ 正常 |

🎯 你的目标进程(PID 8075)

在ATOP输出中:

复制代码
PID 8075: SYSCPU 0.03s, USRCPU 0.07s, MEM 5%, THR 111
  • CPU使用率极低(10秒内合计0.1秒)
  • 内存占用5%(约745MB,符合预期)
  • 111个线程(稍多但可接受)

🚨 但有个隐藏问题需要注意

观察MEM部分的vmcom 12.9Gvmlim 7.4G

复制代码
vmcom  12.9G  | vmlim  7.4G

⚠️ 含义

  • vmcom = 所有进程已承诺的内存总量(已申请但可能未实际分配): 12.9GB
  • vmlim = 系统允许的最大承诺内存(RAM + SWAP * 1.5): 7.4GB

vmcom (12.9G) > vmlim (7.4G),意味着如果所有进程同时申请它们已承诺的全部内存,系统会触发OOM Killer!

🔍 为什么会这样?

因为你的系统没有配置Swap

复制代码
SWP | tot 0.0M | free 0.0M

当物理内存耗尽时,没有任何缓冲,直接OOM。


🔧 立即行动建议

添加Swap(缓解OOM风险)

复制代码
# 创建4GB swap文件
dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 永久生效
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# 验证
free -h

找出谁在申请大量内存

bash 复制代码
# 查看各进程的承诺内存
for pid in $(pgrep java); do
    echo -n "PID $pid: "
    cat /proc/$pid/status 2>/dev/null | grep VmSize | awk '{print $2/1024 " MB"}'
done

# 或使用smem
smem -rs vss | head -20

重点关注高内存进程

从ATOP看,内存占用最大的几个:

|--------------|------------------------|--------------|-----------------|
| PID | 进程 | MEM% | 推测RSS |
| 6437 | 8083-system | 7% | ~1.04GB |
| 3639 | tomcat-8092 | 7% | ~1.04GB |
| 133927 | (另一个Java) | 6% | ~894MB |
| 3797 | tomcat-8090 | 5% | ~745MB |
| 5639 | Nacos | 5% | ~745MB |
| 8075 | 8087-esupplier | 5% | ~745MB |

所有Java进程RSS总和约5-6GB,加上系统其他进程,物理内存还能撑住,但vmcom超限是隐患。


📋 针对8087-esupplier的优化

当前JVM参数问题

复制代码
-Xms128m -Xmx512m -XX:MaxMetaspaceSize=256m

但RSS已经745MB,说明:

  1. 堆内存使用可能已到512MB上限
  2. Metaspace可能在256MB附近
  3. 还有堆外内存(DirectBuffer、Native线程等)

优化建议

复制代码
# 建议调整为
java -Xms512m -Xmx1024m \
     -XX:MaxMetaspaceSize=256m \
     -XX:+UseG1GC \
     -XX:MaxGCPauseMillis=200 \
     -XX:+HeapDumpOnOutOfMemoryError \
     -XX:HeapDumpPath=/home/fsxz/tenant/8087-esupplier/logs/heapdump.hprof \
     -Xloggc:/home/fsxz/tenant/8087-esupplier/logs/gc.log \
     -XX:+PrintGCDetails \
     -XX:+PrintGCDateStamps \
     -Dio.netty.leakDetectionLevel=advanced \
     -jar bcsc-tenant-esupplier-start-2.4.6.jar

🔍 下次CPU飙升时的现场抓取脚本

复制代码
#!/bin/bash
# 保存为 /tmp/cpu_emergency.sh

PID=8075
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_DIR=/home/fsxz/tenant/8087-esupplier/logs

echo "=== CPU Emergency Dump $TIMESTAMP ==="

# 1. 系统状态
top -b -n 1 > $LOG_DIR/top_$TIMESTAMP.log
vmstat 1 10 > $LOG_DIR/vmstat_$TIMESTAMP.log

# 2. 进程CPU统计
ps -p $PID -o pid,%cpu,%mem,vsz,rss,etime,cmd > $LOG_DIR/process_$TIMESTAMP.log

# 3. 线程CPU排行
ps -mp $PID -o THREAD,tid,time,%cpu,rss,size > $LOG_DIR/threads_$TIMESTAMP.log

# 4. 线程dump
jstack $PID > $LOG_DIR/jstack_$TIMESTAMP.log

# 5. GC状态
jstat -gcutil $PID 1 5 > $LOG_DIR/gc_$TIMESTAMP.log

# 6. 高CPU线程分析(自动提取TOP3)
echo "=== TOP3 CPU Threads ===" >> $LOG_DIR/cpu_analysis_$TIMESTAMP.log
ps -mp $PID -o THREAD,tid,time,%cpu | sort -rn -k4 | head -4 >> $LOG_DIR/cpu_analysis_$TIMESTAMP.log

echo "紧急dump完成: $LOG_DIR/"

💡 总结

  1. 当前状态:系统健康,CPU不是问题
  2. 潜在风险:无Swap + vmcom超限,有OOM风险
  3. 建议动作
    • 立即:添加4GB Swap
    • 近期:调整JVM参数(增加Xmx)
    • 长期:部署监控告警,配置自动dump

本文参考文档:使用atop工具监控Linux系统指标
使用atop工具监控Linux系统指标-云服务器 ECS(ECS)-阿里云帮助中心

相关推荐
ltl9 小时前
内核追踪:ftrace、kprobe、uprobe、tracepoint 生产实战
linux
·薯条大王9 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
小小、码农12 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b12 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器
沫璃染墨14 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
AIgorithmGEEK15 小时前
Linux 环境变量完全指南:从入门到理解底层原理
linux·运维·服务器
修罗王15 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
迪康Defender15 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他
2601_9657984715 小时前
Is Piroll WordPress Theme Worth It for Freelancers? Full Review
数据库·php
酷可达拉斯16 小时前
Linux操作系统-升级OpenSSH修复漏洞
linux·运维·服务器·云计算