• php-fpm参数详解


    以下为32G内存服务器php-fpm配置:

    [global]
    pid = /usr/local/php/var/run/php-fpm.pid
    error_log = /home/www/wwwlogs/php-fpm.log
    log_level = notice
    
    [www]
    listen = /tmp/php-cgi.sock
    listen.backlog = -1
    listen.allowed_clients = 127.0.0.1
    listen.owner = www
    listen.group = www
    listen.mode = 0666
    user = www
    group = www
    pm = dynamic
    pm.max_children = 80    #最大子进程数
    pm.start_servers = 40   #dynamic启动时的进程数量
    pm.min_spare_servers = 40    #保证空闲进程的最小数,低于此数值会创建
    pm.max_spare_servers = 80    #保证空闲进程的最大数,高于此数值会杀死
    pm.max_requests = 1024
    pm.process_idle_timeout = 10s  #空闲进程超时时间
    request_terminate_timeout = 100
    request_slowlog_timeout = 0   #当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
    slowlog= var/log/slow.log #php-fpm慢日志位置

    参数解释:

    pm = xxx,指定进程管理方式,有3种可供选择:static、dynamic和ondemand。

    三种参数的区别:

    pm = static,始终保持一个固定数量的子进程,这个数由pm.max_children定义,这种方式很不灵活,也通常不是默认的。

    pm = dynamic,启动时会产生固定数量的子进程(由pm.start_servers控制)可以理解成最小子进程数,而最大子进程数则由pm.max_children去控制,子进程数会在最大和最小数范围中变化。闲置的子进程数还可以由另2个配置控制,分别是pm.min_spare_servers和pm.max_spare_servers。如果闲置的子进程超出了pm.max_spare_servers,则会被杀掉。小于pm.min_spare_servers则会启动进程(注意,pm.max_spare_servers应小于pm.max_children)。
     
    pm = ondemand,这种模式和pm = dynamic相反,把内存放在第一位,每个闲置进程在持续闲置了pm.process_idle_timeout秒后就会被杀掉,如果服务器长时间没有请求,就只会有一个php-fpm主进程。弊端是遇到高峰期或者如果pm.process_idle_timeout的值太短的话,容易出现504 Gateway Time-out错误,因此pm = dynamic和pm = ondemand谁更适合视实际情况而定。
     
    pm.max_requests = 1024,设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为0,则一直接受请求,最终导致内存不足,网站不能访问,如下图所示:
    
    

    prequest_terminate_timeout = 100,设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用。设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。

    常用命令:

    查看每个PHP-FPM进程的内存占用:ps -ylC php-fpm --sort:rss
    
    查看消耗内存最多的前 40 个进程:ps auxw|head -1;ps auxw|sort -rn -k4|head -40
    
    查看PHP-FPM的平均内存占用:ps –no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s
    ", sum/NR/1024,"M") }'
  • 相关阅读:
    LINQ学习系列-----1.3 扩展方法
    表单重复提交的三种情况及解决办法
    JDBC的简单封装
    Java学习路线图
    成为一名Java高级工程师你需要学什么
    站在烦恼里仰望幸福
    如何发布Web项目到互联网
    用户管理的设计--2.新增用户信息实现
    MD5加密工具
    springMvc注解之@ResponseBody和@RequestBody
  • 原文地址:https://www.cnblogs.com/ltlinux/p/11357446.html
Copyright © 2020-2023  润新知