1. 启用并配置OPcache(关键优化)
OPcache是PHP内置的字节码缓存扩展,可避免重复编译脚本,显著提升执行效率。
sudo yum install php-opcache安装(CentOS默认仓库通常包含)。/etc/php.ini,添加/修改以下参数:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0 # 生产环境建议关闭CLI模式的OPcache
opcache.memory_consumption=128 # 共享内存大小(MB),根据服务器内存调整
opcache.interned_strings_buffer=8 # 内部字符串缓存大小
opcache.max_accelerated_files=4000 # 最大加速文件数(需覆盖项目文件数量)
opcache.revalidate_freq=60 # 文件修改检查频率(秒)
opcache.fast_shutdown=1 # 快速关闭,减少内存释放时间
opcache.huge_code_pages=1 # 启用HugePages支持(需系统配置)
sudo systemctl restart php-fpm(或Apache/Nginx)使配置生效。2. 优化PHP-FPM配置
PHP-FPM(FastCGI进程管理器)的进程池设置直接影响并发处理能力。
/etc/php-fpm.d/www.conf(CentOS默认路径)。pm = dynamic # 动态进程管理模式(推荐)
pm.max_children = 50 # 最大子进程数(=(可用内存-1G)/单个进程内存,如1GB内存可设30-40)
pm.start_servers = 5 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲子进程数(避免频繁创建)
pm.max_spare_servers = 35 # 最大空闲子进程数(避免资源浪费)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防止内存泄漏)
request_terminate_timeout = 120 # 脚本超时时间(秒,根据业务调整)
rlimit_files = 10240 # 增加文件描述符限制(应对高并发)
sudo systemctl restart php-fpm应用更改。3. 升级到最新稳定版PHP
新版本PHP通常包含性能改进和新特性(如PHP 8+的JIT编译)。
sudo yum install epel-release yum-utils
sudo yum-config-manager --add-repo https://rpms.remirepo.net/enterprise/remi-release-8.rpm # CentOS 8
sudo yum-config-manager --enable remi-php84 # 启用PHP 8.4仓库(根据需求选择版本)
sudo yum install php php-fpm php-mysqlnd php-gd php-mbstring # 安装最新版PHP及扩展
php -v确认升级成功。4. 代码级优化
从代码层面减少资源消耗,提升执行效率。
SELECT *,使用预处理语句防止SQL注入。php.ini中设置disable_functions,关闭可能被恶意利用的函数(如exec, shell_exec),但需保留业务必需的函数(如shell_exec用于系统状态检测)。5. 配置Web服务器(Nginx/Apache)
优化Web服务器与PHP-FPM的集成,提升请求处理效率。
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock; # 与PHP-FPM的sock文件一致
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffers 16 16k; # 缓冲区大小
fastcgi_buffer_size 32k; # 缓冲区大小
fastcgi_read_timeout 300; # 读取超时时间
}
}
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://unix:/run/php-fpm/www.sock"
</FilesMatch>
</VirtualHost>
gzip on;)。6. 使用缓存系统(Redis/Memcached)
缓存频繁访问的数据,减少数据库和PHP的计算压力。
sudo yum install redis,启动服务sudo systemctl start redis。php-redis扩展(sudo yum install php-redis),在代码中使用Redis类缓存数据。$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_data');
if (!$data) {
$data = // 从数据库获取数据
$redis->set('cached_data', $data, 3600); // 缓存1小时
}
echo $data;
7. 监控与持续调优
通过工具监控性能瓶颈,针对性调整配置。
top(查看CPU/内存占用)、htop(更直观的资源监控)、vmstat(系统整体性能)查看资源使用情况。php-fpm status(需开启pm.status_path)查看进程池状态,调整pm.max_children等参数。