菜鸟科技网

Linux sa命令具体如何使用?

saSystem Activity 的缩写,它是一个用于分析 acct 记录文件的命令。acct 是 Linux 系统中的一个可选功能,用于记录系统中每个进程的执行信息(称为“记账”或“审计”),当这个功能开启时,系统会详细记录每个进程的启动时间、结束时间、用户、CPU 使用时间、磁盘 I/O 等信息,这些信息会保存在特定的日志文件中。

Linux sa命令具体如何使用?-图1
(图片来源网络,侵删)

sa 命令就是用来汇总和解读这些日志文件的工具,从而让你了解系统资源的使用情况,例如哪些用户、哪些命令消耗了最多的 CPU 时间。


核心功能与用途

sa 命令主要用于:

  • 分析命令资源消耗:统计每个命令或每个用户所占用的 CPU 时间、磁盘 I/O 等。
  • 资源审计与计费:在多用户环境中,系统管理员可以根据 sa 的报告来统计不同用户或部门的资源使用情况,用于成本分配或资源限制。
  • 性能分析:通过分析历史数据,找出系统中资源消耗异常的命令,进行优化。

前提条件:启用进程记账功能

sa 命令的数据来源是 acct 子系统,默认情况下,大多数 Linux 发行版是关闭这个功能的,因为它会产生额外的系统开销,要使用 sa,你需要先启用它。

如何启用进程记账?

  1. 安装 acct: 在基于 Debian/Ubuntu 的系统上:

    Linux sa命令具体如何使用?-图2
    (图片来源网络,侵删)
    sudo apt-get update
    sudo apt-get install acct

    在基于 RHEL/CentOS/Fedora 的系统上:

    sudo yum install psacct

    (注意:包名可能是 psacct,但核心功能是一样的)。

  2. 启动 acct 服务: 启用并启动 acct 服务,使其开机自启。

    # 对于使用 systemd 的系统 (Ubuntu 16.04+, CentOS 7+, Debian 8+)
    sudo systemctl enable --now acct.service
    # 对于较旧的系统
    sudo service acct start
  3. 验证记账功能: 启动后,系统会自动在 /var/log/account/ 目录下创建日志文件(通常是 pacctwtmp),或者在某些系统上直接在 /var/log/ 下,你可以用 lastcomm 命令来查看记录:

    Linux sa命令具体如何使用?-图3
    (图片来源网络,侵删)
    lastcomm

    如果你看到类似 bash pts/0 的输出,说明记账功能已经开启。


sa 命令的基本用法

sa 命令的基本格式是 sa [选项] [文件名]

  • 文件名:默认情况下,sa 会读取 /var/log/account/pacct 文件,你也可以指定其他的记账文件。
  • 选项sa 提供了丰富的选项来控制输出格式和统计内容。

常用选项详解

以下是 sa 命令最常用的一些选项:

选项 全称 描述
-a --all 打印所有命令的统计信息,包括那些从未调用过、CPU 时间为 0 的命令。
-b --brief 以简要格式输出,只显示命令名、总调用次数、总 Kbytes、总 CPU 时间和真实 CPU 时间。
-c --cmdsv 按命令名排序(默认排序方式)。
-u --user 按用户名排序,而不是按命令名。
-v --verbose 以详细格式输出,显示每个命令的平均 CPU 时间、平均内存使用量等更多信息。
-k --kbytes 以 KB 为单位显示磁盘 I/O 量(默认是块数)。
-m --minutes 以分钟为单位显示 CPU 时间,而不是以秒为单位。
-t --notime 在输出中不显示 CPU 时间。
-A --list-all 列出所有命令的统计信息,包括系统调用。
-j --date 显示命令的启动日期和时间。
-P --percents 显示每个命令占总 CPU 时间的百分比。
-x --system 打印系统命令(如内核线程)的统计信息。

实用示例

假设记账功能已经开启,并且系统运行了一段时间。

示例 1:查看所有命令的简要统计

这是最常用的用法,可以快速了解哪些命令消耗了最多的资源。

sa -b

可能的输出:

cmd         kbytes    cpu     re   mem   disk  chars  faults  core
bash         12345    10.5    8.2  1024     0       0       0     0
python       56789    45.2   40.1  8192  10240       0       0     0
gcc         234567   120.3  110.5 40960     0       0       0     0
<others>    ...      ...    ...   ...    ...     ...     ...    ...
total      1234567   999.9  888.8  ...    ...     ...     ...    ...

列解释

  • cmd: 命令名
  • kbytes: 使用的总 KB 数
  • cpu: 总 CPU 时间(秒)
  • re: “有效”或“真实”的 CPU 时间(秒)
  • mem: 平均内存使用量(KB)
  • disk: 总磁盘 I/O(块数)
  • chars: 传输的字符数
  • faults: 页错误次数
  • core: 转储的内存大小

示例 2:按用户名排序,查看资源消耗

想知道哪个用户是“资源大户”?使用 -u 选项。

sa -u

可能的输出:

login       kbytes    cpu     re   mem   disk  chars  faults  core
user1      500000    300.2  280.1 20480     0       0       0     0
user2      300000    150.5  140.2 10240     0       0       0     0
root        50000     50.1   45.0  4096     0       0       0     0

示例 3:查看详细报告

使用 -v 选项可以获得更丰富的信息,包括平均值等。

sa -v

可能的输出:

cmd         kbytes    cpu     re   mem   disk  chars  faults  core avio  rss
bash         12345    10.5    8.2  1024     0       0       0     0   0    1024
python       56789    45.2   40.1  8192  10240       0       0     0   10   8192
gcc         234567   120.3  110.5 40960     0       0       0     0   0   40960

avio (平均 I/O 操作数) 和 rss (平均驻留集大小) 是新增的列。

示例 4:显示每个命令的 CPU 使用百分比

使用 -P 选项可以清晰地看到哪个命令是 CPU 的主要消耗者。

sa -P

可能的输出:

cmd         %cpu     %re     %mem
gcc         30.1     32.5     45.2
python      25.5     28.1     30.1
bash         5.2      4.8      2.5

示例 5:分析特定的记账文件

如果你有旧的或备份的记账文件,可以指定文件名进行分析。

sa -b /var/log/account/pacct.20251001

相关命令

sa 命令通常与一组“记账”工具一起使用:

  • lastcomm:显示已执行命令的记录列表,它读取 sa 的数据源文件,按时间倒序显示每个进程的详细信息(命令、用户、终端、CPU 时间等),非常适合调试单个事件。
    lastcomm | grep python
  • ac:按用户或日期登录时间报告,它读取 /var/log/wtmp 文件。
    ac -p # 按用户显示总连接时间
  • dump-acct / dump-utmp**:用于以可读的格式转储 pacctwtmp 文件的内容。

特性 描述
命令名称 sa
所属包 acct (Debian/Ubuntu) 或 psacct (RHEL/CentOS)
主要功能 汇总分析进程记账 (pacct) 文件,统计命令和用户的资源使用情况。
核心用途 资源审计、性能分析、多用户环境下的计费。
必备前提 必须先启用系统的进程记账功能。
常用搭档 lastcomm (查看原始记录), ac (统计登录时间)。

sa 是一个非常强大的系统分析工具,尤其对于系统管理员来说,掌握它可以让你更深入地了解系统的运行状况和资源瓶颈。

分享:
扫描分享到社交APP
上一篇
下一篇