nginx 无直接导出进程状态命令,需结合 ps 查看进程信息与 stub_status 模块获取连接及请求统计;须先确认启用 --with-http_stub_status_module,配置 location /nginx_status 并限制访问,再通过 curl 和 ps 采集并脚本整合输出。

Nginx 本身不提供直接导出进程运行状态的命令行工具,但可以通过组合系统命令和 Nginx 内置功能,获取其进程状态、连接数、请求处理情况等关键运行指标。核心思路是:利用 ps 查看进程信息,结合 nginx -s status(需启用 stub_status 模块)获取实时连接与请求统计,再通过脚本或命令行统一采集输出。
确认 Nginx 编译时启用了 stub_status 模块
这是获取详细 HTTP 状态(如活跃连接、请求数、处理数)的前提。执行以下命令检查:
nginx -V 2>&1 | grep -o with-http_stub_status_module
若无输出,说明未启用该模块,需重新编译 Nginx 并添加 --with-http_stub_status_module 参数。
配置并启用 stub_status 接口
在任意 server 块中(建议限制访问权限)添加如下配置:
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
重载配置:nginx -s reload。之后可通过 curl http://127.0.0.1/nginx_status 获取类似以下输出:
Active connections: 3
server accepts handled requests
12345 12345 67890
Reading: 0 Writing: 1 Waiting: 2
采集进程基础状态(PID、CPU、内存、启动时间等)
使用 ps 命令提取主进程和工作进程信息,例如:
ps -eo pid,user,%cpu,%mem,lstart,cmd --sort=-%cpu | grep '[n]ginx'
常用字段说明:
- PID:进程 ID
- %CPU / %MEM:当前 CPU 和内存占用率
- lstart:进程启动的完整时间
- cmd:命令行(可识别 master 还是 worker)
如需导出为 CSV 格式,可用 awk 处理,例如:
ps -eo pid,user,%cpu,%mem,lstart,cmd --sort=-%cpu | awk '/[n]ginx/ {print $1","$2","$3","$4","$5" "$6" "$7" "$8" "$9" "$10}' > nginx_ps.csv
整合导出为结构化状态快照
可编写简单 Bash 脚本,一次性采集进程信息 + stub_status 数据,保存为文本或 JSON:
#!/bin/bash
echo "=== Nginx Process Status $(date) ===" > nginx_status_report.log
echo -e "\n【Processes】" >> nginx_status_report.log
ps -eo pid,user,%cpu,%mem,lstart,cmd --sort=-%cpu | grep '[n]ginx' >> nginx_status_report.log
echo -e "\n【Stub Status】" >> nginx_status_report.log
curl -s http://127.0.0.1/nginx_status >> nginx_status_report.log
echo "" >> nginx_status_report.log
赋予执行权限后运行:chmod +x export_nginx_status.sh && ./export_nginx_status.sh,即可生成带时间戳的状态报告。











