Apache子进程以255状态退出

8

在经过大量的搜索、尝试、修复、等待和哭泣之后,在我放弃之前,我想在这里为这个错误最后一次机会...

我们正在运行 Microsoft Windows Server 2012, Apache/2.4.6 (Win64) OpenSSL/1.0.1e PHP/5.5.1

定期地,至少在24小时内出现5-10次Apache崩溃和重启。大多数情况下是两次。因为PHP崩溃了。

整个应用程序都是PHP,因此配置php为FastCGI无法解决问题:Apache不会崩溃,但PHP会。

以下是更多信息:

Windows事件日志:

Faulting application name: httpd.exe, version: 2.4.6.0, time stamp: 0x51e441d6
Faulting module name: php5ts.dll, version: 5.5.1.0, time stamp: 0x51e849b0
Exception code: 0xc0000005
Fault offset: 0x00000000000572d8
Faulting process id: 0xac0
Faulting application start time: 0x01d0a96634f3d129
Faulting application path: C:\Apache24\bin\httpd.exe
Faulting module path: C:\PHP\php5ts.dll
Report Id: 06409cc4-1568-11e5-93ff-d43d7edb03a9
Faulting package full name:
Faulting package-relative application ID: 

Apache日志:

[Thu Jun 18 06:13:44.284810 2015] [mpm_winnt:notice] [pid 2736:tid 392] AH00428: Parent: child process 2752 exited with status 255 -- Restarting.
[Thu Jun 18 06:13:44.487977 2015] [mpm_winnt:notice] [pid 2736:tid 392] AH00455: Apache/2.4.6 (Win64) OpenSSL/1.0.1e PHP/5.5.1 configured -- resuming normal operations
[Thu Jun 18 06:13:44.487977 2015] [mpm_winnt:notice] [pid 2736:tid 392] AH00456: Apache Lounge VC11 Server built: Jul 15 2013 20:45:22
[Thu Jun 18 06:13:44.487977 2015] [core:notice] [pid 2736:tid 392] AH00094: Command line: 'c:\\Apache24\\bin\\httpd.exe -d C:/Apache24'
[Thu Jun 18 06:13:44.487977 2015] [mpm_winnt:notice] [pid 2736:tid 392] AH00418: Parent: Created child process 4408
  • 在PHP中,崩溃前没有特殊的日志或模式。
  • 并发连接也不会影响问题——即使有很少的用户,也会出现这种情况。
  • MySQL?但是没有指向此的错误,或者我看错了吗?
  • Windows?如何找出原因?
  • PHP/Apache配置?还有什么其他的原因和解释吗?
  • 外星人……

最重要的问题是为什么PHP会崩溃?

提前谢谢你的帮助!


我也遇到了同样的问题。然而,运行PHP 5.6没有问题。我怀疑PHP上的Apache模块有问题。(因为Apache 2.4是更新的,有很多变化可能会导致这样的问题) - Izzy Helianthus
3个回答

2
在我的情况下,日志中没有更多内容。 只有:
 Parent: child process XXXX exited with status 255 -- Restarting

问题出在重定向代码中:
<?php
    header('HTTP/1.1 304 Not Modified');
    exit();
?>

这段代码停止了Apache服务并启动了新的进程。但并不总是如此……有时可以正常工作……有时会崩溃 :(

正确的代码是:

<?php
    header('HTTP/1.1 304 Not Modified');
    die();
?>

关于以下内容的更多信息: PHP: 在 header("Location: "); 后使用 exit(); 或 die();


1

已知一个bug:每当你包含的文件大小为4096或更大时,php模块和apache将停止工作。这不是玩笑!


你有一个大小为53248字节的.php文件。当你包含或使用这个文件时,Apache会崩溃!53248 / 4096 = 13 - 这是4096的倍数。这是PHP 5.3.10及之前和之后的一个错误。5.4及更高版本不再有这个错误(据我所知)。 - user5234989
2
我们正在使用PHP 5.5,所以这不会是问题吧? - alquist42

0

我认为在网络上导致子进程XYZ以状态255退出的原因有几种。其中大部分与PHP有关。

当通过http://parsedown.org将用户发布的消息通过Markdown解析器传递时,我在Windows、Apache 2.4.18和PHP 5.6.16上遇到了相同的崩溃。通过使用三个反引号Markdown期望的源代码来包围具有标识符引用的反引号的SQL源代码,解决了这个问题。没有深入研究Parsedown.php以找出它确切发生的位置,但肯定与这些反引号有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接