php-fpm优化总结
php.ini优化#
//默认情况下服务器对上传文件的大小是有限制的,如果想修改上传文件的限制可以修改php.ini文件
file_uploads = On; //是否允许上传文件
upload_max_filesize = 1024M; //上传文件的最大限制
post_max_size = 1024M; //通过post提交的最多数据
max_execution_time = 300; //脚本最长的执行时间 单位为秒
max_input_time = 30000; //接收提交的数据的时间限制 单位为秒
memory_limit = 256M; //每个脚本使用的最大内存 ;在安全模式下,你不能用ini_set()在运行时改变这个设置。
php-fpm优化#
1.如何启用?
编译安装时加上--enable-fpm
2.如何优化?
优化之前根据业务需求规划,然后必须做压力测试;
优化的主要文件就是php-fpm.conf
(1)进程数设置
pm = dynamic
pm.max_children = 15 //静态方式下开启的php-fpm进程数量
pm.start_servers = 5 //动态方式下的起始php-fpm进程数量
pm.min_spare_servers = 5 //动态方式下 空闲时间最小的php-fpm进程
pm.max_spare_servers = 5 //动态方式下 空闲时间最大的php-fpm进程
(2)最大处理请求数
最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn新的。
该配置可以避免php解释器自身或程序引起的memory leaks。
默认值是500,
pm.max_requests = 1024
这样的规划,1秒钟
最大请求数:15*1024=15360
最小请求数:5*1024=7120
3.如何避免程序hang死?
方法1:设置php-fpm执行的超时时间为固定值
#vi php-fpm.conf
修改为request_terminate_timeout = 60
方法2:定时reload php-fpm
在负载较高的服务器上定时重载php-fpm
reload可以平滑重启而不影响生产系统的php脚本运行
每15分钟reload一次
0-59/15 * * * * /usr/local/php/sbin/php-fpm reload
优化进程池配置#
php-fpm根据配置文件内容和实际情况,动态创建子进程来处理请求。当达到能够创建的最大值时,只能阻塞。一个个地进行执行。
- 进程数优化
pm = dynamic
pm.max_children = 300
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
-
最大请求数优化
pm.max_requests = 10240
提示: 这个用来处理因为PHP解析器或引用的第三方库时,造成的内存泄露问题。
最大请求数:指一个php-fpm的工作进程在处理多少个请求后就终止掉。
-
最长执行时间优化(php.ini)
request_terminate_timeout = 20
提示:这个是用来处理因为PHP执行时间超长而报502错误的解决。
这个时长配置可以在php.ini(max_execution_time)或php-fpm.conf中配置均可,为了不影响全局配置,可在php-fpm.conf中实现
crontab定时任务把php-fpm平滑重启#
这种方式就是使用crontab定时任务去定时查询网站是否502了,如果502了,就把php-fpm平滑重启。
首先在/root/目录下面创建脚本。
vim restart-php-fpm.sh
然后给这个脚本赋予执行权限。
chmod +x /root/restart-php-fpm.sh
然后就是编写脚本内容了,上代码。
#!/bin/bash
MY_URL="http://www.****.com/"
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
if [ -n "$RESULT" ]; then
/etc/init.d/php7.2-fpm restart
fi
注意:我是使用的/etc/init.d/php7.2-fpm restart这种方式重启的
然后编写定时任务
crontab -e
* * * * * /root/restart-php-fpm.sh
用crontab -l查看定时任务列表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?