核心操作:修改php.ini文件,增加memory_limit参数值(如从32M调整为256M或更高,根据应用需求设置)。
关联配置:若应用涉及文件上传,需同步调整upload_max_filesize(如50M)和post_max_size(如50M),避免上传功能因内存限制失败。
生效步骤:修改完成后,重启Web服务(Apache用systemctl restart httpd,Nginx用systemctl restart nginx)使配置生效。
关键参数调整:
pm.max_children:根据服务器内存计算合理值(公式:(可用内存 - 1G) / 单个PHP进程内存,如16G内存、单个进程约256M,则设置为60),避免进程过多导致内存耗尽。pm模式:优先选择dynamic(动态模式),配合pm.start_servers(启动时的进程数,如10)、pm.min_spare_servers(最小空闲进程,如5)、pm.max_spare_servers(最大空闲进程,如20)使用,动态调整进程数量以节省内存。pm.max_requests:设置每个子进程处理500个请求后重启(如pm.max_requests = 500),防止内存泄漏累积。/etc/php-fpm.d/www.conf(或对应配置文件)后,重启PHP-FPM服务(systemctl restart php-fpm)。作用:OPcache可将PHP脚本编译后的字节码缓存到内存中,避免重复编译,显著减少内存占用并提升执行速度。
配置步骤:
sudo yum install php-opcache(CentOS默认仓库通常包含)。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 # 快速关闭功能
验证步骤:重启PHP服务后,运行php -r 'var_dump(opcache_get_status());',确认opcache状态为enabled。
常见优化手段:
unset()函数释放不再使用的变量或对象(如unset($largeArray))。fetch(PDO::FETCH_ASSOC)逐行读取数据库查询结果,而非fetchAll()。yield关键字处理大型数据集(如遍历百万级数据的函数),减少内存占用。for循环替代递归函数)。推荐工具:Redis、Memcached(均支持CentOS快速安装,如sudo yum install redis)。
作用:缓存数据库查询结果、热门页面片段或计算结果,减少对数据库的频繁访问,从而降低PHP进程的内存消耗。
示例:使用Redis缓存查询结果,下次请求直接从缓存读取,避免重复执行SQL语句。
监控工具:
top、htop(按M键按内存排序进程)。systemctl status php-fpm或访问http://服务器IP/php-fpm/status(需配置pm.status_path)。/var/log/php-fpm/error.log(PHP-FPM错误日志)和/var/log/php_errors.log(PHP错误日志),定位内存泄漏或错误。memory_limit、pm.max_children),定期重启PHP-FPM释放内存(如每天凌晨重启)。若以上软件优化仍无法满足需求,考虑增加服务器内存(如从4G升级至8G或更高),从根本上解决内存不足问题。升级前需评估应用的内存需求,避免过度投入。