Stallhunt

io.github.guillem由 GitHub 账号 guillem 发布v0.5.1更新于 Oct 24, 2026

Evidence-backed Linux performance triage over MCP

概览

AI 生成的概览

本地 Linux 性能诊断服务器,让编码助手查询所在机器上 CPU、内存与 I/O 停顿的有证据支撑的诊断结论。

可以做什么
  • 查询究竟是什么在限制有效工作、谁在受影响、谁可能是责任方
  • 读取 CPU 调度争用、内存压力和块 I/O 的压力判定,含按进程归因与置信度
  • 借助常驻采样器获取近期压力的滚动视图以快速作答,也可关闭采样器
  • 基于有界观测窗口和结构化 JSON 证据,而非原始利用率数字
适用场景
适合在 Linux 机器变慢或过载、需要判断哪个进程拖累其他进程时使用,而不只是查看 top 或 vmstat 的输出。它面向在被排查主机本机上的本地诊断,而非远程集群监控。
运行要求
以本地进程方式运行(stdio),以 Linux MCPB 包分发;从源码构建需 Rust 1.85 或更新版本。需要 Linux 4.20 或更新版本、已挂载 procfs,且 /proc/pressure 下的 PSI 文件可读才能给出压力判定。未声明账号、API 密钥或环境变量。
安装前请注意
它会读取关于运行中进程的本地系统遥测数据,包括进程名和 PID,而 MCP 客户端可能按其自身数据政策传输工具结果。诊断按设计保持本地进行;README 说明 1.0 之前的输出结构仍可能变化。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Stallhunt,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Stallhunt

Stallhunt is a Linux-first command-line performance triage tool.

Repository: https://github.com/guillem/stallhunt

Traditional tools such as top, htop, iotop, vmstat, and iostat expose measurements. They are excellent tools, but the human operator still has to answer the harder question:

What is actually constraining useful work right now, who is suffering, and who is probably responsible?

Stallhunt aims to automate that reasoning.

Install

Requirements:

  • Linux 4.20 or newer with procfs mounted; readable PSI files under /proc/pressure are required for pressure verdicts,
  • Rust 1.85 or newer for source builds.

See docs/install.md for cargo install, release tarballs, and the support matrix.

From a clone:

bash
cargo install --path .stallhunt

Bare stallhunt runs a default 10-second hunt. On a terminal it renders a compact, color-coded report; piped or redirected output (stallhunt | cat, >file, CI) is unchanged plain text. Use --json for the full structured evidence, --verbose to expand the compact report's collapsed caveats back to full text, or --no-color (also NO_COLOR=1) to disable color without changing the layout:

bash
stallhunt --jsonstallhunt hunt --duration 30sstallhunt hunt --verbose

Capture and replay a normalized observation:

bash
stallhunt record --duration 10s --output incident.jsonstallhunt replay incident.jsonstallhunt redact incident.json --output incident.redacted.json

Follow finding lifecycle for a bounded number of rolling windows. On a terminal this opens a full-screen TUI (q quit, arrows/jk select, Enter/Space show or hide detail, PageUp/PageDown/Home/End scroll, h/? help). At 120×30 or larger it also shows the selected host/cgroup's six process-role lists beside the lifecycle panels; piped output or --json remain append-only text/JSON and carry the same scoped roles:

bash
stallhunt watch --interval 2s --count 3

Serve Model Context Protocol tools over stdio so coding agents can query diagnoses directly — a resident sampler keeps a rolling view of recent pressure for instant answers (for Claude Code: claude mcp add stallhunt -- stallhunt mcp; see docs/mcp-server.md):

bash
stallhunt mcp [--interval 2s] [--no-sampler]

Source packaging for an OpenAI local plugin, a Linux MCPB extension for compatible clients, and official MCP Registry metadata lives in the repository. These packages deliberately keep diagnosis local instead of hosting Stallhunt on a machine other than the one being investigated. See docs/directory-distribution.md.

Generate shell completions:

bash
stallhunt completions bash > ~/.local/share/bash-completion/completions/stallhuntstallhunt completions zsh > ~/.local/share/zsh/site-functions/_stallhunt

