2011-08-25 38 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()