2017-07-30 86 views
0

我已经为我的Joomla网站编写了自定义组件。 该组件是在PHP中,并基于MVC范例。该组件的工作原理,但经过几个月的使用后,在一些地区出现此消息:joomla自定义组件内存使用情况

Fatal error: Allowed memory size of XXXXX bytes exhausted (tried to allocate XXX bytes) in XXX\my_sql.php 

我的组件相同的数据库不同的查询。该网站有256M像内存限制。我知道我可以将内存增加到512MB,但还有其他方法吗?我如何理解我的组件使用了多少内存?

谢谢

回答

0

以下将向所有用户显示调试信息;因此您可能希望在开发机器上离线执行此操作(制作生产数据库的副本)。

在配置中启用调试,然后打开Extensions-Plugins并启用Debug插件;现在重新加载前端,你会看到时间,内存和查询的完整列表(你应该看到类似下面的截图,点击标题打开它们。如果你没有看到它,暂时设置其中一个你的网站的默认模板(让模板设计者知道他忘了包含调试占位符)

你用尽的内存量是php的,所以你很可能在内存中保留了太多东西。结果集,进行新的查询以及将结果缓存到对象中,这可能是原因,并且您可以通过在主查询中一次迭代更少的记录来快速解决它(这确实是一个肮脏的解决方案,但没有其他更改通常需要)

一个快速的方法是造成问题

您就可以开始记录与memory_get_usage()你的记忆,不久你应该能够指出(希望单),点它生长失控的部分隔离开来。然后应用上述建议来解决它。

joomla debug info

+0

这个扩展已经是活动的,但我没有看到时间,内存等... – lucacatr

+0

确保你在站点全局配置中启用调试:你应该看到类似我附在主帖 –

+0

的图片我会检查... – lucacatr

0

也许你正在处理大量的数据。启用Riccardo指示的调试控制台来测试您的查询。请检查您是否正在使用array_push或类似函数来投射大量数据。您也可以使用Xdebug来查看代码瓶颈的位置。你可以在这里找到一个指南来设置它Xdebug

+0

是的,我也使用array_push。 array_push有没有其他选择? – lucacatr

+0

如果您想要将多个值添加到数组中,那么只需使用array_push,或者使用$ array [] =更快地添加一个值。 –