出現的錯誤如下
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 ,在處理邏輯時我做了一個簡單的輪詢分配機制,把主進程擷取的任務發送給子進程非同步處理
phpfunction 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 < count($workers) - 1 ? $pos + 1 : 0); $workers[$pos][1]->write($task); }}$workers = [];for ($i = 0; $i < $concurrence; $i ++) { $process = new swoole_process('process_function'); $pid = $process->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 ,在處理邏輯時我做了一個簡單的輪詢分配機制,把主進程擷取的任務發送給子進程非同步處理
phpfunction 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 < count($workers) - 1 ? $pos + 1 : 0); $workers[$pos][1]->write($task); }}$workers = [];for ($i = 0; $i < $concurrence; $i ++) { $process = new swoole_process('process_function'); $pid = $process->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的事件回呼函數執行失敗。