PHP:生产服务器上的内存使用率非常高,而本地计算机上的内存使用率很低

时间:2011-08-25 14:05:23

标签: php memory memory-management simple-html-dom

我创建了一个PHP脚本,它从网站上抓取某些特定数据,查找相关信息并将其存储在数据库中。该脚本在本地计算机上运行正常,但是当我使用cron作业在实时服务器上运行时,它会在执行10个数据库插入后停止

“致命错误:在 /home/content/36/78632936/html/scripts/simple_html_dom.php / b>中允许的内存大小为67108864字节(尝试分配35个字节) 809

我使用get_memory_peak_usage()在本地检查了相同的脚本,最大使用量约为8 MB。

我很困惑为什么现场机器上的内存使用量非常高..任何帮助都将受到赞赏..

我的代码一瞥:

DB_table1:包含60000行数据的列表

主代码从调用DB1开始并获取数据,然后使用每行数据形成一个URL。这些URL中的每一个都将使用simple_html_dom()函数进行抓取,脚本将在每个页面上查找某些特定信息,并将此数据存储在另一个表DB_table2中。

如果您需要了解其他信息,请与我们联系。 谢谢:))

2 个答案:

答案 0 :(得分:0)

<强>更新
查看php change log,有很多内存问题需要解决。如果您正在使用5.2中有泄漏的PHP部分,则可能是原因。如果您想确切地知道,请尝试使用memory_get_usage中的差异来包装代码中的内存密集型部分,并查看内存使用情况之间是否存在任何差异。


<强>问题/答案:

afuzzyllama:您的生产环境是否与您当地的环境相同?您的生产数据库可能拥有比沙箱更多的数据。

user743914:不幸的是我之前没有注意到差异,我的生产服务器运行的是php 5.2版,而我的localhost是在5.3.1 ...生产数据库的数据量与localhost的数据量相同...


简单解决方案:
服务器允许的最大内存限制是多少?

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

正如您在文档中看到的,根据您的PHP版本,您的限制可能低至8mb。我猜你的限制现在设置为~64M,因为你的脚本失败了~67mb。

如果您需要暂时提升它,可以使用ini_set(),也可以在php.ini文件中设置它并重新启动服务器。

答案 1 :(得分:0)

不要忘记在while / foreach之后使用unset()来清除不再需要(DB)的结果。