php 5.3.6-iis 7.5-win2k8r2-fast cgi:php-cgi.exe或FastCgiModul


php 5.3.6 - iis 7.5 - win2k8r2 - fast-cgi : fault in php-cgi.exe or FastCgiModule

嗨,我在php应用程序中遇到错误,有时会导致事件日志中出现错误,例如:

出现故障的应用程序名称:php-cgi.exe,版本:5.3.6.0,时间戳:0x4d81eb28故障模块名称:php5.dll,版本:5.3.6.0,时间戳:0x4d81ebdc异常代码:0xc0000005

在其他时候,一个没有事件记录错误的快速cgi错误(可以在本地服务器上浏览):

C: ''Program Files(x86)''PHP''v5.3''PHP-cgi.exe-FastCGI进程意外退出

在这种情况下,尽管事件日志中没有记录任何错误,但以下2个条目始终紧跟在故障之后:

侦听器适配器协议"net.pipe"已成功连接到Windows Process Activation Service。侦听器适配器协议"net.tcp"已成功连接到Windows Process Activation Service。

关于应用程序的故障方式和记录方式,似乎没有任何逻辑,但它总是其中之一,显然它们是相关的。

我们的应用程序相对复杂,但运行良好与不运行良好之间的唯一区别是对数据集的更改,这可能会导致在某些例程中格式化不同的数字。

如果我附加XDebug(PHP Storm)并跟踪执行,它就可以顺利完成。如果我在不进行跟踪的情况下运行,则上述故障场景之一将变得明显。

有人能用我提供的信息解释这种行为吗?特别是为什么附加调试器并通过应用程序进行跟踪可以防止这个问题?

你将如何调试它?

谢谢。

我们的应用程序生成了一个跟踪,但由于输出缓冲区的原因,在出现故障时没有显示。

因此,确保跟踪的每一行都显示时间和内存,我们:

  1. 逐行输出文件的跟踪
  2. 比较模式的各种执行的跟踪

在我的情况下,唯一的模式是内存消耗。成功运行使用的小于60mb,故障运行使用的大于60mb。

应用程序池不支持32位应用程序模式,因此切换到32位模式将内存消耗减半,现在一切都像以前一样运行。

php在php.ini中没有设置内存限制,与应用程序池相同,所以我想这是一个指针问题,但很高兴再次前进。