Recording output paths are not overwritten unless --force is supplied. Ten-second hunts are the normal diagnostic path; sub-second observations are telemetry smoke tests and do not receive healthy or pressure verdicts. See docs/development.md for validation and opt-in acceptance commands.

Core idea

The primary abstraction is lost time, not utilization.

High utilization is not automatically a problem. A machine using 95% of its RAM may be perfectly healthy. A CPU at 70% utilization may still have latency-sensitive work suffering from scheduler contention. The project therefore focuses on evidence of stalled progress:

  • CPU scheduler pressure,
  • I/O stalls,
  • memory pressure/reclaim,
  • lock contention,
  • network-related waits,
  • eventually deeper blocking chains.

Example output shape:

text
$ stallhunt
SYSTEM HEALTH: DEGRADED
1. CPU scheduling contention                         SEVERE   Impact:    23.4% pressure during observation   Victims:   postgres [4812], nginx [5120]   Suspects:  rustc [9231], ffmpeg [9401]   Confidence: high
   Evidence:     CPU PSI some avg10:          23.4%     run queue latency estimate:  elevated     rustc CPU consumption:       735%     postgres runnable delay:     3.8s / 10s
2. Block I/O contention                              MODERATE   Device:    nvme0n1   Victim:    postgres [4812]   Suspect:   restic [7712]   Confidence: medium
Memory: no significant pressure detected.High memory occupancy alone is not treated as a bottleneck.

This output is aspirational; the project will reach it incrementally.

Product principles

  1. Diagnose, do not merely display.
  2. Measure stalled progress whenever possible.
  3. Separate observation from inference.
  4. Show evidence for every diagnosis.
  5. Express uncertainty explicitly.
  6. Remain useful without eBPF.
  7. Stay cheap enough to run on a stressed system.
  8. Treat Git as the complete project memory.

Initial scope

The first useful release targets Linux and focuses on:

  • CPU scheduling contention,
  • memory pressure,
  • block I/O pressure,
  • per-process attribution where Linux exposes enough evidence,
  • cgroup/systemd-aware grouping when practical,
  • human-readable terminal output,
  • versioned machine-readable JSON (the pre-1.0 shape may evolve),
  • bounded observation windows,
  • deterministic offline fixture/replay analysis.

Later releases may add:

  • eBPF-based off-CPU analysis,
  • futex/lock contention,
  • syscall/blocking attribution,
  • network queue/socket diagnosis,
  • dependency/wait graphs,
  • richer cgroup/container analysis.

Repository map

text
.├── AGENTS.md├── CHANGELOG.md├── Cargo.toml├── LICENSE-APACHE├── LICENSE-MIT├── README.md├── src/│   ├── analysis.rs│   ├── cgroup.rs│   ├── cli.rs│   ├── cpu.rs│   ├── duration_us.rs│   ├── io.rs│   ├── main.rs│   ├── mcp/│   ├── memory.rs│   ├── observe.rs│   ├── psi.rs│   ├── record.rs│   ├── render.rs│   ├── report.rs│   ├── style.rs│   ├── tui/│   └── watch.rs├── tests/│   ├── cgroup_acceptance.rs│   ├── cli.rs│   ├── cpu_acceptance.rs│   ├── io_acceptance.rs│   ├── mcp.rs│   ├── memory_acceptance.rs│   └── fixtures/│       ├── cpu/│       └── proc-*└── docs/    ├── README.md    ├── install.md    ├── product.md    ├── architecture.md    ├── data-model.md    ├── telemetry.md    ├── inference-engine.md    ├── cli-ux.md    ├── security-privileges.md    ├── testing.md    ├── development.md    ├── codex-workflow.md    ├── experiments.md    ├── references.md    ├── roadmap.md    ├── status.md    ├── glossary.md    └── decisions/

Start with AGENTS.md, then docs/README.md.

Privacy Policy

Stallhunt reads bounded local Linux telemetry and does not independently send it over the network. MCP clients may transmit tool results according to their own data policies. See the full Stallhunt privacy policy for the data, storage, sharing, retention, and contact disclosures.

License

Dual-licensed under MIT or Apache-2.0, at your option.

Current state

For the current milestone, implemented capabilities, validation, known limits, and the next recommended task, see docs/status.md. Planned sequencing remains in docs/roadmap.md.

来源:README.md,提交 2df52cc

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.5.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分