2011-08-25 41 views
3

我創建了一個PHP腳本,它從網站上抓取一些特定數據,查找相關信息並將其存儲在數據庫中。該腳本在本地機器上正常工作,但是當我在使用cron作業的活動服務器上運行它時,它會在執行10次數據庫插入後停止說PHP:生產服務器上的內存使用率很高,而本地計算機上的內存使用率很低

「致命錯誤:允許的內存大小爲67108864個字節已耗盡(試圖分配35個字節)在/home/content/36/78632936/html/scripts/simple_html_dom.php上線

我檢查我的本地使用get_memory_peak_usage相同的腳本()和最大使用量惡有惡報8 MB。

我困惑的是,爲什麼內存使用的是活的機器..任何幫助將不勝感激在壯觀的高..

瞥見我的代碼:

DB_table1:包含60000行的列表數據

主代碼首先調用DB1並獲取數據,然後使用每行數據形成一個URL。這些URL中的每一個都將使用simple_html_dom()函數進行挖掘,腳本將在每個頁面上查找某些特定信息,並將此數據存儲在另一個表DB_table2中。

請讓我知道,如果你需要知道別的。 謝謝:)

+1

什麼操作系統,PHP版本和MySQL版本是現場和本地服務器使用? – gnur

+2

只要我們沒有看到在809行的simple_html_dom.php(以及上面和下面的行,理想情況下是整個塊......),我們都看不到會發生什麼事情。 – ty812

+0

你是否刮掉整個網站,然後開始插入?或者你插入即用? – Quamis

回答

0

更新:
望着php change log有很多是地址內存問題。如果您在5.2中使用PHP中存在泄漏的部分,則可能是原因。如果您想確切地知道在memory_get_usage的區別中試圖對代碼的內存密集部分進行包裝,並查看內存使用情況是否存在差異。


提問/回答:

afuzzyllama:是您的生產環境相同,您當地的環境?你的生產數據庫可能比你的沙箱有更多的數據。

user743914:不幸的是我沒有注意到以前的區別,我的生產服務器運行php版本5.2,而我的本地主機是在5.3.1上......生產DB與本地主機有相同數據量......


簡單的解決方案:
什麼是最大內存限制你的服務器允許?

this page [php.net]上搜索'memory_limit'。

正如您在文檔中看到的,取決於您的PHP版本,您的限制可能低至8mb。我猜你現在的限制是64M,因爲你的腳本失敗了〜67MB。

如果你需要暫時提高它,你可以使用ini_set()或者你可以在你的php中設置它。ini文件並重新啓動服務器。

+0

非常感謝您的輸入......不幸的是我之前沒有注意到這種差異,我的生產服務器運行的是PHP 5.2版本,而我的本地主機是5.3.1版本......生產數據庫的數據量與本地主機的數據量相同......版本差異可能是內存使用差異的唯一原因嗎?我儘可能在每一步都使用unset。 – ankit

0

在while/foreach清理不再需要(DB)結果後,請不要忘記使用unset()