生产环境的php-fpm配置优化

关于php-fpm的配置优化主要优化一下三个方向:
1、慢日志记录
slowlog = log/$pool.log.slow
request_slowlog_timeout = 5

slowlog设置慢日志路径,request_slowlog_timeout设置满足慢日志记录的请求最大超时时间

2、运行模式
  • pm = static:始终保持一个固定数量的子进程,通过pm.max_children定义数量
    pm = static
    pm.max_children = 30
    
    适用高并发场景,因为设置的为静态数量,避免了突发流量导致php-fpm启动新的进程造成的服务器资源消耗,缺点是不够灵活,流量高峰过去后始终运行所有的php-fpm进程,会出现大量空闲进程。服务器内存占用始终很高。
  • pm = dynamic:动态的,通过以下参数来控制php-fpm的数量
    # php-fpm运行的最大的进程数量
    pm.max_children=50
    # php-fpm启动时的进程数量
    pm.start_servers=10
    #“闲置”状态的最少数量(等待处理)。如果“空闲”进程的数量小于此数字,则将创建某些子项。
    pm.min_spare_servers=10
    # “空闲”状态的最大子进程数量(等待处理)。如果“空闲”流程的数量大于此数字,那么有些孩子会被杀死
    pm.max_spare_servers=30
    
    常用的方式,减少服务器空闲时间负载,同时又能动态新增、关闭进程。
  • pm = ondemand:在启动时不创建子进程。当新请求连接时,将会fork一个新的子进程。使用如下参数:
    # php-fpm运行的最大的进程数量
    pm.max_children=50
    # 空闲进程被终止的秒数,空闲超出设置的数字,进程将被kill
    pm.process_idle_timeout
    
    这种模式把内存放在第一位,他的工作模式很简单,每个闲置进程,在持续闲置了pm.process_idle_timeout秒后就会被杀掉,有了这个模式,到了服务器低峰期内存自然会降下来,如果服务器长时间没有请求,就只会有一个php-fpm主进程,当然弊端是,遇到高峰期或者如果pm.process_idle_timeout的值太短的话,无法避免服务器频繁创建进程的问题,因此pm = dynamic和pm = ondemand谁更适合视实际情况而定。
3、错误处理
  • 内存泄露: 由于第三方库等原因可能会导致内存泄露,因此可通过设置pm.max_requests来控制进程重启

    # 当work进程处理的请求数量大于50时就会重启work进程
    pm.max_requests = 50
    
  • 执行超时

    # php-fpm request_terminate_timeout设置0可能会导致请求超时,如果需要请求远程资源,但是由于网络波动,下载速度变慢,会导致始终得不到响应而超时。因此需要设置合理的超时时间。
    request_terminate_timeout = 5
    # 在php.ini 配置中可以设置 PHP 脚本的最大执行时间
    max_execution_time 
    
  • 开启错误日志

    error_log = log/php-fpm.log
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值