扫码关注官方订阅号
在做一些数据量可控的后台服务时,偶尔会出现501 504等服务端进程跑死或者数据库执行超过默认120s的情况,有一种解决建议是 设置
ini_set('max_execution_time', '0');
这种写法类似于独占服务器资源,有一定隐患,有使用经验的出来讨论下。
人生最曼妙的风景,竟是内心的淡定与从容!
不知道你是怎么跑这块PHP的,需求是什么?是否实时?是否可异步?
PHP
如果不要求实时的话
简单处理的话,使用redis队列,把msg_data和msg_type,写入队列。服务器写一个7*24的服务,检测redis队列,处理并返回。
redis
msg_data
msg_type
7*24
这个服务一般用go不用php写(相比较于go,php的内存管理和设计初衷都不是为了跑这种长期执行的task)
go
php
task
另外因为使用了redis队列,开启适当的线程数(一次最多并发几条msg),可以防止服务器资源的过度占用,或者某时段并发太多导致崩溃。
msg
如果要求实时调用的话
这个我的话没什么经验:一般也就能多使用缓存,优化逻辑,减少资源占用...
改成离线计算==,一般不允许出现这么大的延时吧
嗯 这种肯定不是在线的。我这种情况是指后台空闲服务的场景,比如凌晨计算等
set_time_limit(0)设置程序结束时间,值为0表示永不超时
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
不知道你是怎么跑这块
PHP的,需求是什么?是否实时?是否可异步?简单处理的话,使用
redis队列,把msg_data和msg_type,写入队列。服务器写一个7*24的服务,检测redis队列,处理并返回。这个服务一般用
go不用php写(相比较于go,php的内存管理和设计初衷都不是为了跑这种长期执行的task)另外因为使用了
redis队列,开启适当的线程数(一次最多并发几条msg),可以防止服务器资源的过度占用,或者某时段并发太多导致崩溃。这个我的话没什么经验:
一般也就能多使用缓存,优化逻辑,减少资源占用...
改成离线计算==,一般不允许出现这么大的延时吧
嗯 这种肯定不是在线的。我这种情况是指后台空闲服务的场景,比如凌晨计算等
set_time_limit(0)设置程序结束时间,值为0表示永不超时