Определение причины остановленного процесса на Linux

Я думаю, что вы пытаетесь получить доступ к Auth :: user () без входа в систему. Он вернет null, если вы не вошли в систему и нет необходимости использовать блок try и catch.

Ошибка не требует пояснений.

Вызов функции-члена со значением null

, если вы загляните внутрь, вызов функции-члена try-блока находится в условии if после Auth :: user (), которое может вернуть ноль по нескольким причинам, например, из-за того, что вы не вошли в систему.

if(null !== ($user->wasStripePlan()))

В соответствии с ошибкой переменная $ user равна нулю. Попробуйте выяснить, почему Auth :: user () возвращает ноль.

5
задан 21 October 2008 в 20:22
поделиться

3 ответа

Вы можете strace рассматриваемая программа и видеть, какие системные вызовы это делает.

2
ответ дан 13 December 2019 в 22:19
поделиться

Если Вы можете определить этот "момент безразличности", затем Вы могли бы использовать strace для присоединения к рассматриваемому процессу в течение того времени и попытке выяснить, где это "спит":

strace -f -o LOG -p <pid>

Более легкий, но менее надежный метод:

  1. Когда процесс зависает, используйте top/ps/gdp/strace/ltrace для обнаружения состояния процесса (например, ожидает ли это в "выборе" или использует 100% CPU в некотором вызове библиотеки),

  2. При знании общего характера рассматриваемого вызова адаптируйте вызов strace для входа определенного syscalls или групп syscall. Например, для входа только связанного с доступом к файлу syscalls используйте:

    strace -e file -f -o LOG ....
    

Если strace является слишком тяжелым инструментом для Вас, попытайтесь контролировать:

  1. Использование памяти с "vmstat 1>/some/log" - возможно, обрабатывает, загружается (или) в течение того времени

  2. Использование IO с vmstat/iotop - возможно, некоторый другой процесс перегружает диски

  3. /proc/interrupts - возможно, драйвер для Вашей карты T1 испытывает проблемы?

8
ответ дан 13 December 2019 в 22:19
поделиться

Спасибо - strace звучит полезным. Ловля процесса в нужное время будет частью забавы. Я придумал план периодически записать метку времени в общую память, затем контролировать с другим процессом. Отправка SIGSTOP затем позволила бы мне, по крайней мере, исследовать стек приложений с gdb. Я не знаю, скажет ли strace на приостановленном процессе мне очень, но я мог бы, возможно, затем включить strace и видеть то, что он скажет. Или включите strace и поразите процесс SIGCONT.

0
ответ дан 13 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: