2012-08-30 84 views
2

我正在php中運行非常長的任務。這是一個網站爬蟲,它必須有禮貌,每頁睡眠5秒,以防止服務器超載。腳本開頭爲:爲什麼PHP腳本可能會停止?

ignore_user_abort(1); 
session_write_close(); 
ob_end_clean(); 
while (@ob_end_flush()); 
set_time_limit(0); 
ini_set('max_execution_time',0); 

幾小時後(3-7h之間)腳本死亡,沒有任何明顯的原因。 我檢查

  • Apache的錯誤日誌(無)
  • php_errors.log(無)
  • 輸出誤差(調試輸出的10 578 467B,沒有錯誤)
  • 內存消耗(穩定,大約3M從memory_get_usage(true)每5秒檢查一次,限制設爲512M)

這不是瀏覽器,因爲我用的是wget和chrome來檢查類似的原因。 輸出每2-3秒發送到瀏覽器,所以我不認爲這是故障+我忽略用戶中止。

是否有其他地方我可以檢查發現問題?

+1

如果它運行在Apache容器(mod_php)中,我可以想象它最終會在不通知你的情況下終止進程:) –

+3

你可以單獨運行它嗎(在Apache之外)? – Thilo

+0

如何做到這一點部分?掃描500-1000鏈接,然後用一些參數調用相同的腳本以偏移量開始 –

回答

0

我認爲在腳本的其餘部分存在問題,而不是Apache。

嘗試使用register_tick_function用輕探查像this並記錄memory usage剖析應用程序,可能是。

+0

我不確定這是否可能。腳本應該以「已完成」消息或某種錯誤結束。我仔細檢查了整個文件中的'exit','die'和'return',它們不會給出消息,但是沒有。我已經檢查過內存使用情況(請閱讀問題)。 – Smok