2017-03-17 46 views
1

我的php內存不足,出現服務器錯誤「內存不足:殺死進程...通過進程的25%左右」雖然它搜索了大約10000行,符合條件的行數和因此需要在過程結束時存儲並寫入文件,少於200個。所以我不確定它爲什麼會耗盡內存。PHP失敗:殺死進程 - 是否有可能使循環更有效?

我是否收到此錯誤,因爲我沒有清除每個循環後的變量,或者是否需要增加服務器上的內存?

在短暫的過程是: - LOOPA - 使用一個API調用每個拉鍊 - - 通過400個郵政編碼 列表循環每個拉鍊內得到的所有地方的清單(通常約40〜50)

- SUBLOOP1 - 每個地方發現,使用API​​調用來獲取該地點

---- SUBLOOP1A遍歷事件的所有事件計數的數量每個地方

​​205​​

回答

1

我會極力推薦添加放到每個嵌套循環的開始處。我認爲你很可能有一個無限循環,導致腳本內存不足。

如果不是的話,那麼你可以嘗試加入這一行PHP到你的腳本的頂部增加了你的PHP腳本的內存限制:

ini_set("memory_limit", "5G"); 

如果超過5GB以上的RAM爲您的腳本來處理400郵政編碼,我會建議打破你的腳本,以便您可以運行郵政編碼0-10,然後11-20,然後21-30等

希望這可以幫助,乾杯。

+0

謝謝,但它絕對不是一個無限循環,因爲如果我只使用5個郵政編碼,它就像一個魅力。我可以增加內存限制,但我擔心掩蓋更大的問題,因爲我不知道內存如何過度。 – HamletHub

+0

這確實解決了這個問題。儘管memory_get_usage()一直處於極限之下,但它一定是不計數的。謝謝! – HamletHub

+0

我發現(尤其是使用PHP7 pthreads)內存使用情況的唯一「可靠」來源是cli工具,如top,htop等。 –

1

你需要找出內存丟失的地方,然後你可以照顧它或者解決它。 memory_get_usage()是你的朋友 - 在每個循環的頂部(或底部)用一些標識符打印它,這樣你就可以在什麼時候看到你正在使用內存的地方。

+0

我確實在「memory_get_usage」中放入了峯值變量,並且它永遠不會增加。它始終在3.75MB。如果使用的php內存過多,是否會導致如上所述的內核OOM錯誤? – HamletHub