31 个版本

0.18.5 2024年6月26日
0.18.4 2023年12月3日
0.18.3 2023年8月20日
0.18.2 2023年2月18日
0.11.0 2020年7月19日

#121 in 命令行工具

GPL-3.0-or-later

215KB
5.5K SLoC

Oprs

Rust Crates.io Crates.io

Oprs 是 Linux 的进程监控器。其名称是 Observe Process ReSources 的缩写。

它基于 procfs

功能

  • 监控内存、执行时间、输入/输出、页面错误、文件描述符、映射内存区域。
  • 可选的最小值和最大值。
  • 通过 PID、PID 文件或名称选择进程。
  • 以纯文本或终端 UI 显示。
  • 以 CSV 或 RRDtool 格式导出。

示例

要获取 PID (firefox) 的进程内存大小、已用时间和页面错误,PID 文件 (pulseaudio) 的进程以及名称 (bash) 的进程,运行

oprs -F human -p 6913 -f pulseaudio.pid -n dhclient mem:vm mem:rss+max time:elapsed fault:major

Screenshot of oprs

没有参数时,命令将打印可用的指标。

默认情况下,除非添加了 -raw,否则打印原始数据:mem:rss-raw+min+max。

指标

没有参数时,命令将打印可用的指标列表。

允许有限模式的指标:前缀 mem:*, 后缀 :call,两者 io::count。

指标后面可以跟单位。例如:mem:vm/gi

可用单位

  • ki kibi
  • mi mebi
  • gi gibi
  • ti tebi
  • k kilo
  • m mega
  • g giga
  • t tera
  • sz k, m, g 或 t 中最佳的单位。
  • du 按小时、分钟、秒格式化持续时间。

可以使用 +min 和/或 +max 对指标进行聚合。例如,mem:vm+max/gi 打印虚拟内存大小和峰值大小。要仅获取最大值,使用:mem:vm-raw+max。要获取全部:mem:vm+min+max。

对于某些指标,最小值或最大值没有意义。

数据类型

指标可以是

  • 计数器:始终增加的值,如读取调用次数或 CPU 时间。
  • 仪表:可能减少的正值,如内存消耗。

CPU 使用率

与其他工具不同,time:cpu+ratio 显示的进程 CPU 使用率是总 CPU 时间的百分比。使用 4 核系统所有核心的进程将是 100%,而不是 400%。

CPU 使用率是 (stime + utime) / ((user - guest) + (nice - guest_nice) + system + idle + iowait + irq + softirq),其中 stime 和 utime 来自 /proc/PID/stat,而 user, … 来自 /proc/stat。

进程

通过以下四种方式之一选择进程:

  • 选项 --pid:进程的pid。

  • 选项 --pid-file:包含进程pid的文件。命令开始时该文件不必存在。

  • 选项 --name:监控所有具有给定名称的进程。

  • 选项 --merge:将具有相同名称的所有进程的指标相加。进程的数量用括号显示,而不是pid。

选项可以指定多次。

导出

CSV

在CSV导出中,第一列是自Unix纪元以来的秒数。

使用--export-size可以限制导出数据的量,以设置CSV文件的最大大小,以及使用--export-count设置最大文件数。

循环冗余检测数据库(RRD)

通过启动一个RRDtool进程为每个进程创建一个RRD数据库。数据库中只写入原始值。

行数通过选项 --export-count 设置。

选项 --graph 在导出目录中为每个指标创建一个png文件。

Screenshot of RRD graph

配置

配置文件名为 settings.ini。其位置根据XDG Base Directory Specification确定。

示例 ~/.config/oprs/settings.ini

[display]
mode = term
every = 10
format = human
theme = light
border = yes

[export]
kind = csv
dir = /tmp
size = 10m
count = 5

[logging]
file = /var/log/oprs.log
level = info

[targets]
system = yes
myself = yes

许可

版权所有 (c) 2020-2021 Laurent Pelecq

oprs 根据 GNU 通用公共许可证版本 3 分发。

有关详细信息,请参阅LICENSE GPL3

依赖项

~12–22MB
~322K SLoC