为了账号安全,请及时绑定邮箱和手机立即绑定

swoole的task配置该如何配置

swoole的task配置该如何配置

PHP
holdtom 2019-03-03 12:51:56
现在的服务器是 2核4GBswoole构造的服务端。拥有600个客户端(会持续增加)每分钟客户端会往服务端发送一个心跳,所以理论上是一次性会接收到600个心跳,然后扔往task进行逻辑处理。我一个进程的耗时大概是 200ms文档:默认设置为SWOOLE_CPU_NUM,最大不得超过SWOOLE_CPU_NUM * 1000 比如1个请求耗时100ms,要提供1000QPS的处理能力,那必须配置100个进程或更多。但开的进程越多,占用的内存就会大大增加,而且进程间切换的开销就会越来越大。所以这里适当即可。不要配置过大。 假设每个进程占用40M内存,100个进程就需要占用4G内存 task操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。worker进程将无法接收新的请求那个我最大是可以设置 task_worker_num=>4000?。 1.什么情况下算投递容量超过处理能力,是指第二次心跳上来之前第一次600条心跳还没处理完吗?2.task_max_request 和max_request设置进程的最大任务数是什么意思?超过数值自动退出之后会开个新的进程继续运行吗?。 之前的连接是否都会断开。
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

理论上可以最大可以设 task_worker_num=2000,但是这样做不切实际,因为内存,CUP 能资源不是无限的。2核4GB主机,假设可用内存为 3G,每个进程占用 30M 内存,那么理论可以开的进程为 3000/30=100 个。

1 什么情况下算投递容量超过处理能力,是指第二次心跳上来之前第一次600条心跳还没处理完吗?

是的



查看完整回答
反对 回复 2019-03-03
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

当 task 投递速度超过处理速度时。根据你的假设,一个进程的耗时大概是 200ms,那么一个进程每分钟可以处理 60000/200=300 个心跳,也就是说,只有一个进程的情况下,task 投递速度超过 300/分钟 就算超过处理能力,2个进程时同理

2 task_max_request 和 max_request 设置进程的最大任务数是什么意思?

  • task_max_request 一个 task 进程在处理完超过此数值的任务后将自动退出,然后启动一个新的 task 进程继续处理

  • max_request worker 进程的最大任务数,默认为0,一个 worker 进程在处理完超过此数值的任务后将自动退出

上述参数区别在于 task 进程和 worker 进程。超过数值后,只有在处理完毕后才会退出。

对于题主这种情况,可以先开 4-6 个 task 进程,然后监控 task 进程处理情况,根据情况再上下调整


查看完整回答
反对 回复 2019-03-03
  • 2 回答
  • 0 关注
  • 1102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信