国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

在子進程的回調(diào)里使用empty 或者isset 導致進程卡死

codeninjia
$worker->onMessage = function ($connection, $data) {
    try {
        $ret = call_user_func_array(array(SERVICE_DIR."\\".$class, $method), $param_array);
 /*這里我只要判斷比如 isset($ret);進程機會卡死。走不到 下面如果我不判斷直接返回的就可以。
我本地可以,本地的版本是php7.0 服務器上不行。版本是php7.15。其實這個時候返回的數(shù)據(jù)$ret 是個空數(shù)組
,*/

    StatisticClient::report($class, $method, 1, 0, '', $statistic_address);
   return $connection->send($ret);
   }
    catch (Exception $e) {
        // 發(fā)送數(shù)據(jù)給客戶端,發(fā)生異常,調(diào)用失敗
    $code = $e->getCode() ? $e->getCode() : 500;
        StatisticClient::report($class, $method, $success, $code, $e, $statistic_address);
        return $connection->send(array('code' => $code, 'msg' => $e->getMessage(), 'data' => $e));
    }
}

strce 打出來的信息里。比較有用的是

poll(, 1, 0) = 0 (Timeout)
sendto(23, "*3\r\n$3\r\nSET\r\n$61\r\nhooker_config_"..., 89, MSG_DONTWAIT, NULL, 0) = 89
poll(, 1, 0) = 0 (Timeout)
poll(, 1, 3000) = 1 ()
recvfrom(23, "+OK\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 5
poll(, 1, 0) = 0 (Timeout)
sendto(23, "*4\r\n$4\r\nHSET\r\n$56\r\nhooker_config"..., 121, MSG_DONTWAIT, NULL, 0) = 121
poll(, 1, 0) = 0 (Timeout)
poll(, 1, 3000) = 1 ()
recvfrom(23, ":0\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 4
3796 2 0
2個回答

six

把$ret打印出來看看是什么,估計$ret不是數(shù)組,是不是isset($ret)報錯拋異常了?
存猜測。

另外如果$ret是數(shù)組的話,$connection->send($ret); 應該不行把,我記得send的數(shù)據(jù)好像必須是字符串的

  • codeninjia 2017-10-18

    打出來看了確實是個數(shù)組,至于send的話。我是用的json協(xié)議會自動轉(zhuǎn)。如果我用empty判斷,然后給個空數(shù)組,就不會報錯了。

walkor 打賞

看strace信息是你的業(yè)務一直在操作redis,估計是業(yè)務進入了某個死循環(huán)或者大的循環(huán)導致業(yè)務卡住了。
還有看起來你的redis好像返回有點慢,看下redis負載,或者可能是其它原因?qū)е聄edis返回很慢。
redis操作關(guān)鍵字大概是
redis->set('hooker_config_...', ...);
redis->hset('hooker_config...', ...);

  • codeninjia 2017-10-23

    謝謝回答,我在輸出$ret 的時候看返回的是空數(shù)組呢,你的意思是在查詢redis的時候redis其實并沒有響應,所以會導致進程卡死對嗎?在多問一個問題,就是我在進行壓測的時候偶爾會出現(xiàn),
    RedisException' with message 'read error on connection 這個錯誤。
    workerman和php的版本如下。謝謝
    ----------------------- WORKERMAN -----------------------------
    Workerman version:3.5.1 PHP version:5.5.33

  • walkor 2017-10-24

    read error on connection 是redis問題,和workerman無關(guān)

  • walkor 2017-10-24

    redis無響應會卡死

  • codeninjia 2017-10-25

    @1:意思是 read error on connection 這樣錯誤是redis自己的問題。不是代碼的事情可以這樣理解嗎

  • codeninjia 2017-10-25

    @1:還有就是如果跑在php7.1的環(huán)境下是不會報錯的?,F(xiàn)在5.5的環(huán)境下會報那個錯誤。

  • walkor 2017-10-26

    read error on connection應該不是業(yè)務代碼的問題。php7.1的環(huán)境下是不會報錯有可能是redis擴展在這個版本修復了這個問題。以上只是猜測。

  • codeninjia 2017-11-01

    @1:恩我已經(jīng)升級了現(xiàn)在沒問題了。謝謝回答。

年代過于久遠,無法發(fā)表回答
??