使用swoole的时候出现EPOLLIN handle failed
程序员文章站
2022-05-10 23:08:37
...
出现的错误如下
swReactorEpoll_wait#270: EPOLLIN handle failed. fd=17. Error: Success[0].
PHP Warning: Unknown: swoole_event: onRead handler error in Unknown on line 0
我借鉴了这里面的代码 http://www.oschina.net/news/52997/swoole-1-7-3 ,在处理逻辑时我做了一个简单的轮询分配机制,把主进程获取的任务发送给子进程异步处理
php
function process_function(swoole_process $worker) { swoole_event_add($worker->pipe, function () use ($worker) { $recv = $worker->read(); // 处理逻辑 ... }); } function dispatch_process($task) { global $workers; static $pos; foreach ($handlers as $handler) { $pos = NULL === $pos ? 0 : ($pos write($task); } } $workers = []; for ($i = 0; $i start(); $workers[] = [$pid, $process]; echo "create process {$pid}\n"; } while (true) { $task = $redis->brPop('message', 10); if ($task) { dispatch_process($task[1]); } }
我刚刚看了下ulimit -a
,是默认的1024,所以猜测是不是这里出错,但看报错也不是很像。大家有什么思路吗?
更新,我已经尝试调整过ulimit,没有任何作用。而且这个问题只会在运行一段时间后触发,且内存也没有泄漏。
PHP 5.5.9,swoole 1.7.17
回复内容:
出现的错误如下
swReactorEpoll_wait#270: EPOLLIN handle failed. fd=17. Error: Success[0].
PHP Warning: Unknown: swoole_event: onRead handler error in Unknown on line 0
我借鉴了这里面的代码 http://www.oschina.net/news/52997/swoole-1-7-3 ,在处理逻辑时我做了一个简单的轮询分配机制,把主进程获取的任务发送给子进程异步处理
php
function process_function(swoole_process $worker) { swoole_event_add($worker->pipe, function () use ($worker) { $recv = $worker->read(); // 处理逻辑 ... }); } function dispatch_process($task) { global $workers; static $pos; foreach ($handlers as $handler) { $pos = NULL === $pos ? 0 : ($pos write($task); } } $workers = []; for ($i = 0; $i start(); $workers[] = [$pid, $process]; echo "create process {$pid}\n"; } while (true) { $task = $redis->brPop('message', 10); if ($task) { dispatch_process($task[1]); } }
我刚刚看了下ulimit -a
,是默认的1024,所以猜测是不是这里出错,但看报错也不是很像。大家有什么思路吗?
更新,我已经尝试调整过ulimit,没有任何作用。而且这个问题只会在运行一段时间后触发,且内存也没有泄漏。
PHP 5.5.9,swoole 1.7.17
你使用的PHP、swoole版本分别是多少?
这个错误表示回调函数执行错误,具体什么原因可能还需要查一下。
此问题的原因是你的PHP代码抛出了异常,未捕获。会导致Swoole的事件回调函数执行失败。