2012-02-24 74 views
0

嗨我在php應用程序中遇到錯誤,導致事件日誌中的錯誤如此:php 5.3.6 - iis 7.5 - win2k8r2 - fast-cgi:php-cgi.exe或FastCgiModule中的錯誤

錯誤的應用程序名:PHP-cgi.exe文件,版本:5.3.6.0,時間戳:0x4d81eb28 錯誤模塊名稱:php5.dll,版本:5.3.6.0,時間戳:0x4d81ebdc 異常代碼:0000005

而在其他時間,一個沒有事件記錄錯誤的fast-cgi錯誤(可以在本地服務器上瀏覽):

C:\ Program Files(x86)\ P HP \ V5.3 \名爲php-cgi.exe - 對FastCGI進程意外

退出在這種情況下,雖然沒有錯誤記錄到事件日誌中的2項始終故障後直接跟隨:

偵聽器適配器協議'net.pipe'成功連接到Windows進程激活服務。 監聽器適配器協議'net.tcp'已成功連接到Windows進程激活服務。

似乎沒有邏輯應用程序故障以及如何記錄的方式,但它總是會是一個或另一個,顯然它們是相關的。

我們的應用程序相對比較複雜,但運行正常或運行不正常的唯一區別是對數據集的更改,這可能會導致在某些例程中格式化不同的數字。

如果我附加XDebug(PHP Storm)並跟蹤執行情況,它就完成了,沒有問題。 如果我在沒有追蹤的情況下運行,上述故障場景之一就變得明顯。

任何人都可以用我給出的信息解釋這種行爲,特別是爲什麼通過應用程序附加調試器和跟蹤來防止該問題?

你會如何調試?

謝謝。

回答

2

我們的應用程序會生成一個跟蹤,但是由於輸出緩衝區,它在出現故障時不會顯示。

所以確保跟蹤的每一行顯示時間和內存usuage我們:

  1. 輸出跟蹤到一個文件,一行行。
  2. 比較各種執行模式的蹤跡。

在我的情況下,唯一的模式是內存消耗。成功運行使用不到60mb,錯誤運行使用高於60mb。

應用程序池不支持32位應用程序模式,因此切換到32位模式會將內存消耗減半,現在所有內容都像以前一樣運行。

在php.ini中沒有設置內存限制,與應用程序池相同,所以我猜這是/是一個指針問題,但只是很高興再次向前移動。