Debian下PHP配置怎样优化
小樊
44
2025-12-11 01:09:13
Debian 下 PHP 配置优化实操指南
一 基线准备与组件安装
- 保持系统与软件为最新,及时获取性能改进与安全补丁:执行 sudo apt update && sudo apt upgrade。
- 安装所需组件:
- Apache + mod_php:sudo apt install apache2 libapache2-mod-php php php-mysql
- Nginx + PHP-FPM:sudo apt install nginx php-fpm php-mysql
- 启用常用模块与站点配置,完成后重启服务使配置生效。以上步骤为后续优化的基础环境。
二 PHP 运行时核心参数优化
- 编辑对应 SAPI 的 php.ini(如 /etc/php/8.x/fpm/php.ini 或 /etc/php/8.x/apache2/php.ini),按应用与内存情况调整:
- 内存与执行:memory_limit = 256M(依据业务上调)、max_execution_time = 30(长任务可适度放宽)
- 上传与请求:upload_max_filesize = 64M、post_max_size = 64M
- 错误显示与日志:display_errors = Off、log_errors = On(便于排障而不暴露信息)
- 启用并调优 OPcache(强烈建议):
- 安装:sudo apt install php-opcache
- 配置示例:
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
- 修改后重启 PHP-FPM 或 Apache 以生效。
三 PHP-FPM 进程与请求优化
- 编辑 /etc/php/8.x/fpm/pool.d/www.conf:
- 进程管理:建议 pm = dynamic;按内存与单进程占用计算 pm.max_children(见下方估算方法)
- 进程数量:pm.start_servers = 5、pm.min_spare_servers = 5、pm.max_spare_servers = 35
- 稳定性:pm.max_requests = 500(周期性回收,缓解内存泄漏)
- 超时控制:request_terminate_timeout = 30s(防止长请求拖垮)
- 排障:开启 slowlog = /var/log/php-fpm/slow.log 与 request_slowlog_timeout = 10s
- 监听与权限:优先使用 Unix Socket(如 /run/php/php8.x-fpm.sock),并设置 listen.owner / listen.group = www-data 与 user / group = www-data,减少网络栈开销并提升安全性。
四 Web 服务器与静态资源优化
- Nginx:
- 进程与连接:worker_processes = auto;worker_rlimit_nofile 65535
- 传输与协议:启用 sendfile on;按需开启 gzip;调优 keepalive_timeout 与 keepalive_requests;必要时调整 fastcgi_read_timeout
- 静态资源缓存:对图片、CSS、JS 设置过期与缓存控制,减轻后端压力
- Apache:
- 启用 KeepAlive On、设置 MaxKeepAliveRequests 100、KeepAliveTimeout 5
- 启用压缩(如 mod_deflate)与缓存模块(如 mod_cache、mod_expires)
- 反向代理与 FastCGI:
- Nginx 示例:
- location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.x-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
- Apache 示例:
- <FilesMatch .php$> SetHandler “proxy:unix:/run/php/php8.x-fpm.sock|fcgi://localhost”
五 数据库缓存与监控及容量规划
- 数据库与缓存:
- 为 MySQL/MariaDB 调整缓冲与连接(如 innodb_buffer_pool_size,常见建议为系统内存的较高比例,视负载而定)
- 引入 Redis/Memcached 做数据/页面缓存,减少数据库压力与往返
- 监控与日志:
- 利用 php-fpm status 页面、top/htop、以及 Nginx/ PHP-FPM 日志 做容量与瓶颈分析
- 慢请求与异常及时告警与回溯
- 容量估算方法(示例思路):
- 估算单进程内存:RES(常驻内存)≈ 应用常驻 + 扩展开销(如 OPcache、数据库驱动等)
- 近似上限:max_children ≤ 可用内存 / 单进程RES;务必预留系统与其他服务内存,避免 OOM
- 代码层优化(配合配置优化):
- 减少 N+1 查询、合理使用缓存、合并与压缩静态资源、接入 CDN
- 使用 Xdebug/Blackfire 定位慢点与内存热点,针对性优化