您好我在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)并跟踪执行,它就会完成而不会出现问题。 如果我在没有跟踪的情况下运行,则上述故障情况之一变得明显。
任何人都可以用我给出的信息来解释这种行为,特别是为什么附加调试器和跟踪应用程序会阻止这个问题?
你会如何调试?
感谢。
答案 0 :(得分:2)
我们的应用程序生成一个跟踪但由于输出缓冲区,它在故障情况下不会显示。
因此,确保跟踪的每一行显示时间和内存的使用情况:
在我的情况下,唯一的模式是内存消耗。成功运行使用少于60mb,故障运行使用高于60mb。
应用程序池不支持32位应用程序模式,切换到32位模式会使内存消耗减半,现在所有内容都像以前一样运行。
很明显php没有在php.ini中设置内存限制,与应用程序池相同,所以我猜这是/是一个指针问题,但很高兴再次向前移动。