centos php配置如何优化
小樊
32
2025-12-29 03:49:22
CentOS 下 PHP 配置优化实操指南
一 基线准备与模块安装
- 更新系统与仓库,启用 EPEL 与 Remi(按需选择 PHP 版本,如 PHP 7.4):
- sudo yum update -y
- sudo yum install -y epel-release
- sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
- sudo yum-config-manager --enable remi-php74
- 安装常用模块(按应用增减):
- sudo yum install -y php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-bcmath php-zip php-curl
- 确认配置文件路径与生效项:
- php -i | grep “Loaded Configuration File”
- 重启服务:sudo systemctl restart php-fpm
二 PHP-FPM 进程与资源调优
- 进程管理模式选择(/etc/php-fpm.d/www.conf):
- static:固定进程数,适合高稳定高并发;dynamic:按需伸缩,适合波动流量;ondemand:请求到来才创建,适合低流量/节省内存。
- 关键参数建议(示例为 dynamic,按内存与负载计算后再上线):
- pm = dynamic
- pm.max_children = 50(上限,见下方“计算方法”)
- pm.start_servers = 5
- pm.min_spare_servers = 5
- pm.max_spare_servers = 35
- pm.max_requests = 500(防内存泄漏,周期性重启子进程)
- request_terminate_timeout = 120(请求最大执行时间,视业务而定)
- 监听与权限:listen = /run/php-fpm/www.sock;listen.owner = nginx;listen.group = nginx;listen.mode = 0660
- 计算 max_children 的简易方法:
- 公式:max_children ≈ (可用内存MB − 1GB) / 单进程内存占用MB
- 例:可用 4GB 内存、单进程约 128MB ⇒ 约 24 个进程(适当留余量,结合压测微调)
三 php.ini 性能与安全关键项
- 基础与执行:
- memory_limit = 256M(按应用调大/调小)
- max_execution_time = 300(长任务可适度放宽)
- max_input_time = 60
- 文件上传:
- upload_max_filesize = 50M
- post_max_size = 50M
- 字节码缓存 OPcache(强烈建议启用):
- [opcache]
- opcache.enable = 1
- opcache.memory_consumption = 128
- opcache.interned_strings_buffer = 8
- opcache.max_accelerated_files = 10000
- opcache.revalidate_freq = 60
- opcache.fast_shutdown = 1
- 错误与日志(生产环境):
- display_errors = Off
- log_errors = On
- error_log = /var/log/php_errors.log
- 时区:
- date.timezone = Asia/Shanghai
- 安全加固(按需):
- expose_php = Off
- disable_functions = exec,passthru,shell_exec,system(禁用危险函数)
- open_basedir = /var/www/html:/tmp(限制脚本访问目录)
四 Web 服务器与缓存协同优化
- Nginx 与 PHP-FPM 联动示例:
- location ~ .php$ {
- include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_pass unix:/run/php-fpm/www.sock;
- }
- 重启:sudo systemctl restart nginx
- Apache 与 PHP-FPM(mod_proxy_fcgi):
- <FilesMatch .php$>
- SetHandler “proxy:fcgi://unix:/run/php-fpm/www.sock|fcgi://localhost”
-
- 重启:sudo systemctl restart httpd
- 数据层缓存:
- 安装并启用 Redis/Memcached 及对应 PHP 扩展(php-pecl-redis / php-pecl-memcached),在应用层使用缓存减轻数据库压力
五 验证 监控 与迭代
- 配置生效与连通性验证:
- 创建 /var/www/html/info.php:
- 访问 http://服务器IP/info.php 检查 Loaded Configuration File、OPcache 等是否生效
- 资源与日志监控:
- 系统资源:top/htop、iostat、vmstat
- PHP-FPM:启用 slowlog 与 request_slowlog_timeout = 10s,分析慢请求
- 应用性能:New Relic、XHProf 等定位瓶颈
- 变更流程与回滚:
- 任何参数调整前先备份配置;先在测试环境压测与灰度;观察 502/504、慢日志、OOM 等指标,按结果迭代微调