T3 Code 非官方中文翻译不是官方产品,也不是 T3 Tools 官方文档。源提交 d2c25950b4d9英文原文GitHub 源文件
Skip to content

资源遥测 ​

进程计数来自独立 Rust 监视器,它使用 sysinfo。Electron 主进程提供主机电源数据和 Electron 进程指标。把原生采集放在 Node 之外,可以把采集器崩溃隔离开,也避开 Node/Electron 插件的 ABI 矩阵。桌面端服务器和 CLI 服务器使用同一套子进程协议。采集器缺失或失败时,服务器仍继续运行。

采集开销 ​

原生子进程负责采样,并持有有界的内存历史。只有诊断存在活跃订阅者时,它才按定时器采样。没有订阅者时,服务器发送的采样间隔为 0,子进程只在收到请求时采样,因此空闲的服务器从不会遍历进程表。例外是 OTLP 指标导出:正在导出指标的服务器每分钟请求一次采样,并按组导出进程合计(ProcessGroupMetrics),因为用户要求持续遥测。组是固定的一组名称,按服务器的直接子进程命名,从不用进程 ID 或线程,因此智能体来去时,序列数量仍保持有界。因此,历史只覆盖存在活跃订阅者的时段,再加上按需采样和导出采样。为后台调度而读取主机电源时,不得因此保持诊断处于活跃订阅状态。没有遥测数据库,也没有周期性的 shell 探测作为回退。

历史对保存时长、快照数量、进程行数和保留字节数分别设有上限。命令行长短不一,单靠条数限制无法约束内存。因此,很大的进程树会缩短可用的历史窗口。Linux 任务枚举已关闭,因为遍历每一个 /proc/<pid>/task/<tid> 目录会使采样本身变得昂贵。

Electron 的电源更新经由私有的继承管道传递,与渲染进程连接无关。诊断关闭后,电源事件和慢速心跳仍会继续;app.getAppMetrics() 只在有实时需求时运行。接收端判定过期的时限必须长于最慢的已配置心跳再加上调度宽限,否则有意的空闲轮询会让后台策略在受限与不受限状态之间来回摆动。无界面服务器会把不可用的电源数据保持为未知。

测量陷阱 ​

  • 进程身份包含启动时间,因为操作系统会复用 PID。Electron 与原生侧的启动时间精度不同,因此合并时允许少量容差。向进程发信号时,会用一次新的采样重新核对原生身份。
  • 快照序列号属于某一代监视器。跨重启比较这些序列号,会把新监视器的采样丢掉,直到它的序列号追上为止。
  • 采样可能漏掉在两次采样之间启动并退出的进程。对于跨多次采样仍能观察到的进程,累积计数器仍然能给出增量。
  • Windows 的进程 I/O 包含的不只是磁盘流量。Unix 计数器报告的是存储 I/O;由于操作系统缓存,它可能与应用程序的逻辑读写不同。请把插桩得到的逻辑 I/O 与这些计数器分开。
  • 组合计累积的是遥测启动以来观察到的增量。按进程的累积计数器覆盖该进程在操作系统中的整个存续期。
  • 历史回放使用原生采样,不带当前的 Electron CPU 或内存指标。合并最新的 Electron 数值会覆盖过去的记录。

即便 Electron 运行在 Windows 上,WSL 后端也需要 Linux 监视器。Windows 桌面软件包目前只提供 Windows 可执行文件,因此 WSL 后端的原生进程遥测不可用。继承而来的 Electron 电源数据仍然可用。

非官方译文 · 源提交 d2c25950b4d9 · 不代表 T3 Tools