- 指标监控
- 监控大盘
- CLI
- 告警
- MCP 服务
【免费下载链接】glances
Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.
本文以 Glances 官方文档 docs/aoa/ps.rst(Anatomy Of The Application 系列中的进程视图章节)为骨架,系统讲解 Glances 进程列表的界面组成、摘要行语义、自动/手动排序机制、各列含义、过滤与聚焦语法、扩展统计、按程序累计以及进程导出功能,并结合 processlist 插件源码、进程管理核心 与 glances.conf 配置模板 逐项印证底层实现。读完本文,你将能在 TUI 界面中熟练切换排序键、编写正则过滤规则、固定并诊断单个进程、按程序聚合视图,以及把指定进程精确导出到 CSV 等后端。
一、进程视图的整体构成
Glances 的进程视图(Processes List)是 TUI 中信息量最大、最常被关注的区域。从源码结构看,它由以下部分组成:
- Processes summary(进程摘要行):总任务数、线程数、运行/睡眠/其他状态的进程数,以及当前排序键;
- Monitored processes list(受监控进程列表,可选):仅在独立模式(standalone)下出现,用于展示被"聚焦"的进程;
- Extended stats for the selected process(选中进程的扩展统计,可选):按
e键固定某个进程后显示其 CPU 亲和性、内存细节、打开的文件/线程/网络会话等; - Processes list(进程列表本体):按当前排序键排列的进程表格,行数自适应屏幕大小(对应源码中的
max_processes,见 glances/processes.py)。
进程摘要行(summary)展示以下统计,其中总任务数在 Glances API 中别名为total:
- 任务/进程总数(API 字段
total); - 线程数(API 字段
thread); - 运行中的任务数(API 字段
running); - 睡眠中的任务数(API 字段
sleeping); - 其他状态(非 running 或 sleeping)的任务数;
- 当前进程列表使用的排序键。
二、排序机制:自动排序与手动排序
2.1 默认自动排序(a键)
默认情况下(或按下a键后),进程列表由 Glances自动选择排序键,规则如下:
CPU:没有告警时(默认行为);CPU:检测到 CPU 或 LOAD 告警时;MEM:检测到内存告警时;DISK I/O:检测到 CPU iowait 告警时。
对应源码中set_sort_key('auto', auto=True)会开启auto_sort并把初始键设为cpu_percent(见 glances/processes.py),真正执行排序的是sort_stats()(见 glances/processes.py),默认按cpu_percent降序、以memory_percent作为次级排序键。
2.2 手动排序:快捷键与命令行
在 TUI 中既可以通过左右箭头点击表头,也可以使用快捷键或启动参数强制指定排序键:
| 快捷键 | 命令行选项 | 说明 |
|---|---|---|
a | (自动排序) | 默认的自动排序 |
c | --sort-processes cpu_percent | 按 CPU 排序 |
e | N/A | 固定(pin)当前进程并显示扩展统计 |
i | --sort-processes io_counters | 按 DISK I/O 排序 |
j | --programs | 按程序累计进程(此模式下扩展统计禁用) |
m | --sort-processes memory_percent | 按 MEM 排序 |
p | --sort-processes name | 按进程名排序 |
t | --sort-processes cpu_times | 按 CPU 时间排序 |
u | --sort-processes username | 按进程用户名排序 |
命令行选项--sort-processes的解析定义在 glances/main.py,传入后会在插件初始化时调用glances_processes.set_sort_key(args.sort_processes_key, False)覆盖默认键(见 processlist 插件构造函数)。此外,配置文件中也可以通过[processlist]段的sort_key设置默认排序键(见 glances/plugins/processlist/init.py 与 conf/glances.conf),例如:
[processlist] sort_key=memory_percent注意:按name、username、cpu_num排序时是正序,其余键为降序(sort_reverse逻辑见 glances/processes.py)。
三、进程列表列详解
进程列表的列头与每列的渲染布局定义在 glances/plugins/processlist/init.py,以下是完整列说明:
| 列 | 含义与说明 |
|---|---|
CPU% | 进程使用的 CPU 百分比。若关闭 Irix/Solaris 模式(按0键),该值会除以逻辑核心数,列名相应变为CPUi(源码见 processlist 插件) |
MEM% | 进程使用的内存百分比,即 RES 除以机器总内存 |
VIRT | 虚拟内存大小。包含全部代码、数据、共享库,以及被换出(swap out)的页和已映射未使用的页。虚拟内存通常远大于物理内存,多数情况下该数字参考价值有限 |
RES | 常驻内存大小,即进程当前占用的非交换物理内存 |
PID | 进程 ID(在累计模式下该列被NPROCS替换) |
NPROCS | 进程 + 子进程数量(仅累计模式) |
USER | 用户 ID |
THR | 进程的线程数 |
TIME+ | 进程累计 CPU 时间(用户态 + 内核态之和,格式化逻辑见 processlist 插件) |
NI | 进程 nice 值(优先级)。Windows 上会以短标签显示,如No(正常)、Lo(空闲)、Hi(高)等,见 display_nice |
S | 进程状态,取值如下 |
R/s | 进程 I/O 读取速率(B/s) |
W/s | 进程 I/O 写入速率(B/s) |
CPU | 进程当前所在 CPU 核心编号(0 基),进程迁移时会动态更新;信息不可用时显示- |
COMMAND | 进程命令行或进程名(按/键可切换显示方式) |
3.1 进程状态(S列)取值
R:running 或 runnable(处于运行队列);S:interruptible sleep(等待某个事件);D:uninterruptible sleep(通常是 I/O);Z:defunct("僵尸"进程);T:被 job control 信号跟踪;t:在跟踪期间被调试器停止;X:dead(理论上不应出现)。
状态列与 nice 列的着色告警分别由get_status_alert()与get_nice_alert()实现(processlist 插件),阈值可在配置文件中覆盖。
3.2CPU列的可用性说明
CPU(进程所在核心)列仅在 Linux、FreeBSD 和 SunOS 上可用,Windows 与 macOS 上自动禁用。若需要关闭该列,可在glances.conf的[processlist]段配置:
[processlist] disable_stats=cpu_num这正是配置文件模板中的默认值(见 conf/glances.conf)。disable_stats支持逗号分隔的多个统计项,可禁用的项包括cpu_percent,memory_info,memory_percent,username,cpu_times,num_threads,nice,status,io_counters,cmdline,cpu_num,其中pid与name不可禁用(见 conf/glances.conf)。该配置在插件加载时通过glances_processes.disable_stats = ...生效(processlist 插件),并在采集阶段被剔除(glances/processes.py)。
3.3 禁用虚拟内存列(VIRT)
如果不想显示 VIRT 列,在glances.conf的[processlist]段添加:
[processlist] disable_virtual_memory=True渲染时插件会据此跳过 VIRT 表头与每行数据,仅保留 RES(见 processlist 插件 与 conf/glances.conf)。
四、进程过滤(Filtering)
4.1 交互式过滤(ENTER键)
在 TUI 中按ENTER键可以输入过滤规则,Glances 过滤器语法如下(均为正则表达式):
python:进程名或命令行以python开头(正则python,等价于^python语义);.*python.*:进程名或命令行包含python;username:nicolargo:属于用户nicolargo的进程(key:regexp形式);cmdline:\/usr\/bin.*:命令行以/usr/bin开头的进程。
过滤器实现位于 glances/filter.py:GlancesFilter负责把用户输入拆分为key与正则,使用re.compile编译后通过fullmatch匹配;未指定 key 时同时匹配name与cmdline两个字段(glances/filter.py),cmdline为列表时会取首个元素进行匹配。GlancesFilterList则管理逗号分隔的多个过滤器,命中任意一个即视为通过(glances/filter.py)。
4.2 进程聚焦(Process Focus)
除了临时过滤,还可以让 Glances只关注一组进程(列表聚焦)。可从命令行指定:
glances --process-focus .*python.*,.*firefox.*或在glances.conf中配置:
[processlist] focus=.*python.*,.*firefox.*聚焦后,界面顶部会显示 "Focus on following processes: ..." 提示行(见 processlist 插件),进程列表仅保留命中的进程(update_list()中的过滤逻辑见 glances/processes.py)。命令行与配置文件两种途径最终都写入glances_processes.process_focus(processlist 插件、glances/processes.py)。
4.3 过滤状态下的摘要统计
当过滤生效时,进程列表下方会显示过滤结果的汇总行,包括 CPU%、MEM% 之和、VIRT/RES 内存合计、I/O 读写速率合计等,并支持min/max/mean三档(对应_msg_curse_sum与_sum_stats,见 processlist 插件),按M键可重置 min/max 统计。
五、扩展统计:固定进程与进程操作
5.1 固定进程(e键 /--enable-process-extended)
在独立(standalone)模式下,Glances 会为顶部进程额外采集扩展信息:
CPU affinity:进程使用的核心数;Memory info:扩展内存信息,例如 Linux 上的 swap、shared、text、data(由set_extended_stats通过 psutil 抓取,见 glances/processes.py);Open:进程使用的线程数、文件数(num_fds,Unix)、句柄数(num_handles,Windows)以及 TCP/UDP 网络会话数;IO nice:进程的 I/O 优先级(Linux 上显示调度类与 0-7 的 value,见 processlist 插件)。
启用方式有两种:
glances --enable-process-extended或在 TUI 中选中进程后按e键固定(pin),再按e取消固定。固定后,面板还会显示该进程 CPU/MEM 的Min/Max/Mean统计(采样自历史值,见 glances/processes.py)。
5.2 杀死进程(k键)
在 curses/独立模式下,用UP/DOWN方向键选中进程后:
- 按
k杀死选中的进程。
5.3 阈值覆盖(note)
CPU与MEM百分比的告警阈值可以在配置文件的[processlist]段覆盖,默认值为 50/70/90:
[processlist] cpu_careful=50 cpu_warning=70 cpu_critical=90 mem_careful=50 mem_warning=70 mem_critical=90还可以为 nice 值定义告警阈值(逗号分隔列表),例如:
nice_warning=-20,-19,-18状态列也可配置:status_ok默认包含R,W,P,I,status_critical默认包含Z,D(见 conf/glances.conf)。
六、按程序累计视图(j键 /--programs)
按下j快捷键或使用命令行选项--programs(glances/main.py)后,进程列表会从"按进程"切换到"按程序"累计视图:
- 同一程序的多个进程被合并,展示累计的 CPU 消耗、累计虚拟/常驻内存、累计 I/O 传输数据;
PID列被NPROCS列取代,显示该程序包含的进程(含子进程)数量;- 此模式下扩展统计(extended stats)被禁用。
底层由processes_to_programs()聚合、_get_programs()缓存结果实现(见 glances/processes.py),相关实现与测试可参考 tests/test_programs_aggregation.py 与 tests/test_program_aggregation.py。
七、进程导出(Export Process)
Glances 4.x 引入的进程导出功能,允许把特定进程导出到 CSV、InfluxDB 等后端,便于长期监控单个应用(如 firefox)。使用方式有两种:配置文件中的export选项,或命令行--export-process-filter选项(glances/main.py)。
7.1 配置示例
示例一:导出所有名为python(或命令行包含python)的进程:
[processlist] export=.*python.*等价命令行:glances --export-process-filter ".*python.*"
示例二:导出名字为python或bash的进程:
[processlist] export=.*python.*,.*bash.*等价命令行:glances --export-process-filter ".*python.*,.*bash.*"
示例三:导出属于用户nicolargo的所有进程:
[processlist] export=username:nicolargo等价命令行:glances --export-process-filter "username:nicolargo"
导出结果以PID 作为 key。例如把 firefox 进程导出到 CSV 文件:
配置文件(glances.conf):
[processlist] export=.*firefox.*等价命令行:glances --export-process-filter ".*firefox.*"
完整命令示例(禁用其余插件、只启用 processlist、静默模式):
glances -C ./conf/glances.conf --export csv --export-csv-file /tmp/glances.csv --disable-plugin all --enable-plugin processlist --quiet输出示例(CSV,每行一个采样时刻的进程快照):
timestamp,845992.memory_percent,845992.status,845992.num_threads,845992.cpu_timesuser,845992.cpu_timessystem,845992.cpu_timeschildren_user,845992.cpu_timeschildren_system,845992.cpu_timesiowait,845992.memory_inforss,845992.memory_infovms,845992.memory_infoshared,845992.memory_infotext,845992.memory_infolib,845992.memory_infodata,845992.memory_infodirty,845992.name,845992.io_counters,845992.nice,845992.cpu_percent,845992.pid,845992.gidsreal,845992.gidseffective,845992.gidssaved,845992.key,845992.time_since_update,845992.cmdline,845992.username,total,running,sleeping,thread,pid_max 2024-04-03 18:39:55,3.692938041968513,S,138,1702.88,567.89,1752.79,244.18,0.0,288919552,12871561216,95182848,856064,0,984535040,0,firefox,1863281664,0,0.5,845992,1000,1000,1000,pid,2.2084147930145264,/snap/firefox/3836/usr/lib/firefox/firefox,nicolargo,403,1,333,1511,0 2024-04-03 18:39:57,3.692938041968513,S,138,1702.88,567.89,1752.79,244.18,0.0,288919552,12871561216,95182848,856064,0,984535040,0,firefox,1863281664,0,0.5,845992,1000,1000,1000,pid,2.2084147930145264,/snap/firefox/3836/usr/lib/firefox/firefox,nicolargo,403,1,333,1511,0注意导出列的命名规律:<pid>.<stat>作为列名,pid与name等标识性字段直接展开,末尾附带进程计数摘要(total、running、sleeping、thread、pid_max)。导出过滤在采集阶段即完成,只有命中的进程才进入导出列表(update_export_list(),见 glances/processes.py,插件对外暴露get_export(),见 processlist 插件)。
八、界面形态一览
Glances 进程列表依据屏幕宽度提供多种呈现形态,对应本文各节功能:
紧凑视图
宽屏视图
过滤视图
扩展视图
顶部进程扩展信息
九、小结
Glances 的进程列表远不止"每秒刷新一次表格"这么简单:自动排序会结合告警状态动态切换排序键;key:regexp语法让过滤与聚焦可以精确到用户名、命令行甚至 PID;e键固定进程即可获得 CPU/MEM Min/Max/Mean、亲和性、I/O nice 与文件/网络会话等诊断信息;j键按程序累计让"谁在吃资源"一目了然;而export过滤器配合 CSV/InfluxDB 等后端,则可以针对单个 PID 构建长期监控数据。若需继续深入,可进一步阅读 docs/aoa/index.rst 中的其他界面章节(header、quicklook、cpu、memory 等),或在源码中跟踪sort_stats()、set_extended_stats()与过滤器类的实现细节。
- 指标监控
- 监控大盘
- CLI
- 告警
- MCP 服务
【免费下载链接】glances
Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.
相关推荐
Refine v5 useList Hook 完全指南:数据列表的查询、分页、排序与过滤实战
Refine v5 useList Hook 完全指南:数据列表的查询、分页、排序与过滤实战 useList 是 Refine 核心包中面向"数据列表读取"场景
前端企业应用Polars 聚合实战指南:基于 `group_by` 的表达式聚合、分组内过滤与排序
Polars 聚合实战指南:基于 group_by 的表达式聚合、分组内过滤与排序 本文以 Polars 官方用户指南《Aggregation》为主体,围绕 g
数据分析大数据CVAT 过滤功能实战指南:对象过滤、列表排序与 CSV 导出的完整实现解析
CVAT 过滤功能实战指南:对象过滤、列表排序与 CSV 导出的完整实现解析 本篇基于 CVAT 官方文档 Filter https://link.gitcod
数据标注计算机视觉数据集AI 应用后端前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考