joomla 自定义组件内存使用情况

Posted

技术标签:

【中文标题】joomla 自定义组件内存使用情况【英文标题】:joomla custom component memory usage 【发布时间】:2018-01-06 01:29:49 【问题描述】:

我为我的 Joomla 网站编写了一个自定义组件。 该组件在 php 中,基于 MVC 范例。该组件可以工作,但在使用几个月后,在某些部分会出现以下消息:

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

快速隔离导致问题的部分

您可以使用memory_get_usage() 开始记录您的记忆,不久您应该能够指出它失控的(希望是单一的)点。然后应用上述建议进行修复。

【讨论】:

此扩展程序已经激活,但我没有看到时间、内存等... 确保在站点全局配置中也启用调试:您应该会看到类似于我附加到主帖的图像 好的,现在我已经调试好了。查看调试返回的所有信息,我没有看到任何奇怪的事情。似乎我也没有使用太多内存。有什么优化代码的想法吗? 是的,错误明显在386行。jk怎么知道?我和 lucacatr 都提出了一些选择,现在由你来决定你是如何浪费内存的。如果您还不能弄清楚,我只是在答案中添加了另一个建议【参考方案2】:

您可能正在处理大量数据。启用 Riccardo 指示的调试控制台以测试您的查询。还要检查您是否正在使用 array_push 或类似的函数来转换大量数据。你也可以使用 Xdebug 来查看代码的瓶颈在哪里。您可以在这里找到设置指南Xdebug

【讨论】:

是的,我也使用array_push。 array_push 有替代方案吗? 如果你想将多个值添加到数组中,只有使用array_push,否则使用$array[] = 只添加一个值会更快。

以上是关于joomla 自定义组件内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章

Joomla 自定义组件需要创建菜单

尝试在 Joomla 中使用自定义组件时找不到 404 组件

Joomla 自定义组件未找到 404 错误

如何使用引导程序设置自定义 joomla 组件的样式

未从自定义 joomla 组件调用自定义面包屑模块

Joomla 1.7 - 路由到自定义组件