0

现在的服务器是 2核4GB
swoole构造的服务端。拥有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设置进程的最大任务数是什么意思?超过数值自动退出之后会开个新的进程继续运行吗?。 之前的连接是否都会断开。

1 个回答
2

已采纳

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

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

是的

当 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 进程处理情况,根据情况再上下调整

撰写答案

你可能感兴趣的

推广链接