Swoole Server运行时参数

reactor_num

reactor_num表示Reactor线程数量,主要用于调节Master主进程内事件处理线程的数量,以充分利用多核优势,默认使用CPU核数。reactor_num一般设置为CPU核数的1到4倍,在Swoole中reactor_num最大不得超过CPU核数的4倍。

Reactor线程可利用多核,如果机器有128个核Swoole会启动128个线程,每个线程都会维持一个EventLoop,另外线程之间是无锁的。由于指令可以被128核CPU并行执行,考虑到操作系统调度存在一定程序的偏差,可以设置为CPU核数的2倍,以便最大化利用CPU的每个核。

worker_num

worker_num表示启动Worker进程的数量,当业务代码是全异步非阻塞时设置为CPU的1到4倍最为合理,当业务代码为同步阻塞时则需要根据请求响应时间和系统负载来调整。

假如一个请求耗时100毫秒,如果要提供1000QPS的处理能力,那就需要配置1000QPS*100ms/1000 = 100个进程或更多。当开启的Worker进程越多时就占用的内存会大大增加,而且进程之间切换的开销会越来越大。假如每个进程占用40M内存,那100个进程就会占用大约40G的内存,所以根据实际情况适当即可。

task_worker_num

  • Task任务进程是同步阻塞的,配置方式与Worker同步模式一致。
  • Task任务进程内不能使用swoole_server->task()方法
  • Task任务进程内不能使用mysql-asyncredis-asyncswoole_event等异步IO函数。

task_worker_num用于配置Task任务进程的数量,配置后Swoole将会启用Task功能,所以swoole_server务必要注册onTaskonFinish两个事件回调函数。如果没有注册的话,服务器程序将会无法启动。

task_ipc_mode

task_ipc_mode用于设置Task任务进程与Worker进程之间的通信方式,其选项包括:

  • 1 表示使用unix socket通信
  • 2 表示使用消息队列通信
  • 3 表示使用消息队列通信并设置为争抢模式,此时tasktaskwait将无法指定目标进程IO。

task_max_request

task_max_request用于设置Task任务进程的最大任务数量,一个Task任务进程在处理超过task_max_request的任务后会自动退出。

task_max_request是为了防止PHP进程内存溢出,如果不希望进程自动退出可设置为0。

task_max_request默认值为5000,受到swoole_config.h中的SW_MAX_REQUEST宏控制。

Swoole1.7.17+版本默认值调整为了0,不会主动退出进程。

task_tmpdir

task_tmpdir用于设置Task进程的数据临时目录,适用于Swoole1.7.7+版本,在swoole_server中如果投递的数据超过了8192字节时,将会启动临时文件来保存数据,此时task_tmpdir是用来设置临时文件保存的位置。

max_request

max_request表示设置Worker进程的最大任务数量,当一个Worker进程在处理超过max_request的任务后会自动退出,因此max_request是为了防止PHP进程的内存溢出。如果不希望进程自动退出可设置max_request为0。当Worker进程内发生致命错误或人工执行exit退出时,进程会自动退出。与此同时,Master主进程会重启一个新的Worker进程来出合理任务。

max_conn

max_conn表示服务器程序最大允许的连接数量,max_conn用于设置服务器最大允许维持多少个TCP连接。当服务器超过max_conn时,后续新进的连接将会被拒绝。

max_conn最大不得超过操作系统ulimit -m的值,若超过Swoole会报出一条警告信息,并自动重置为ulimit -m的值。

WARN swServer_start_check: serv->max_conn is exceed the maximum value[10000].

max_conn应根据机器内存的实际情况来设置,不要设置的过大。Swoole会根据max_conn一次性分配一块内存来保存Connection连接信息。

dispatch_mode

dispatch_mode用于设置数据包的分发策略,可选三种类型,默认为2。

  • 1 表示轮询模式,收到会轮询分配给每个Worker进程。
  • 2 表示固定模式,根据连接的文件描述符分配Worker进程,这样可以保证同一个连接发来的数据只会被同一个Worker处理。
  • 3 表示抢占模式,Master主进程会根据Worker工作进程的蛮闲状态选择投递,只会投递给处于闲置状态的Worker。
  • 4 表示IP分配,根据TCP/UDP连接的来源IP进行取模hash,分配给一个固定的Worker进程,可以保证同一个来源IP的连接数据总会被分配到同一个Worker进程。
  • 5 表示UID分配,需要用户代码中调用$server->bind()将一个连接绑定到一个UID,然后Swoole会根据UID的值分配到不同的Worker工作进程。

dispatch_mode中4和5两种模式在Swoole1.7.8+版本适用

dispath_mode中1和3,底层会屏蔽onConnectonClose事件,原因是在这两种模式下无法保证onConnectonCloseonReceive的顺序。非请求响应式的服务器程序中不要使用模式1或3。

SWOOLE_BASE单线程模式下,dispatch_mode配置是无效的,因为单线程中不存在投递任务。

当Reactor线程收到客户端发送过来的数据后会理解回调onReceive函数,不需要投递Worker进程。

daemonize

daemonize用于设置守护进程,当设置daemonize为1时程序将转入后台作为守护进程运行,长时间运行的服务器程序必须启用此项。如果不启动守护进程,当SSH终端退出后程序将被终止运行。

  • 启用守护进程后标准输入和输出将被终止运行
  • 如果未设置log_file将重定向到/dev/null,所有打印屏幕的信息都会被丢弃。
  • 启用守护进程后,当前目录环境变量的值会发生变更,相对路径的文件读写会出错,PHP程序中必须使用绝对路径。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值