使用swoole的時候出現EPOLLIN handle failed

來源:互聯網
上載者:User
出現的錯誤如下

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的事件回呼函數執行失敗。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.