在Ubuntu上提升PHP执行效率的关键方法
OPcache是PHP内置的字节码缓存扩展,可显著减少脚本编译时间,提升执行效率。
php-opcache
(根据PHP版本调整,如php8.2-opcache
)。sudo apt update && sudo apt install php-opcache
php.ini
(路径通常为/etc/php/{version}/fpm/php.ini
或/etc/php/{version}/cli/php.ini
),启用并优化参数:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1 # CLI模式下也启用
opcache.memory_consumption=128 # 分配给OPcache的内存(MB),根据服务器内存调整
opcache.max_accelerated_files=10000 # 缓存的最大脚本文件数
opcache.revalidate_freq=60 # 脚本修改后重新验证的间隔(秒)
opcache.fast_shutdown=1 # 快速关闭机制,减少内存释放时间
sudo systemctl restart php{version}-fpm # 如php8.2-fpm
PHP-FPM(FastCGI Process Manager)比mod_php
更高效,尤其适合高并发场景,能更好地管理进程和内存。
sudo apt install php-fpm
/etc/php/{version}/fpm/pool.d/www.conf
,调整进程管理参数:pm = dynamic # 动态调整进程数(适合大多数场景)
pm.max_children = 50 # 最大子进程数(根据服务器内存计算:总内存/单个进程内存)
pm.start_servers = 5 # 启动时的进程数(建议为max_children的1/10)
pm.min_spare_servers = 5 # 最小空闲进程数(避免频繁创建进程)
pm.max_spare_servers = 10 # 最大空闲进程数(避免内存浪费)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防止内存泄漏)
sudo systemctl restart php{version}-fpm
新版本PHP通常包含性能改进、安全修复和优化特性(如JIT编译器)。
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-opcache php8.2-mysql
sudo update-alternatives --config php # 选择默认PHP版本
根据服务器负载选择合适的进程管理模式,平衡性能与资源占用:
pm.max_children
设置为固定值,无进程创建/销毁开销。pm.start_servers
、pm.min_spare_servers
、pm.max_spare_servers
自动调整进程数。通过缓存频繁访问的数据,减少数据库查询次数,提升响应速度:
sudo apt install redis-server
sudo apt install php-redis # PHP Redis扩展
在PHP代码中使用Redis缓存:$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_data');
if (!$data) {
$data = fetchDataFromDatabase(); // 从数据库获取数据
$redis->set('cached_data', $data, 3600); // 缓存1小时
}
编写高效的PHP代码,减少不必要的资源消耗:
unset()
释放不再需要的变量,避免内存泄漏。yield
或array_chunk()
处理大型数组,避免一次性加载到内存。优化系统内核参数,提升PHP处理高并发的能力:
/etc/security/limits.conf
,添加:* soft nofile 65535
* hard nofile 65535
编辑/etc/systemd/system.conf
,设置:DefaultLimitNOFILE=65535
重启系统使生效。/etc/sysctl.conf
,添加:net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
应用配置:sudo sysctl -p
使用工具监控PHP性能,定位瓶颈并针对性优化:
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s # 超过5秒的脚本记录到慢日志
分析慢日志:grep 'slowlog' /var/log/php-fpm/slow.log
htop
、top
监控CPU、内存使用情况,vmstat
监控系统负载。