我有一個PHP腳本,它擁有大量的人員,它通過SOAP從外部資源抓取他們的細節,修改數據並將其發回。由於細節的大小,我將PHP的內存提升到了128MB。運行約4小時後(可能需要4天運行),內存耗盡。它用來做什麼繼承人的基本知識:垃圾回收器如何在PHP中工作
$people = getPeople();
foreach ($people as $person) {
$data = get_personal_data();
if ($data == "blah") {
importToPerson("blah", $person);
} else {
importToPerson("else", $person);
}
}
後它跑的內存並撞車了,我決定了foreach
循環之前數據初始化$根據top
,該進程的內存使用情況並沒有7.8%以上上漲它已經運行了12個小時。
所以我的問題是,即使重用,PHP不會在循環內初始化的變量上運行垃圾回收器嗎?系統是否回收內存,PHP沒有將其標記爲可用,並最終會再次崩潰(我已經將其升級到了256MB,因此我已經更改了2件事情,並且不確定哪些修復了它,我可以更改我的腳本回答這個問題,但不想再等12個小時才能找出答案)?
我沒有使用Zend框架,所以像這樣的其他問題我不認爲是相關的。
編輯:我實際上沒有腳本的問題或它在做什麼。目前,就所有系統報告而言,我沒有任何問題。這個問題是關於垃圾收集器以及它如何/何時回收foreach循環中的資源和/或系統如何報告php進程的內存使用情況。
我有興趣聽到爲什麼這已被低估了兩次投票現在... – Moses 2012-04-02 23:08:48
'importToPerson()'會發生什麼? – PeeHaa 2012-04-02 23:12:01
if($ data =「blah」){'be'if($ data ==「blah」){'? – PeeHaa 2012-04-02 23:12:26