1. 更新系统与软件包
首先确保CentOS系统和所有相关软件包为最新版本,以修复已知漏洞并提升兼容性与性能。执行以下命令更新系统:
sudo yum update -y
2. 安装PHP及必要扩展
通过YUM仓库安装PHP核心组件与常用扩展(如MySQL数据库支持、GD图像处理、MBSTRING多字节字符串处理等),确保满足应用基础需求:
sudo yum install -y php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-zip php-opcache
3. 配置PHP-FPM进程管理
PHP-FPM(FastCGI进程管理器)是优化PHP并发处理的关键。编辑/etc/php-fpm.d/www.conf文件,调整以下核心参数:
dynamic(动态调整进程数,适合大多数场景);pm.max_children):根据服务器内存计算(公式:(可用内存 - 1G) / 单个PHP进程内存,如2G内存、单个进程100M,则设置为19);pm.min_spare_servers(最小空闲进程,保持5-10个以应对突发请求)、pm.max_spare_servers(最大空闲进程,避免过多闲置进程占用内存);request_terminate_timeout):设置为30-300秒(根据脚本复杂度调整,防止单个脚本长时间占用进程)。sudo systemctl restart php-fpm
4. 启用并优化OPcache
OPcache通过缓存编译后的PHP脚本,减少重复编译开销,显著提升性能。编辑/etc/php.ini文件,添加或修改以下配置:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # OPcache缓存内存大小(MB,根据服务器内存调整)
opcache.interned_strings_buffer=8 # 内部字符串缓存大小(MB)
opcache.max_accelerated_files=4000 # 最大缓存文件数(根据项目文件数量调整)
opcache.revalidate_freq=60 # 脚本缓存验证频率(秒,0表示每次请求都验证)
opcache.fast_shutdown=1 # 快速关闭,释放内存
重启PHP-FPM使配置生效:
sudo systemctl restart php-fpm
5. 调整PHP基础配置
编辑/etc/php.ini文件,优化以下基础参数:
memory_limit):根据应用需求设置(如小型应用128M,中型应用256M,大型应用512M),避免单个脚本占用过多内存;max_execution_time):设置为30-300秒(根据脚本复杂度调整,如上传大文件或处理大数据时可适当延长);upload_max_filesize、post_max_size):根据应用需求设置(如允许上传10MB文件,则两者均设置为10M);display_errors、log_errors):生产环境关闭display_errors(避免泄露敏感信息),开启log_errors并将错误日志记录到指定文件(如/var/log/php_errors.log)。6. 优化Web服务器配置
根据使用的Web服务器(Nginx/Apache)调整配置,确保与PHP-FPM高效集成:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php-fpm/www.sock; # 或127.0.0.1:9000(TCP端口)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
开启Gzip压缩以减少传输体积:gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
mod_proxy_fcgi模块,在虚拟主机配置中添加PHP处理指令:<FilesMatch \.php$>
SetHandler "proxy:fcgi://unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
开启KeepAlive以复用TCP连接:KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
7. 使用持久连接减少数据库开销
对于数据库操作,使用持久连接(Persistent Connection)避免频繁建立和关闭连接的开销。以PDO为例:
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$username = 'username';
$password = 'password';
$options = [
PDO::ATTR_PERSISTENT => true, // 开启持久连接
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
8. 监控与持续优化
使用工具监控PHP运行状态,及时发现性能瓶颈:
top、htop、vmstat命令查看CPU、内存、磁盘I/O使用情况;php-fpm status命令查看进程数、请求处理时间等指标(需在www.conf中开启pm.status_path = /status);/var/log/php_errors.log)和Web服务器日志,分析慢请求(可使用awk、grep等工具提取耗时较长的请求)。根据监控结果调整配置(如增加pm.max_children应对高并发,优化慢查询减少数据库负载),持续提升PHP运行环境性能。