如何提升Ubuntu环境下PHP脚本执行效率
在Ubuntu系统中,提升PHP脚本执行效率需从编译缓存、进程管理、Web服务器配置、缓存层、代码优化及系统资源等多维度综合优化。以下是具体且可操作的步骤:
OPcache是PHP内置的字节码缓存扩展,可避免每次请求都重新编译脚本,显著降低CPU负载。
sudo apt update && sudo apt install php-opcache
编辑PHP配置文件(/etc/php/{version}/fpm/php.ini
或 /etc/php/{version}/cli/php.ini
),添加/修改以下参数:[opcache]
zend_extension=opcache.so # 启用扩展
opcache.enable=1 # 开启OPcache
opcache.memory_consumption=128 # 分配128MB内存(根据服务器内存调整,建议64-256MB)
opcache.max_accelerated_files=10000 # 缓存最多10000个脚本文件(需大于项目文件总数)
opcache.revalidate_freq=60 # 每60秒检查脚本是否修改(生产环境可设为0,配合opcache.validate_timestamps=0禁用检查)
opcache.fast_shutdown=1 # 快速关闭脚本,释放内存
info.php
文件(<?php phpinfo(); ?>
),访问该文件并搜索“OPcache”,确认配置已加载。PHP-FPM(FastCGI Process Manager)比传统mod_php
更高效,需根据服务器资源调整进程参数。
sudo apt install php-fpm
集成Nginx时,编辑Nginx站点配置(/etc/nginx/sites-available/default
),添加:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{version}-fpm.sock; # 替换为实际PHP版本(如php8.2-fpm.sock)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
/etc/php/{version}/fpm/pool.d/www.conf
):pm = dynamic # 动态进程管理模式(推荐)
pm.max_children = 50 # 最大子进程数(根据服务器内存计算:总内存/单个进程内存,如1GB内存≈50个进程)
pm.start_servers = 5 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数(避免频繁创建进程)
pm.max_spare_servers = 10 # 最大空闲进程数(避免占用过多内存)
pm.max_requests = 500 # 每个子进程处理500个请求后重启(防止内存泄漏)
request_terminate_timeout = 30s # 脚本超时时间(避免长时间运行阻塞进程)
sudo systemctl restart php{version}-fpm && sudo systemctl restart nginx
通过缓存频繁访问的数据(如数据库查询结果、页面片段),降低数据库负载和脚本执行时间。
sudo apt install redis-server php-redis
编辑PHP配置文件(/etc/php/{version}/fpm/php.ini
),添加:[redis]
extension=redis.so
重启PHP-FPM后,在代码中使用Redis缓存:$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'user_data_123';
if ($data = $redis->get($key)) {
// 使用缓存数据
} else {
$data = $db->query("SELECT * FROM users WHERE id = 123"); // 数据库查询
$redis->set($key, $data, 3600); // 缓存1小时
}
sudo apt install memcached php-memcached
/etc/nginx/nginx.conf
:worker_processes auto; # 根据CPU核心数自动设置(如4核则设为4)
events {
worker_connections 1024; # 每个worker的最大连接数
use epoll; # Linux下高性能的事件模型
}
http {
sendfile on; # 启用sendfile减少文件传输开销
keepalive_timeout 65; # 保持连接时间
gzip on; # 启用Gzip压缩(减少传输数据量)
gzip_types text/plain text/css application/json application/javascript;
}
mod_rewrite
、mod_deflate
和mod_expires
模块,调整MPM(多处理模块)配置(如prefork
改为event
)。foreach
代替for
遍历数组(foreach
性能更好),用array_map
代替循环处理数组。SELECT *
(只查询所需字段)。yield
代替数组,减少内存占用(如读取大型CSV文件)。sudo ulimit -n 65535 # 临时生效
永久生效需编辑/etc/security/limits.conf
,添加:* soft nofile 65535
* hard nofile 65535
htop
(查看CPU/内存使用)、vmstat 1
(查看系统负载)、iostat -x 1
(查看磁盘I/O)等工具,定期分析瓶颈。通过以上步骤,可显著提升Ubuntu环境下PHP脚本的执行效率。需根据实际服务器配置(如内存、CPU核心数)和应用场景(如高并发、大数据量)调整参数,避免盲目增大内存或进程数导致资源浪费。