Windows Server 2008 R2 + Apache 2.4 - 持续崩溃,错误模块名称:ntdll.dll

Windows Server 2008 R2 + Apache 2.4 - 持续崩溃,错误模块名称:ntdll.dll

Windows Server 2008 R2 数据中心版 64 位

使用 AWS EC2 m1.xlarge 实例

15GB RAM,4 个 Intel Xeon vCPU

问题:每 10 秒 / 每分钟 / 有时 1 小时 / 随机崩溃一次


WINNT MPM 设置:

# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxConnectionsPerChild: maximum number of connections a server process serves
<IfModule mpm_winnt_module>
    ThreadStackSize   8388608
    ThreadsPerChild     500
    MaxRequestsPerChild    0
   SendBufferSize    32768
</IfModule>

Apache 服务器:

服务器版本:Apache/2.4.29 (Win64) OpenSSL/1.0.2n

服务器 MPM: WinNT

Apache Lounge VC11 服务器建立于:2017 年 11 月 6 日 11:17:28

使用带有 mod_php 的 PHP 5.5.38


mod_status中的内容:

Server uptime: 1 hour 3 minutes 30 seconds
Server load: -1.00 -1.00 -1.00
Total accesses: 132819 - Total Traffic: 418.0 MB
34.9 requests/sec - 112.3 kB/second - 3299 B/request
115 requests currently being processed, 385 idle workers

apache error.log 中的内容,每隔几分钟就会不断崩溃

[Thu Jan 09 14:06:41.869757 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00428: Parent: child process 3872 exited with status 255 -- Restarting.
[Thu Jan 09 14:06:42.821339 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00455: Apache/2.4.29 (Win64) OpenSSL/1.0.2n configured -- resuming normal operations
[Thu Jan 09 14:06:42.821339 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00456: Apache Lounge VC11 Server built: Nov  6 2017 11:17:28
[Thu Jan 09 14:06:42.821339 2020] [core:notice] [pid 7408:tid 260] AH00094: Command line: 'C:\\Apache24\\bin\\httpd.exe -d C:/Apache24'
[Thu Jan 09 14:06:42.821339 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00418: Parent: Created child process 2588
[Thu Jan 09 14:06:44.100514 2020] [mpm_winnt:notice] [pid 2588:tid 156] AH00354: Child: Starting 500 worker threads.
[Thu Jan 09 14:06:47.470049 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00428: Parent: child process 2588 exited with status 255 -- Restarting.
[Thu Jan 09 14:06:48.265634 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00455: Apache/2.4.29 (Win64) OpenSSL/1.0.2n configured -- resuming normal operations
[Thu Jan 09 14:06:48.265634 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00456: Apache Lounge VC11 Server built: Nov  6 2017 11:17:28
[Thu Jan 09 14:06:48.265634 2020] [core:notice] [pid 7408:tid 260] AH00094: Command line: 'C:\\Apache24\\bin\\httpd.exe -d C:/Apache24'
[Thu Jan 09 14:06:48.265634 2020] [mpm_winnt:notice] [pid 7408:tid 260] AH00418: Parent: Created child process 5876
[Thu Jan 09 14:06:49.279615 2020] [mpm_winnt:notice] [pid 5876:tid 156] AH00354: Child: Starting 500 worker threads.

Windows 事件查看器中的内容

Faulting application name: httpd.exe, version: 2.4.29.0, time stamp: 0x5a00349c
Faulting module name: ntdll.dll, version: 6.1.7601.23677, time stamp: 0x589c99e1
Exception code: 0xc0000005
Fault offset: 0x000000000004f23c
Faulting process id: 0x1ff4
Faulting application start time: 0x01d5c6b2a8435c36
Faulting application path: C:\Apache24\bin\httpd.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 1b83564d-32a6-11ea-a95b-22000a1f2f53

问题:为什么 64 位 Apache 使用 C:\Windows\SYSTEM32\ntdll.dll?这可能是问题所在吗?


我尝试解决此问题的方法:

  1. 尝试修改 MPM 设置 ThreadsPerChild 从 1500 降至 200,仍然崩溃

  2. 测试将 PHP.ini 内存限制从 500MB 提高到 2G,仍然崩溃

  3. 更新 Apache 至最新 2.4.38,问题仍然存在

有什么办法可以调试此问题吗?找出导致此问题的模块/代码?

据我搜索,错误代码 0xc0000005,也称为访问冲突错误。


最新更新:

将 PHP 升级到版本 5.6.40(上次更新于 2019 年 1 月),发现崩溃次数大大减少。过去 4 天内,24 小时内大约发生 5-10 次。

崩溃不再与错误模块 ntdll.dll 有关,而是与 php5ts.dll 和 LIBLEAY32.dll(与 ssl 相关)有关,因此不再与该线程相关。

答案1

你知道微软将在 4 天内不再支持你的操作系统吗?而且你的 php 版本已经多年不受支持了。你知道吗?

但是对于您的问题,请尝试禁用 php 一段时间,看看之后它是否仍然崩溃。Windows 版 Apache 和将 php 作为模块运行存在一些问题,所以这可能是问题所在。如果之后它仍然崩溃,那么至少您已经排除了它作为原因的可能性。

相关内容