php-fpm 为感兴趣的人提供了一个状态页面。看起来像这样:
curl http://localhost/server-status
pool: default
process manager: dynamic
start time: 11/Dec/2014:17:51:33 -0500
start since: 61383
accepted conn: 4682
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 11
active processes: 1
total processes: 12
max active processes: 2
max children reached: 0
slow requests: 3
如何从 php 访问此信息?请不要告诉我使用curl从本地主机请求状态页面。
不幸的是 FPM 的
server-status
不是 PHP 机制。您无法通过内部 PHP 机制获取它。
达到此目的的唯一方法是使用某种连接机制到 fpm 服务器本身。
您可以通过使用
CURL
或 file_get_contents()
或任何其他从 url 获取数据的机制从 url 获取信息来获取它。您可以使用以下参数将本地套接字与 shell exec 连接:
(外壳代码)
SCRIPT_NAME=/status \
SCRIPT_FILENAME=/status \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect /var/run/php-fpm/www.sock
PHP 7.3+ 现在有一个
fpm_get_status()
,它返回状态信息数组,包括摘要。
在 ubuntu 中我可以通过此访问 PHP-FPM 状态页面
SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php/php7.0-fpm.sock
注意: 运行上述命令时,您可能会遇到未找到错误,例如
Primary script unknown
Status: 404 Not Found
Content-type: text/html; charset=UTF-8
File not found.
如果您收到此错误,请确保您已取消注释
pm.status_path = /status
中的 pool.d/www.conf
。
使用 PHP 7 的 ubuntu 17.04 中该配置文件的绝对路径是
/etc/php/7.0/fpm/pool.d/www.conf
,行号是 232
编辑conf文件后,用
service php7.0-fpm restart
重新启动fpm
通过 PHP 脚本获取
您可以通过 php 运行上述命令来获取 php-fpm 状态的输出
exec()
exec( 'SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php/php7.0-fpm.sock', $php_fpm_status );
// Above statement will assign an array to $php_fpm_status filled with every line of output from the command, make it as whole string
$php_fpm_status = implode(PHP_EOL, $php_fpm_status);
// You can try printing php-fpm status
echo $php_fpm_status;