优化Ubuntu下PHP配置以提升网站性能
新版本PHP通常包含性能改进和安全修复,建议通过Ondrej PPA添加最新版本(如PHP 8.2),替换旧版本以获得更好的性能表现。命令示例:
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php8.2 # 替换为所需版本
OPcache可缓存PHP脚本编译后的字节码,避免重复编译,显著提升执行速度。
sudo apt-get install php-opcache
/etc/php/{version}/fpm/php.ini
(如/etc/php/8.2/fpm/php.ini
),添加/修改以下配置:zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 内存分配(MB,根据服务器内存调整)
opcache.max_accelerated_files=4000 # 缓存文件数量(根据项目文件数调整)
opcache.revalidate_freq=60 # 文件修改检查频率(秒)
opcache.fast_shutdown=1 # 加速脚本关闭
sudo systemctl restart php{version}-fpm
PHP-FPM(FastCGI进程管理器)可高效处理PHP请求,需根据服务器资源调整进程参数。编辑/etc/php/{version}/fpm/pool.d/www.conf
:
dynamic
(动态调整进程数),避免static
(固定进程数)浪费内存或ondemand
(延迟启动)增加延迟。pm = dynamic
pm.max_children = 50 # 最大子进程数(根据服务器内存计算:总内存/单个进程内存,如1GB内存≈50个128MB进程)
pm.start_servers = 10 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数(避免请求到来时创建新进程)
pm.max_spare_servers = 20 # 最大空闲进程数(避免过多空闲进程浪费内存)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防止内存泄漏)
sudo systemctl restart php{version}-fpm
优化php.ini
中的基础参数,平衡性能与稳定性:
memory_limit = 128M
(根据应用需求调整,如WordPress建议128-256M)。max_execution_time = 30
(脚本最大执行时间,动态页面可适当延长至60-120秒)。upload_max_filesize = 128M
、post_max_size = 128M
(匹配前端上传限制)。display_errors = Off
、log_errors = On
。sudo apt-get install redis-server
sudo apt-get install php-redis # PHP Redis扩展
配置应用(如WordPress)连接Redis。opcache.file_cache
(将编译后的脚本缓存到磁盘),进一步提升高并发下的性能:opcache.file_cache=/tmp/opcache
opcache.file_cache_only=1
/etc/nginx/sites-available/default
),确保fastcgi_pass
指向PHP-FPM socket:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php{version}-fpm.sock; # 如/var/run/php/php8.2-fpm.sock
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
proxy_fcgi
模块,修改虚拟主机配置:<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php{version}-fpm.sock|fcgi://localhost"
</FilesMatch>
http
块中添加:gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 5;
重启Nginx/Apache使配置生效。id
、title
、created_at
)添加索引,加速查询。SELECT *
(只查询所需字段),使用EXPLAIN
分析慢查询,优化JOIN语句。OPTIMIZE TABLE
整理表碎片,清理无用数据。htop
(实时查看CPU/内存使用)、vmstat
(系统性能分析)、php-fpm status
(查看PHP-FPM进程状态)监控资源使用。slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 10s # 记录执行超过10秒的脚本
分析日志后针对性优化代码或配置。