针对CentOS环境下PHP脚本执行慢的问题,需从代码层、配置层、缓存层、服务器架构多维度排查优化,以下是具体步骤:
require/include替代require_once/include_once(后者每次调用都会检查文件是否存在,增加开销)。/etc/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 # 最大加速文件数(需覆盖项目文件数量)
opcache.revalidate_freq=60 # 文件修改检查频率(秒)
opcache.fast_shutdown=1 # 快速关闭机制,减少内存释放时间
memory_limit(如256M)和max_execution_time(如300),避免脚本因资源不足中断。exec、shell_exec等函数,可在php.ini中禁用以提升安全性:disable_functions = exec,passthru,shell_exec,system
dynamic模式(动态调整进程数),设置合理的进程池参数:pm = dynamic
pm.max_children = 50 # 最大子进程数(=(可用内存-1G)/单个进程内存,如2G内存可设为50)
pm.start_servers = 5 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 35 # 最大空闲进程数
pm.max_requests = 500 # 每个子进程处理500个请求后重启(防止内存泄漏)
rlimit_files(如10240),避免高并发时文件句柄耗尽。worker_processes(设为CPU核心数)、worker_connections(设为1024以上),并启用gzip压缩减少传输体积:worker_processes auto;
events {
worker_connections 1024;
use epoll; # 高并发事件模型
}
gzip on;
gzip_types text/plain text/css application/json application/javascript;
mod_deflate(压缩)、mod_expires(缓存静态资源),并使用event MPM替代prefork(提升并发性能)。query_cache_type=1),或使用Redis/Memcached缓存频繁访问的查询结果(如商品详情、用户会话)。opcache.huge_code_pages=1(需系统开启HugePages),进一步提升字节码缓存效率:sudo sysctl -w vm.nr_hugepages=512 # 分配512个HugePages(每页2MB,共1GB)
echo "vm.nr_hugepages=512" >> /etc/sysctl.conf # 永久生效
WHERE、JOIN、ORDER BY)添加索引,避免全表扫描。EXPLAIN分析慢查询,避免SELECT *(只查询所需字段),减少子查询和临时表的使用。OPTIMIZE TABLE整理表碎片,清理无用数据(如过期的日志表)。xhprof_enable()开启分析,KCacheGrind查看结果)。top/htop监控CPU/内存使用率,vmstat监控IO等待时间,netstat监控网络连接状态,及时发现资源瓶颈。通过以上步骤逐步排查优化,可显著提升CentOS上PHP脚本的执行速度。需根据实际业务场景(如高并发、大数据量)调整参数,优先解决最明显的瓶颈(如慢查询、内存不足)。