我为Joomla网站编写了一个自定义组件。 该组件是在PHP中,基于MVC范例。该组件可以工作,但在使用几个月后,在某些部分会显示以下消息:
SELECT
DATEPART(HOUR, tnstime) AS START_HOUR,
DATEPART(HOUR, DATEADD(HOUR, 1, tnstime)) AS END_HOUR
STATUS,
COUNT(*)
FROM YOUR_TABLE
GROUP BY DATEPART(HOUR, tnstime),DATEPART(HOUR, DATEADD(HOUR, 1, tnstime)), STATUS
我的组件对数据库执行不同的查询。该网站有256M像内存限制。我知道我可以将内存增加到512MB,但还有其他方法吗?如何理解组件使用了多少内存?
由于
答案 0 :(得分:0)
以下内容将向所有用户显示调试信息;因此,您可能希望在开发计算机上脱机执行此操作(制作生产数据库的副本)。
在配置中启用调试,然后打开Extensions-Plugins并启用Debug插件;现在重新加载前端,你会看到时间,内存和完整的查询列表(你应该看到下面附带的截图,点击标题打开它们。如果你没有看到它,暂时设置其中一个您网站的默认模板(让模板设计人员知道他忘了包含调试占位符)。
你耗尽的内存量是php的,所以很可能你在内存中保留了太多东西。如果您正在迭代结果集,进行新查询以及将结果缓存到对象中,这可能就是原因,您可以通过在主查询上一次迭代更少的记录来快速解决它(确实是一个肮脏的解决方案,但通常不需要其他更改)
隔离导致问题的部分的快速方法
您可以使用memory_get_usage()
开始记录您的记忆,不久您就应该能够指出它失控的(希望是单一的)点。然后应用上述建议进行修复。
答案 1 :(得分:0)
可能你正在处理大量数据。启用Riccardo指示的调试控制台以测试您的查询。还要检查是否使用了array_push或类似的函数来转换大量数据。您还可以使用Xdebug查看代码瓶颈的位置。您可以在此处找到设置指南Xdebug