frankenphp 本身不提供内置命令监控自身cpu和内存,需结合系统命令(如top、ps)、prometheus指标(如frankenphp_total_threads、frankenphp_busy_threads)及php内置函数(如memory_get_usage)分层观测。

FrankenPHP 本身不提供内置命令直接监控自身进程的 CPU 和内存占用,它依赖操作系统级工具和 Prometheus 指标协同观测。你需要分两个层面来看:
系统进程级:用标准 Linux 命令查 FrankenPHP 主进程
FrankenPHP 是一个单二进制(如 frankenphp 或 caddy),启动后表现为一个或多个 Go 进程。你可以用以下命令实时查看其资源消耗:
-
top -p $(pgrep -f "frankenphp\|caddy"):只聚焦 FrankenPHP 进程,动态显示 CPU / 内存使用率、RES/VIRT 占用 -
htop(需安装):更直观,支持按 CPU% 或 MEM% 排序,可展开线程视图(FrankenPHP 的 PHP 线程会作为子线程显示) -
ps aux --sort=-%cpu | grep -E "(frankenphp|caddy)":快速列出 CPU 占用最高的 FrankenPHP 相关进程 -
cat /proc/$(pgrep -f "frankenphp")/status | grep -E "VmRSS|VmSize":精确读取内存物理占用(VmRSS)和虚拟内存大小
PHP 运行时级:用 Prometheus 指标看线程与 Worker 资源状态
FrankenPHP 的核心可观测性不在“进程整体”,而在其内部 PHP 线程池和 Worker 行为。这些指标需通过 Caddy 的 metrics 端点暴露:
- 确保 Caddyfile 中启用了
metrics(例如{ admin :2019 metrics }) - 访问
curl http://localhost:2019/metrics | grep frankenphp,重点关注: -
frankenphp_total_threads和frankenphp_busy_threads:反映线程池负载饱和度(高 busy / total 比值 = CPU 瓶颈信号) -
frankenphp_queue_depth:非 Worker 请求排队数,持续 > 0 说明线程处理不过来,可能引发延迟上升甚至超时 - Worker 标签指标(如
frankenphp_worker_requests_total{worker="api.php"}):结合frankenphp_worker_busy_instances判断某个脚本是否长期占满线程、响应变慢
PHP 脚本内自查:用 memory_get_usage() 辅助定位内存热点
如果怀疑是某个 Worker 脚本内存泄漏或暴增,可在关键位置插入检测逻辑:
-
memory_get_usage(true)获取当前实际分配内存(含未用块) -
memory_get_peak_usage(true)查看执行峰值,对比ini_get('memory_limit')换算后的字节数 - 例如:当
memory_get_usage(true) > 0.8 * $limit_bytes时写入日志或触发告警
不需要额外装代理或改代码,靠系统命令 + Prometheus 指标 + 少量脚本埋点,就能覆盖从 OS 进程到 PHP 线程再到 Worker 实例的完整资源链路。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











