Glances 进程列表(Processes List)完全指南:排序、过滤、聚焦与按程序累计实战
2026/9/19 17:34:35 网站建设 项目流程
  • 指标监控
  • 监控大盘
  • CLI
  • 告警
  • MCP 服务

【免费下载链接】glances

Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.

项目地址:https://gitcode.com/gh_mirrors/gl/glances
点击查看免费下载

本文以 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 排序
eN/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

注意:按nameusernamecpu_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,其中pidname不可禁用(见 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 时同时匹配namecmdline两个字段(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)

CPUMEM百分比的告警阈值可以在配置文件的[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,Istatus_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.*"

示例二:导出名字为pythonbash的进程:

[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>作为列名,pidname等标识性字段直接展开,末尾附带进程计数摘要(totalrunningsleepingthreadpid_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.

项目地址:https://gitcode.com/gh_mirrors/gl/glances
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询