0

嗨,我在 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 进程激活服务。侦听器适配器协议“net.tcp”成功连接到 Windows 进程激活服务。

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

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

如果我附加 XDebug (PHP Storm) 并跟踪执行,它会毫无问题地完成。如果我在没有追踪的情况下运行,上述故障场景之一就会变得很明显。

任何人都可以用我提供的信息来解释这种行为,特别是为什么附加调试器并通过应用程序进行跟踪可以防止问题发生?

你将如何调试这个?

谢谢。

4

1 回答 1

2

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

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

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

就我而言,唯一的模式是内存消耗。成功运行使用少于 60mb,故障运行使用高于 60mb。

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

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

于 2012-02-27T15:44:32.207 回答