1. 安装并配置OPcache(关键优化手段)
OPcache是PHP内置的字节码缓存扩展,可避免重复编译脚本,显著提升执行效率。
php-opcache包(适用于多数CentOS PHP版本):sudo yum install php-opcache
/etc/php.ini,添加或修改以下参数(根据服务器内存调整):[opcache]
zend_extension=opcache.so ; 启用扩展
opcache.enable=1 ; 开启OPcache
opcache.enable_cli=1 ; CLI模式下也启用
opcache.memory_consumption=128 ; 共享内存大小(MB),建议128-256MB
opcache.interned_strings_buffer=8 ; 内部字符串缓存大小(MB)
opcache.max_accelerated_files=4000 ; 可缓存的脚本文件数量
opcache.revalidate_freq=60 ; 文件修改检查间隔(秒),生产环境建议60-300秒
opcache.fast_shutdown=1 ; 快速关闭,减少内存释放时间
sudo systemctl restart php-fpm ; 若使用PHP-FPM
# 或 sudo systemctl restart nginx/apache ; 若使用Web服务器
2. 优化PHP-FPM配置(提升进程管理效率)
PHP-FPM是PHP FastCGI进程管理器,合理配置可平衡内存使用与并发处理能力。
/etc/php-fpm.d/www.conf(路径可能因发行版略有差异)。dynamic(动态调整进程数,适合大多数场景):pm = dynamic
pm.max_children = 50 ; 最大子进程数((可用内存-1G)/单个进程内存,如2G内存约分配1G给PHP)
pm.start_servers = 5 ; 启动时的进程数(建议为max_children的1/10)
pm.min_spare_servers = 5 ; 最小空闲进程数(避免频繁创建进程)
pm.max_spare_servers = 35 ; 最大空闲进程数(避免内存浪费)
pm.max_requests = 500 ; 每个子进程处理500个请求后重启
rlimit_files = 10240 ; 提高文件描述符上限
sudo systemctl restart php-fpm
3. 调整PHP配置文件(php.ini)
优化基础配置以适应应用需求,减少不必要的资源消耗。
memory_limit = 256M ; 脚本最大内存(根据应用调整,如大型应用可设为512M)
max_execution_time = 300 ; 脚本最大执行时间(秒,生产环境建议30-300秒)
display_errors = Off
log_errors = On
error_log = /var/log/php-fpm/error.log
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
upload_max_filesize = 50M
post_max_size = 50M
output_buffering = On
implicit_flush = Off
4. 代码级优化(从根源提升性能)
优化代码逻辑可显著减少资源消耗,提升响应速度。
// 示例:使用Redis缓存
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_key');
if (!$data) {
$data = $db->query("SELECT * FROM large_table"); // 数据库查询
$redis->setex('cached_key', 3600, serialize($data)); // 缓存1小时
}
SELECT *(只查询所需字段),使用JOIN替代子查询,避免N+1查询问题。5. 使用高效的Web服务器(提升静态资源处理能力)
Nginx比Apache更适合处理高并发静态请求,建议作为前端服务器。
sudo yum install nginx
/etc/nginx/conf.d/example.conf):server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404; ; 尝试直接访问文件,不存在则返回404
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock; ; 与PHP-FPM通信的socket
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
sudo systemctl restart nginx
6. 启用JIT编译(PHP 8+显著提升性能)
PHP 8及以上版本支持JIT(Just-In-Time)编译,可将部分代码编译为机器码,提升执行速度。
php -v
/etc/php.ini,添加以下配置:[opcache]
opcache.jit_buffer_size=100M ; JIT缓冲区大小(根据内存调整)
opcache.jit=1235 ; 推荐配置(1=启用,2=函数级,3=方法级,5=全局)
sudo systemctl restart php-fpm
7. 监控与调优(持续优化性能)
使用工具监控PHP性能,及时发现瓶颈。
top、htop查看CPU、内存使用情况;vmstat 1查看系统整体性能。www.conf中开启状态页,通过Nginx访问查看进程状态:pm.status_path = /status ; 在www.conf中添加
Nginx配置:location ~ ^/(status|ping)$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
访问http://example.com/status查看状态(需替换为实际域名)。8. 其他优化建议
php.ini中通过disable_functions禁用可能被恶意利用的函数(如exec、passthru):disable_functions = exec,passthru,shell_exec,system
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6; ; 压缩级别(1-9)