温馨提示×

Ubuntu中php-fpm进程管理方法

小樊
45
2025-11-26 19:59:38
栏目: 编程语言

Ubuntu 中 PHP-FPM 进程管理方法

一 服务生命周期管理

  • 查看服务状态(先确认服务名与版本)
    • 列出可用服务:ls /lib/systemd/system/php*-fpm.service
    • 查看状态:sudo systemctl status php**{version}**-fpm
  • 启动、停止、重启、热重载
    • 启动:sudo systemctl start php**{version}**-fpm
    • 停止:sudo systemctl stop php**{version}**-fpm
    • 重启:sudo systemctl restart php**{version}**-fpm
    • 热重载(不中断现有连接,推荐用于应用配置变更):sudo systemctl reload php**{version}**-fpm
    • 开机自启:sudo systemctl enable php**{version}**-fpm
  • 兼容旧版 SysV 的写法(如系统仍保留 service 脚本)
    • 重启:sudo service php**{version}**-fpm restart
    • 热重载:sudo service php**{version}**-fpm reload
  • 版本号确认
    • 查看已安装版本:php -v
    • 查找服务单元:ls /lib/systemd/system/php*-fpm.service 说明:Ubuntu 16.04+ 默认使用 systemd;服务名通常为 php7.x-fpmphp8.x-fpm。热重载通过发送 USR2 信号实现,适合不中断业务的应用发布场景。

二 配置文件与进程模型

  • 主要配置路径
    • 池配置:/etc/php/{version}/fpm/pool.d/www.conf
    • 全局配置:/etc/php/{version}/fpm/php-fpm.conf
    • PHP 运行时配置:/etc/php/{version}/fpm/php.ini
  • 进程管理策略(pm)
    • static:固定进程数,适合资源可控、负载稳定的场景
    • dynamic:按需伸缩,常用且资源友好
    • ondemand:按需启动,适合低并发或突发流量
  • 常用进程参数(示例为 dynamic)
    • pm.max_children:最大子进程数
    • pm.start_servers:启动时进程数
    • pm.min_spare_servers:最小空闲进程数
    • pm.max_spare_servers:最大空闲进程数
    • pm.max_requests:每个子进程处理一定请求后自动重启,缓解内存泄漏
  • 请求与日志
    • request_terminate_timeout:请求最大执行时间
    • slowlog_timeout:慢请求阈值
    • 建议开启慢日志与错误日志,便于定位性能与异常 修改配置后,使用 sudo systemctl reload php**{version}**-fpm 使配置生效(生产环境优先热重载)。

三 与 Web 服务器集成

  • Nginx 示例(Unix 套接字)
    • fastcgi_pass unix:/run/php/php**{version}**-fpm.sock;
    • 确保 Nginx 与 PHP-FPM 使用一致的套接字路径与权限
  • Apache 示例(mod_proxy_fcgi)
    • SetHandler “proxy:unix:/run/php/php**{version}**-fpm.sock|fcgi://localhost”
  • 变更 Web 服务器或 FPM 监听方式后,需重启对应服务
    • sudo systemctl restart nginx 或 sudo systemctl restart apache2
    • 必要时重载 FPM:sudo systemctl reload php**{version}**-fpm 以上为常见且安全的集成方式,Unix 套接字通常性能更佳。

四 监控与运维

  • 内置状态页(需配置访问控制)
    • 在 Nginx 中增加 location /phpfpm_status,fastcgi_pass 指向 FPM 监听地址(如 127.0.0.1:9000/run/php/php{version}-fpm.sock
    • 访问该页面可查看 active processes、idle processes、accepted conn 等关键指标
  • 日志与排查
    • FPM 错误日志:/var/log/php**{version}**-fpm.log(或按 pool 配置)
    • 动态查看:sudo tail -f /var/log/php**{version}**-fpm.log
    • PHP 错误日志:由 php.ini 的 error_log 指定
  • 运行时观察
    • 系统资源:top/htop、ps
    • 连接与进程:ss -lntp | grep php;ps aux | grep php-fpm 通过状态页与日志结合监控,可快速定位 502/504、慢请求与进程耗尽等问题。

五 常见问题与快速排障

  • 找不到服务名
    • 执行:ls /lib/systemd/system/php*-fpm.service 与 php -v 确认实际安装版本与服务名
  • 修改配置不生效
    • 确认修改了正确的 {version}pool.d/www.conf
    • 使用:sudo systemctl reload php**{version}**-fpm(生产优先)或 restart
  • 权限或 502 错误
    • 核对 Nginx 与 FPM 的 套接字路径与权限(如 www-data 用户组)
    • 检查 FPM 错误日志与 Nginx 错误日志的报错行号
  • 进程耗尽或高负载
    • 调整 pm、pm.max_children、pm.start_servers、pm.min/max_spare_servers
    • 开启 slowlog,分析长耗时脚本
  • 平滑升级与回滚
    • 先备份配置与日志
    • 使用 reload 进行滚动生效;必要时快速回滚配置并 restart 以上步骤覆盖了服务识别、配置生效、权限校验与性能瓶颈定位的高频场景。

0