4

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

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

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

我很困惑为什么现场机器上的内存使用率非常高..任何帮助将不胜感激..

一瞥我的代码:

DB_table1:包含 60000 行数据的列表

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

如果您需要了解其他信息,请告诉我。谢谢 :)

4

2 回答 2

0

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

于 2011-08-25T15:09:51.570 回答
0

更新:
查看php 更改日志,可以解决很多内存问题。如果您使用的 PHP 部分在 5.2 中有泄漏,这可能是一个原因。如果您想确定尝试使用memory_get_usage的差异包装代码的内存密集型部分,并查看内存使用量之间是否存在任何差异。


问题/答案:

afuzzylama:你的生产环境和你本地的环境一样吗?您的生产数据库可能比您的沙箱拥有更多的数据。

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


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

在此页面[php.net]上搜索“memory_limit” 。

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

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

于 2011-08-25T14:20:26.517 回答