IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    不通过 web server 获取 php-fpm 运行状态

    神仙发表于 2016-01-15 03:50:46
    love 0

    php-fpm 可以配置一个 pm.status_path ,如 /status,然后通过 web server 访问这个地址来获取运行状态。但这样会侵入 web server 的配置,在一个 web server 后端有多个 php-fpm 的适合也不方便分别监控每一个后端的状态,为了安全,还要配置访问控制。

    好在有个现成的工具 cgi-fcgi,可以把 fcgi 请求包装成 cgi 方式,这样就可以直接在命令行中调用 fastcgi。

    cgi-fcgi 在 redhat/centos 中可以用 yum install fcgi 安装,在 ubuntu 中可以用 apt-get install libfcgi-dev 安装。

    用以下方式就能获取 php-fpm 的状态了。

    path=/status
    
    export REQUEST_METHOD=GET
    export SCRIPT_NAME="$path"
    export SCRIPT_FILENAME="$path"
    export QUERY_STRING=''
    # export QUERY_STRING='full'
    # export QUERY_STRING='json'
    # export QUERY_STRING='full&xml'
    
    addr=/var/run/php-fpm.socket
    # addr=127.0.0.1:9000
    
    cgi-fcgi -bind -connect "$addr"
    

    QUERY_STRING 设置为 full 会显示每一个 worker 进程的状态。添加 json、xml、html 可以以不同格式显示结果。

    下面是单行脚本的写法和运行结果:

    # env REQUEST_METHOD=GET SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING='' cgi-fcgi -bind -connect /var/run/php-fpm.socket
    Expires: Thu, 01 Jan 1970 00:00:00 GMT
    Cache-Control: no-cache, no-store, must-revalidate, max-age=0
    Content-type: text/plain;charset=UTF-8
    
    pool:                 www
    process manager:      dynamic
    start time:           15/Jan/2016:10:48:15 +0800
    start since:          4604
    accepted conn:        693119
    listen queue:         0
    max listen queue:     0
    listen queue len:     0
    idle processes:       157
    active processes:     3
    total processes:      160
    max active processes: 50
    max children reached: 0
    slow requests:        17
    


沪ICP备19023445号-2号
友情链接