优化Ubuntu上的PHP设置:从版本选择到性能调优
在Ubuntu上优化PHP运行环境,需围绕版本升级、进程管理、缓存加速、Web服务器集成、资源限制及监控六大核心方向展开,以下是具体步骤:
优先使用最新的稳定版本(如PHP 8.1/8.2),新版本通常包含性能改进(如JIT编译器)、安全修复及对新特性的支持。可通过以下命令添加Ondřej Surý的PPA(个人包档案)并安装最新版:
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.1 php8.1-fpm php8.1-opcache # 根据需求选择扩展
安装完成后,用php -v
确认版本是否正确。
PHP-FPM(FastCGI Process Manager)是处理PHP请求的高效方式,需调整其进程池参数以匹配服务器资源(以/etc/php/8.1/fpm/pool.d/www.conf
为例):
dynamic
(动态调整进程数,适合大多数场景);pm.max_children
:最大子进程数(建议值为服务器内存(MB)/单个进程内存(MB)
,如1GB内存、100MB/进程则设为10);pm.start_servers
:启动时的进程数(设为max_children
的1/4~1/2,如10);pm.min_spare_servers
/pm.max_spare_servers
:空闲进程的最小/最大数量(保持2~5的空闲进程,避免频繁创建/销毁);pm.max_requests
:每个子进程处理的最大请求数(如500,防止内存泄漏);request_terminate_timeout
:脚本最大执行时间(如30s,避免长时间占用资源)。sudo systemctl restart php8.1-fpm
。OPcache是PHP代码缓存扩展,能显著减少脚本编译时间(提升20%~50%性能)。安装并配置:
sudo apt install php-opcache # 大多数PHP版本已内置
编辑php.ini
(路径可通过php --ini
查看),添加/修改以下参数:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB,根据服务器调整)
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小
opcache.max_accelerated_files=4000 # 缓存文件数量(建议为项目文件总数的1.5倍)
opcache.revalidate_freq=60 # 文件检查频率(秒,生产环境可设为0禁用检查)
opcache.fast_shutdown=1 # 快速关闭,减少内存释放时间
重启PHP-FPM使配置生效。
修改php.ini
(或对应版本的fpm/php.ini
/cli/php.ini
),优化以下关键参数:
memory_limit=128M
(根据应用需求调整,如WordPress建议128M~256M);max_execution_time=30
(脚本最大执行时间,上传大文件时可临时调高);upload_max_filesize=2M
、post_max_size=8M
(上传文件大小限制,需大于upload_max_filesize
);max_input_vars=3000
(避免大量POST数据导致内存溢出)。编辑站点配置文件(/etc/nginx/sites-available/default
),添加PHP处理块:
location ~ \.php$ {
include snippets/fastcgi-php.conf; # 包含FastCGI参数
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # PHP-FPM监听地址
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 脚本路径
include fastcgi_params; # 基础FastCGI参数
}
重启Nginx:sudo systemctl restart nginx
。
启用proxy_fcgi
和setenvif
模块,编辑虚拟主机配置(/etc/apache2/sites-available/000-default.conf
):
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>
重启Apache:sudo systemctl restart apache2
。
安装Redis或Memcached作为缓存层,缓存数据库查询结果、会话数据等:
sudo apt install redis-server php-redis # Redis
# 或
sudo apt install memcached php-memcached # Memcached
在PHP代码中使用缓存(如Redis示例):
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cached_data = $redis->get('key');
if (!$cached_data) {
$cached_data = // 从数据库获取数据
$redis->set('key', $cached_data, 3600); // 缓存1小时
}
缓存能显著减少数据库查询次数,提升响应速度。
htop
(查看CPU/内存使用率)、vmstat 1
(查看系统资源)监控服务器状态;slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 10s # 记录执行超过10秒的脚本
重启PHP-FPM后,通过tail -f /var/log/php-fpm/www-slow.log
查看慢脚本;php.ini
,注释掉未使用的扩展(如;extension=gd
),减少内存占用;mysqli.allow_persistent=1
),减少连接开销;ulimit -n 65535
)、优化内核参数(net.core.somaxconn=65535
),提升I/O性能;通过以上步骤,可显著提升Ubuntu上PHP应用的性能、稳定性和可扩展性。需根据实际应用场景(如WordPress、Laravel等)调整参数,避免盲目照搬。