性能监控与分析
本文引用的文件
- src/http_stats.v
- articles/11-observability.md
- php/package/src/VHttpd/WordPress/Profiler.php
- php/package/wordpress/v-profiler.php
- admin/ui/app.js
- src/config/config.v
- src/server_lifecycle/runtime_config.v
目录
简介
本文件面向生产环境的可观测性与性能调优,聚焦以下目标: - 说明 vhttpd 内置的 HTTP 统计指标收集机制(请求总数、错误数、超时数、流式连接数等) - 介绍 PHP Profiler(v-Profiler)的配置与使用方式 - 提供与 Prometheus/Grafana 等外部监控系统的集成方案 - 给出定位性能瓶颈的方法(CPU、内存、慢查询等) - 提供仪表板配置示例与告警规则建议
项目结构
围绕“指标采集—管理平面—可视化—外部系统”的主线,关键位置如下: - 指标计数模型:HTTP 层计数器定义与自增方法 - 管理平面与运行时信息:Admin Plane 端点、运行时摘要、Worker 状态、事件日志 - PHP 侧性能剖析:v-Profiler 插件在 WordPress 生命周期中采集 SQL、Hook、外部请求、缓存命中率等 - Admin UI:前端聚合展示运行态与可观测性指标 - 配置项:Admin 服务、资源静态化、执行器与 Worker 相关参数
graph TB
subgraph "内核与运行时"
A["HTTP 统计模型<br/>src/http_stats.v"]
B["运行时配置<br/>src/config/config.v"]
C["运行时装配<br/>src/server_lifecycle/runtime_config.v"]
end
subgraph "管理平面"
D["Admin 文档与端点<br/>articles/11-observability.md"]
E["Admin UI 前端<br/>admin/ui/app.js"]
end
subgraph "PHP 应用侧"
F["v-Profiler 插件入口<br/>php/package/wordpress/v-profiler.php"]
G["v-Profiler 核心类<br/>php/package/src/VHttpd/WordPress/Profiler.php"]
end
A --> D
B --> C
C --> D
D --> E
F --> G
G --> D
图示来源 - src/http_stats.v:1-32 - src/config/config.v:132-171 - src/server_lifecycle/runtime_config.v:146-171 - articles/11-observability.md:1-120 - admin/ui/app.js:656-675 - php/package/wordpress/v-profiler.php:62-127 - php/package/src/VHttpd/WordPress/Profiler.php:54-114
章节来源 - src/http_stats.v:1-32 - articles/11-observability.md:1-120 - php/package/wordpress/v-profiler.php:62-127 - php/package/src/VHttpd/WordPress/Profiler.php:54-114 - admin/ui/app.js:656-675 - src/config/config.v:132-171 - src/server_lifecycle/runtime_config.v:146-171
核心组件
- HTTP 统计模型
- 提供请求总数、错误数、超时数、流式连接数、管理操作数等计数器及自增方法
- 用于上层统计聚合与对外暴露
- 管理平面(Admin Plane)
- 提供运行时摘要、Worker 状态、统计数据、上游连接、MCP 会话等端点
- 支持 NDJSON 事件日志输出,便于外部采集
- PHP Profiler(v-Profiler)
- 在 WordPress 生命周期早期启动,采集时间线、SQL、Hook、外部 HTTP、缓存命中、安全头、WooCommerce 上下文等
- 通过内部 Socket 拉取 vhttpd 运行时与数据库池信息,形成统一报告
- Admin UI
- 聚合展示 HTTP 请求、错误率、路由、WebSockets、Uptime 等关键指标
章节来源 - src/http_stats.v:1-32 - articles/11-observability.md:35-140 - php/package/src/VHttpd/WordPress/Profiler.php:54-114 - admin/ui/app.js:656-675
架构总览
下图展示了从请求进入、指标采集、到管理与可视化的整体流程。
sequenceDiagram
participant Client as "客户端"
participant VHTTPD as "vhttpd 内核"
participant Stats as "HTTP 统计模型<br/>src/http_stats.v"
participant Admin as "Admin 端点<br/>articles/11-observability.md"
participant UI as "Admin UI<br/>admin/ui/app.js"
participant WP as "WordPress 应用"
participant Profiler as "v-Profiler<br/>Profiler.php"
Client->>VHTTPD : "HTTP 请求"
VHTTPD->>Stats : "inc_requests()/inc_errors()/inc_timeouts()/inc_streams()"
VHTTPD-->>Client : "响应"
Client->>Admin : "GET /admin/runtime|/admin/stats|/admin/workers"
Admin-->>Client : "JSON 运行时/统计/Worker 信息"
Client->>UI : "访问管理界面"
UI->>Admin : "轮询运行时与指标"
WP->>Profiler : "生命周期钩子触发"
Profiler->>Admin : "通过内部 Socket 拉取运行时/DB 池信息"
Profiler-->>WP : "注入诊断数据与工具栏"
图示来源 - src/http_stats.v:1-32 - articles/11-observability.md:35-140 - admin/ui/app.js:656-675 - php/package/src/VHttpd/WordPress/Profiler.php:489-528
详细组件分析
HTTP 统计模型(请求/错误/超时/流式连接)
- 数据结构与方法
- 字段:requests_total、errors_total、timeouts_total、streams_total、admin_actions_total
- 方法:inc_requests()、inc_errors()、inc_timeouts()、inc_streams()、inc_admin_actions()
- 使用场景
- 在 HTTP 处理路径的关键节点调用对应自增方法,实现无侵入的指标采集
- 上层将累计值导出为管理端点或外部监控系统格式
classDiagram
class HttpStats {
+i64 requests_total
+i64 errors_total
+i64 timeouts_total
+i64 streams_total
+i64 admin_actions_total
+inc_requests() void
+inc_errors() void
+inc_timeouts() void
+inc_streams() void
+inc_admin_actions() void
}
图示来源 - src/http_stats.v:1-32
章节来源 - src/http_stats.v:1-32
管理平面与运行时统计
- 核心端点
- 运行时摘要:包含 Worker 池、HTTP 请求/错误、流式/WebSocket 连接、MCP 会话、内存与运行时长等
- Worker 状态:每个 Worker 的 ID、PID、状态、请求计数、内存占用等
- 运行时统计:请求速率、延迟分位、错误分类(如 worker_timeout、worker_queue_full、upstream_error)
- 事件日志
- NDJSON 格式,记录 http.request、worker.request、upstream.*、error 等事件
- 便于外部采集与离线分析
flowchart TD
Start(["进入管理端点"]) --> CheckAuth["校验认证令牌"]
CheckAuth --> AuthOK{"是否授权?"}
AuthOK -- "否" --> Deny["返回 401/403"]
AuthOK -- "是" --> ReadRuntime["读取运行时/Worker/统计"]
ReadRuntime --> Format["序列化为 JSON"]
Format --> Return["返回响应"]
图示来源 - articles/11-observability.md:35-140
章节来源 - articles/11-observability.md:35-140
PHP Profiler(v-Profiler)配置与使用
- 启用时机
- 在 WordPress 极早期过滤器与动作中启动,确保捕获插件加载阶段错误与耗时
- 支持管理员 Cookie 鉴权与调试开关控制
- 采集内容
- 时间线检查点、SQL 语句与调用栈、Hook 调用次数与回调位置、外部 HTTP 请求耗时、对象缓存命中率、安全头检测、WooCommerce 上下文与优化建议
- 与 vhttpd 集成
- 通过内部 Socket 拉取 vhttpd 运行时与数据库池信息,合并到诊断报告中
sequenceDiagram
participant WP as "WordPress"
participant Entry as "v-profiler.php"
participant Core as "Profiler.php"
participant AdminSock as "内部 Socket"
participant Runtime as "vhttpd 运行时"
WP->>Entry : "插件初始化"
Entry->>Core : "start()/activate()"
Core->>AdminSock : "GET /runtime, /runtime/db, /executors"
AdminSock->>Runtime : "转发请求"
Runtime-->>AdminSock : "返回运行时/DB 池/执行器信息"
AdminSock-->>Core : "解析并合并到报告"
Core-->>WP : "注入诊断数据与工具栏"
图示来源 - php/package/wordpress/v-profiler.php:62-127 - php/package/src/VHttpd/WordPress/Profiler.php:489-528
章节来源 - php/package/wordpress/v-profiler.php:62-127 - php/package/src/VHttpd/WordPress/Profiler.php:54-114 - php/package/src/VHttpd/WordPress/Profiler.php:489-528
Admin UI 仪表板
- 展示维度
- HTTP 请求总量与错误率、路由数量、开放通道、活跃 WebSockets、进程运行时长
- 健康状态与关键异常汇总
- 数据来源
- 轮询管理端点获取运行时与统计信息,渲染拓扑与指标卡片
章节来源 - admin/ui/app.js:656-675
配置项与运行时装配
- Admin 服务
- host/port/token 控制管理平面监听与鉴权
- 资源静态化
- assets.enabled/prefix/root/cache_control 控制静态资源服务策略
- 运行时装配
- 将 Admin、Assets、Worker 超时与队列容量等参数注入 AppRuntimeBuildConfig,供运行时使用
章节来源 - src/config/config.v:132-171 - src/server_lifecycle/runtime_config.v:146-171
依赖关系分析
- 低耦合高内聚
- HTTP 统计模型独立于业务逻辑,仅负责计数
- 管理平面通过配置驱动,聚合运行时与统计信息
- v-Profiler 通过内部 Socket 与 vhttpd 通信,避免强耦合
- 外部依赖
- Prometheus/Grafana 通过管理端点抓取指标
- 事件日志以 NDJSON 形式输出,便于外部采集
graph LR
Stats["HTTP 统计模型"] --> Admin["管理端点"]
Config["配置与运行时装配"] --> Admin
Profiler["v-Profiler"] --> Admin
Admin --> UI["Admin UI"]
Admin --> Prometheus["Prometheus"]
Admin --> Grafana["Grafana"]
图示来源 - src/http_stats.v:1-32 - articles/11-observability.md:406-433 - admin/ui/app.js:656-675
章节来源 - src/http_stats.v:1-32 - articles/11-observability.md:406-433 - admin/ui/app.js:656-675
性能考量
- 指标采集开销
- 计数器自增为 O(1),对主路径影响极低
- 建议在热点路径按需开启更细粒度统计
- 管理端点负载
- 高频轮询可能带来额外压力,建议合理设置轮询间隔
- v-Profiler 开销
- 仅在调试模式或管理员 Cookie 下激活,避免生产环境常驻开销
- 外部 HTTP 与 SQL 调用栈采集会引入少量 CPU/内存消耗,按需开启
[本节为通用指导,不直接分析具体文件]
故障排查指南
- 常见症状与步骤
- Worker 无响应:查看 Worker 状态、事件日志中的 worker.error、必要时重启问题 Worker
- 上游连接频繁断开:查看上游连接状态与事件、测试上游连通性
- MCP 会话无法创建:检查 MCP 状态与 Worker 繁忙情况、查看 MCP 错误日志
- 内存持续增长:监控 memory_mb、限制 max_requests、优化代码与增加池大小
- 慢查询与外部请求
- 使用 v-Profiler 的 SQL 列表与外部 HTTP 列表,结合调用栈定位慢点
- 关注 WooCommerce 相关 SQL 与第三方 API 耗时,结合 HPOS 与缓存策略优化
章节来源 - articles/11-observability.md:530-619 - php/package/src/VHttpd/WordPress/Profiler.php:610-704 - php/package/src/VHttpd/WordPress/Profiler.php:706-750
结论
- vhttpd 提供了轻量且可扩展的可观测性基础:HTTP 统计模型、管理端点、NDJSON 事件日志
- v-Profiler 在 PHP 侧补齐了 SQL/Hook/外部请求/缓存与安全头的深度诊断能力
- 通过 Admin UI 与外部系统(Prometheus/Grafana)可实现端到端的监控与告警闭环
- 在生产环境中应谨慎开启高开销采集,结合阈值与告警快速定位瓶颈
[本节为总结,不直接分析具体文件]
附录
Prometheus 集成与告警规则
- 抓取配置
- 在 prometheus.yml 中添加 job,指向 vhttpd 管理端点的 metrics_path 与认证头
- 自定义指标
- 在 PHP Worker 中通过 Metrics API 上报自定义指标(增量、度量、直方图)
- 推荐告警规则
- Worker 空闲数为 0 持续一段时间
- Worker 队列积压超过阈值
- 错误率高于阈值
- 上游连接断开
- MCP 会话接近上限
章节来源 - articles/11-observability.md:406-433 - articles/11-observability.md:469-526
性能调优要点
- Worker 池与超时
- pool_size 建议按 CPU 核心数调整;read_timeout_ms 区分普通与 AI 流式请求
- 队列与重连退避
- queue_capacity/queue_timeout_ms 控制背压;restart_backoff_* 控制重试节奏
- MCP 与会话
- max_sessions/session_ttl_seconds/max_pending_messages 控制并发与清理策略