php 5.3.6 - iis 7.5 - win2k8r2 - fast-cgi:php-cgi.exe或FastCgiModule中的错误

时间:2012-02-24 15:43:36

标签: php debugging fastcgi fault

您好我在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进程意外退出

在这种情况下,虽然事件日志中没有记录错误,但在故障之后,以下两个条目总是直接跟随:

侦听器适配器协议'net.pipe'已成功连接到Windows进程激活服务。 监听器适配器协议'net.tcp'已成功连接到Windows进程激活服务。

似乎没有关于应用程序出错的方式以及记录方式的逻辑,但它总是一个或另一个,显然它们是相关的。

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

如果我附加XDebug(PHP Storm)并跟踪执行,它就会完成而不会出现问题。 如果我在没有跟踪的情况下运行,则上述故障情况之一变得明显。

任何人都可以用我给出的信息来解释这种行为,特别是为什么附加调试器和跟踪应用程序会阻止这个问题?

你会如何调试?

感谢。

1 个答案:

答案 0 :(得分:2)

我们的应用程序生成一个跟踪但由于输出缓冲区,它在故障情况下不会显示。

因此,确保跟踪的每一行显示时间和内存的使用情况:

  1. 逐行将跟踪输出到文件。
  2. 比较模式的各种执行的跟踪。
  3. 在我的情况下,唯一的模式是内存消耗。成功运行使用少于60mb,故障运行使用高于60mb。

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

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