例如如下代码:
1 | $files = array(<URLs of over 500 files>); |
可能会报如下错误:
1 | WARNING swPipeUnsock_create(:83): socketpair() failed, Error: Too many open files[24] |
这是因为Swoole
在new Process
的时候,默认会创建一对管道,这样就会消耗两个fd
(每创建一个进程,都会消耗两个fd
)。如果创建的Process
过多的话,就会出现“打开文件过多的错误”。
解决这个问题的方法有两个。
第一,我们配置ulimit -n
,调大最大打开文件的上限。例如:
1 | ulimit -n 100000 |
第二,因为我们这个程序并没有涉及到进程间的通信,所以完全可以不创建这pipe
。此时,我们只需要设置new Process
的第三个参数为0
即可。例如:
1 | new Swoole\Process($fn, false, 0); |