我创建了一个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中。
如果您需要了解其他信息,请与我们联系。 谢谢:))
答案 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)的结果。