Skip to content

应该开启多少进程

如何设置进程数

进程数是由 count 属性决定的 (windows 系统不支持进程数设置),例如下面代码

php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$http_worker = new Worker("http://0.0.0.0:2345");

// ## 启动4个进程对外提供服务 ##
$http_worker->count = 4;

...

进程数设置需要考虑以下条件

1、cpu 核数

2、内存大小

3、业务偏向 IO 密集还是 CPU 密集型

进程数设置原则

1、每个进程占用内存之和需要小于总内存(一般来说每个业务进程占用内存大概 40M 左右)

2、如果是 IO 密集型,也就是业务中涉及到一些阻塞式 IO,比如一般的访问 Mysql、Redis 等存储都是阻塞式访问的,进程数可以开大一些,如配置成 CPU 核数的 3 倍。如果业务中涉及的阻塞等待非常多,可以再适当加大进程数,例如 CPU 核数的 8 倍甚至更高。注意非阻塞式 IO 属于 CPU 密集型,而不属于 IO 密集型。

3、如果是 CPU 密集型,也就是业务中没有阻塞式 IO 开销,例如使用异步 IO 读取网络资源,进程不会被业务代码阻塞的情况下,可以把进程数设置成和 CPU 核数一样

进程数设置参考值

如果业务代码偏向 IO 密集型,则根据 IO 密集程度设置进程数,例如 CPU 核数的 3-8 倍。

如果业务代码偏向 CPU 密集型,则可以将进程数设置成 cpu 核数。

注意

Workerman 自身的 IO 都是非阻塞的,例如 Connection->send 等都是非阻塞的,属于 CPU 密集型操作。如果不清楚自己业务偏向于哪种类型,可设置进程数为 CPU 核数的 3 倍左右即可。 另外进程数并非越多越好,进程开得太多,进程切换开销会增大,对性能有一定影响。

基于 MIT 许可发布