APACHE 崩溃:父进程:子进程以状态 3221225477 退出 -- 正在重新启动

Posted

技术标签:

【中文标题】APACHE 崩溃:父进程:子进程以状态 3221225477 退出 -- 正在重新启动【英文标题】:APACHE Crashing: Parent: child process exited with status 3221225477 -- Restarting 【发布时间】:2012-05-05 13:59:55 【问题描述】:

我的以下设置是 Xampp 1.7.7,这是该软件包中所有内容的信息: - Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e php/5.3.8 mod_perl/2.0.4 Perl/v5.10.1

我在 Windows XP SP3 32 位操作系统、4 gigs 内存、四核上运行服务器。

我在 apache 错误日志文件中遇到的问题是:

[Tue Apr 24 15:55:55 2012] [notice] Parent: child process exited with status 3221225477 -- Restarting.
[Tue Apr 24 15:55:57 2012] [notice] Digest: generating secret for digest authentication ...
[Tue Apr 24 15:55:57 2012] [notice] Digest: done
[Tue Apr 24 15:55:59 2012] [notice] Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
[Tue Apr 24 15:55:59 2012] [notice] Server built: Sep 10 2011 11:34:11
[Tue Apr 24 15:55:59 2012] [notice] Parent: Created child process 776
[Tue Apr 24 15:56:00 2012] [notice] Disabled use of AcceptEx() WinSock2 API
[Tue Apr 24 15:56:01 2012] [notice] Digest: generating secret for digest authentication ...
[Tue Apr 24 15:56:01 2012] [notice] Digest: done
[Tue Apr 24 15:56:02 2012] [notice] Child 776: Child process is running
[Tue Apr 24 15:56:02 2012] [notice] Child 776: Acquired the start mutex.
[Tue Apr 24 15:56:02 2012] [notice] Child 776: Starting 350 worker threads.
[Tue Apr 24 15:56:02 2012] [notice] Child 776: Listening on port 443.
[Tue Apr 24 15:56:02 2012] [notice] Child 776: Listening on port 80.

这似乎在一天中偶尔发生,我什至尝试在 apache conf 文件中使用 Win32DisableEx、EnableIMAP Off 和 EnableSendFile Off。我也尝试将 libmysql.dll 文件复制到 system32 和 apache/bin 文件夹,但无济于事。

如果有人知道这个错误导致子进程退出并导致 apache 崩溃的其他原因,我们将不胜感激。如果需要任何其他日志文件,请告诉我。

谢谢, 肖恩。

【问题讨论】:

【参考方案1】:

错误代码3221225477是十六进制的0xC0000005,在Windows上是:

#define STATUS_ACCESS_VIOLATION  ((NTSTATUS)0xC0000005L)

访问冲突是Windows版本的“分段错误”,简单地说就是程序试图访问未分配的内存。发生这种情况的原因有很多,但大多数(如果不总是)是程序中的错误。

现在,我对您的情况的猜测是,PHP 或 PHP 的扩展之一或 Perl 或某些 Perl 应用程序中存在错误。 Apache 本身通常非常稳定,但如果您使用一些不寻常的扩展,也可能是原因。

我建议将您的所有配置更新到最新版本。如果您想确定问题的根源,请在调试器(如 Visual Studio 或 OllyDbg)中运行 Apache。当异常(访问冲突)发生时,它将停止执行(而不是重新启动),您将看到它在哪个模块中。

还要查看访问日志,如果有一个可疑请求与错误的时间戳相同。但是有可能在请求保存到日志文件之前发生崩溃。

【讨论】:

对我来说,在我的 PHP 代码中添加了一个空的换行符后,错误就消失了。去图... 我遇到了同样的错误。在我的 PHP 代码中添加一个空的换行符后,错误消失了。我从我的开发服务器中删除了 OPCache,现在一切正常。

以上是关于APACHE 崩溃:父进程:子进程以状态 3221225477 退出 -- 正在重新启动的主要内容,如果未能解决你的问题,请参考以下文章

进程管理

进程状态

进程控制---子进程终止状态相关的宏

Linux下异步回收子进程

如何在父进程被杀死/完成时保持子进程处于活动状态(在 Windows 中)

C#/.NET:向父服务报告子进程状态