【问题标题】:How to investigate PHP crash in Apache? [duplicate]如何调查 Apache 中的 PHP 崩溃? [复制]
【发布时间】:2019-07-29 23:00:06
【问题描述】:

我写了一段代码,它使 Apache 进程崩溃。我想知道是否有任何方法可以让我在任何地方记录任何有用的信息,或者是否有任何方法可以调查发生了什么?

崩溃的代码:

$mysqli = new mysqli($host, $user, $pass, $db);
$stmtQuery = $mysqli->prepare("SELECT ?, 'name'");
$stmtQuery->bind_result($id, $name);

$stmtQuery->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
$stmtQuery->bind_param('i', $i);
$stmtQuery->execute();
$stmtQuery->get_result()->fetch_assoc();

PHP error_log 中没有任何内容。
在 Apache error_log 中,我看到的只是:

[mpm_winnt:notice] [pid 8212:tid 652] AH00428: Parent: child process 20232 exited with status 3221225477 -- Restarting.

我不知道这个状态意味着什么,我正在寻找更深入的崩溃报告。

【问题讨论】:

  • 你可以使用 Blackfire。它是一个调试器工具,可以帮助您识别这一点。
  • 是的,这是谷歌的第一个结果。该解决方案说要增加 Apache 进程的堆栈大小,但是如果我在 PHP 中触发了段错误,我想知道它为什么会发生。我希望 Apache 能在某处保存一些崩溃日志,但我找不到。
  • 我在这里阅读了一些结果,人们建议的“修复”差异很大。我还没有找到任何关于如何正确诊断崩溃原因的信息,我同意这似乎更有用。
  • 哇,有很多关于这个的问答。我很惊讶我从来没有遇到过。

标签: php apache


【解决方案1】:

想想你要找的是strace

strace -f $(pidof php5-fpm | sed 's/\([0-9]*\)/\-p \1/g')

来源:Debugging Stuck PHP-FPM Process With Strace

MPM workerprefork 可能有不同的进程名称。

这将显示线程模型:httpd -V | grep MPM

这可能是一个duplicate 的问题;也 this one 似乎相关...


因为超出了ThreadStackSize 的值而崩溃-

可能是由于毫无头绪地尝试分配光标窗口...

mod_mysqli 出错,为了稳定,线程被杀死。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2019-05-21
    • 2012-08-04
    相关资源
    最近更新 更多