Страница 1 из 1

Stack trace в логах

Добавлено: 2019.10.14, 18:31
spavlov
Всем привет.

С недавнего времени начали вылезать ошибки в процессе работы "Yii2 Queue" экстеншена - "The process has been signaled with signal "11""

Пытаюсь дебажить и вижу в логе обрезанный троеточиями стектрейс по которому вообще не понятно в каком процессе ошибка:

Код: Выделить всё

Symfony\Component\Process\Exception\ProcessSignaledException: The process has been signaled with signal "11". in /www/vendor/symfony/process/Process.php:423
Stack trace:
#0 /www/vendor/symfony/process/Process.php(236): Symfony\Component\Process\Process->wait()
#1 /www/vendor/yiisoft/yii2-queue/src/cli/Command.php(175): Symfony\Component\Process\Process->run(Object(Closure))
#2 /www/vendor/yiisoft/yii2-queue/src/cli/Command.php(106): yii\queue\cli\Command->handleMessage('4078843', 'O:23:"core\\jobs...', '300', '1')
#3 [internal function]: yii\queue\cli\Command->yii\queue\cli\{closure}('4078843', 'O:23:"core\\jobs...', '300', '1')
#4 /www/vendor/yiisoft/yii2-queue/src/cli/Queue.php(136): call_user_func(Object(Closure), '4078843', 'O:23:"core\\jobs...', '300', '1')
#5 /www/vendor/yiisoft/yii2-queue/src/drivers/redis/Queue.php(63): yii\queue\cli\Queue->handleMessage('4078843', 'O:23:"core\\jobs...', '300', '1')
#6 [internal function]: yii\queue\redis\Queue->yii\queue\redis\{closure}(Object(yii\queue\cli\SignalLoop))
#7 /www/vendor/yiisoft/yii2-queue/src/cli/Queue.php(108): call_user_func(Object(Closure), Object(yii\queue\cli\SignalLoop))
#8 /www/vendor/yiisoft/yii2-queue/src/drivers/redis/Queue.php(71): yii\queue\cli\Queue->runWorker(Object(Closure))
#9 /www/vendor/yiisoft/yii2-queue/src/drivers/redis/Command.php(68): yii\queue\redis\Queue->run(true, 3)
#10 [internal function]: yii\queue\redis\Command->actionListen(3)
#11 /www/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#12 /www/vendor/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#13 /www/vendor/yiisoft/yii2/console/Controller.php(148): yii\base\Controller->runAction('listen', Array)
#14 /www/vendor/yiisoft/yii2/base/Module.php(528): yii\console\Controller->runAction('listen', Array)
#15 /www/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('queue/listen', Array)
#16 /www/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('queue/listen', Array)
#17 /www/vendor/yiisoft/yii2/base/Application.php(386): yii\console\Application->handleRequest(Object(yii\console\Request))
#18 /www/yii(27): yii\base\Application->run()
#19 {main}
подскажите плиз кто знает, как логировать без сокращений? Спасибо.

Re: Stack trace в логах

Добавлено: 2019.10.14, 18:41
yiiliveext
spavlov писал(а):
2019.10.14, 18:31
подскажите плиз кто знает, как логировать без сокращений? Спасибо.
И что вам это даст?
Ответ по вашей проблеме здесь https://github.com/symfony/symfony/issues/20988

Re: Stack trace в логах

Добавлено: 2019.10.14, 19:02
spavlov
yiiliveext писал(а):
2019.10.14, 18:41
И что вам это даст?
хотелось посмотреть ... эта фигня в 1 определенном процессе или нет

Вашу ссылку находил, читал. Не хотелось просто отключать OPCache :(

Re: Stack trace в логах

Добавлено: 2019.10.15, 09:51
yiiliveext
spavlov писал(а):
2019.10.14, 19:02
yiiliveext писал(а):
2019.10.14, 18:41
И что вам это даст?
хотелось посмотреть ...
Как временное решение добавьте в \yii\base\ErrorHandler следующий метод

Код: Выделить всё

protected static function getExceptionTraceAsString($exception) {
        $rtn = "";
        $count = 0;
        foreach ($exception->getTrace() as $frame) {
            $args = "";
            if (isset($frame['args'])) {
                $args = array();
                foreach ($frame['args'] as $arg) {
                    if (is_string($arg)) {
                        $args[] = "'" . $arg . "'";
                    } elseif (is_array($arg)) {
                        $args[] = "Array";
                    } elseif (is_null($arg)) {
                        $args[] = 'NULL';
                    } elseif (is_bool($arg)) {
                        $args[] = ($arg) ? "true" : "false";
                    } elseif (is_object($arg)) {
                        $args[] = get_class($arg);
                    } elseif (is_resource($arg)) {
                        $args[] = get_resource_type($arg);
                    } else {
                        $args[] = $arg;
                    }
                }
                $args = join(", ", $args);
            }
            $current_file = "[internal function]";
            if(isset($frame['file']))
            {
                $current_file = $frame['file'];
            }
            $current_line = "";
            if(isset($frame['line']))
            {
                $current_line = $frame['line'];
            }
            $rtn .= sprintf( "#%s %s(%s): %s(%s)\n",
                $count,
                $current_file,
                $current_line,
                $frame['function'],
                $args );
            $count++;
        }
        return $rtn;
    }
и в методе handleException() добавьте логирование полной версии стектрейса

Код: Выделить всё

try {
            $this->logException($exception);
            Yii::error(static::getExceptionTraceAsString($exception)); // эту строку нужно добавить
            if ($this->discardExistingOutput) {
                $this->clearOutput();
            }
            $this->renderException($exception);
            if (!YII_ENV_TEST) {
                \Yii::getLogger()->flush(true);
                if (defined('HHVM_VERSION')) {
                    flush();
                }
                exit(1);
            }

Re: Stack trace в логах

Добавлено: 2019.10.15, 23:29
spavlov
yiiliveext писал(а):
2019.10.15, 09:51
Как временное решение добавьте в \yii\base\ErrorHandler следующий метод
wow, спасибо )

Re: Stack trace в логах

Добавлено: 2019.10.16, 17:51
spavlov
yiiliveext писал(а):
2019.10.14, 18:41
Ответ по вашей проблеме здесь https://github.com/symfony/symfony/issues/20988
кстати, попробовал отключить Opcache. Толку никакого. Как сыпались ошибки так и сыпятся.

Re: Stack trace в логах

Добавлено: 2019.10.16, 17:58
yiiliveext
spavlov писал(а):
2019.10.16, 17:51
yiiliveext писал(а):
2019.10.14, 18:41
Ответ по вашей проблеме здесь https://github.com/symfony/symfony/issues/20988
кстати, попробовал отключить Opcache. Толку никакого. Как сыпались ошибки так и сыпятся.
Попробуйте другую версию php