使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。实际上我利用此工具做与微信的及时响应和交互非常的方便。但是随着时间越久追加的东西越多。有些问题也暴露了。某一天,我加了个业务代码进去,重启之后发现报警告:swArray_fetch_fetch index[1109] out of array 类似于这样的语句。而且每几秒钟一次。由于我这个swoole 担负及其重要的作用,因此即使不是致命的问题也需要调查清楚,我显示恢复修改之前的代码,问题依然存在。说明不是代码问题,然后百度之后发现可能一次开启的task数量太多了,于是我调低了一点,果然成功。
$server->set ( array (
'worker_num' => 8,//8
'buffer_output_size' => 2 * 1024 * 1024,
'task_worker_num' => 100,//单个task的处理耗时,如100ms,那一个进程1秒就可以处理1/0.1=10个task
// 'max_request' =>1000,
) );
task_worker_num 设置过高就可能导致,报警报。
计算方法
- 单个task的处理耗时,如
100ms
,那一个进程1秒就可以处理1/0.1=10
个task - task投递的速度,如每秒产生
2000
个task 2000/10=200
,需要设置task_worker_num => 200
,启用200
个task进程
因此 这次参数的设置跟单个task的处理效率有关。随时间越久 业务追加的越多这个参数也需要适时的调整才可以。