ExpressionEngine模板中的高内存使用率

5
我在一个ExpressionEngine v2.5.3安装中遇到了高内存使用率的问题。如果这是最近进行的EE1 - EE2升级,则可能会有所不同。
该项目的空模板使用10MB内存,而我在另一个v2.5.3项目上测试,那里的空页面仅使用2MB内存。在常规模板上,我看到30+MB的使用情况,并且经常出现浏览器失去与服务器的连接。
是插件导致此增加的内存使用吗?追踪回溯的最佳方法是什么?
在此升级后,该安装肯定会出现问题。
模板调试
(0.000011 / 9.01MB) - Begin Template Processing -
(0.000172 / 9.01MB) URI: test
(0.000185 / 9.01MB) Path.php Template: /
(0.000199 / 9.01MB) Retrieving Template
(0.000210 / 9.01MB) Parsing Template URI
(0.002112 / 9.02MB) Template Group Found: test
(0.002166 / 9.02MB) Retrieving Template from Database: test/index
(0.003599 / 9.02MB) Template Found
(0.003690 / 9.02MB) Template Type: webpage
(0.003711 / 9.02MB) Parsing Site Variables
(0.003767 / 9.02MB) Snippets (Keys): structure:is:page|structure:is:listing|structure:is:listing:parent|structure:page:entry_id|structure:page:template_id|structure:page:title|structure:page:slug|structure:page:uri|structure:page:url|structure:page:channel|structure:page:channel_short_name|structure:parent:entry_id|structure:parent:title|structure:parent:slug|structure:parent:uri|structure:parent:url|structure:parent:child_ids|structure:parent:channel|structure:parent:channel_short_name|structure:top:entry_id|structure:top:title|structure:top:slug|structure:top:uri|structure:top:url|structure:child_listing:channel_id|structure:child_listing:short_name|structure:freebie:entry_id|structure:child_ids|structure:sibling_ids|structure_1|structure_2|structure_3|structure_4|structure_5|structure_6|structure_7|structure_8|structure_9|structure_10|structure_last_segment|site_id|site_label|site_short_name|last_segment
(0.003784 / 9.02MB) Snippets (Values): FALSE||||||||||||||||||||||test|/test/|/test/||||||test||||||||||test|1|Ranch|default_site|test
(0.003926 / 9.02MB) Parse Date Format String Constants
(0.003943 / 9.02MB) Parse Current Time Variables
(0.003968 / 9.02MB) Parsing Segment, Embed, and Global Vars Conditionals
(0.007698 / 9.11MB) - Beginning Tag Processing -
(0.007719 / 9.11MB) - End Tag Processing -
(0.008645 / 9.12MB) Calling Extension Class/Method: Structure_ext/template_post_parse
(0.008789 / 9.11MB) - End Template Processing -
(0.008803 / 9.11MB) Parse Global Variables
(0.009574 / 9.11MB) Template Parsing Finished
Memory Usage: 10,163,144 bytes

如果您禁用扩展,这个空模板的内存使用情况会发生什么变化? - Alex Kendrick
禁用扩展程序可将内存使用量降至7.5MB。 - Anna_MediaGirl
4个回答

9

不同版本的php,以及不同实现php的方式,例如mod_php与fastcgi,再加上php本身启用的不同功能,都可能导致不同级别的内存使用。

为了测试仅执行php而不是在EE模板引擎中的内存使用情况,请尝试下面的代码。

<?php
    function echo_memory_usage() {
        $mem_usage = memory_get_usage(true);

        if ($mem_usage < 1024)
            echo $mem_usage." bytes";
        elseif ($mem_usage < 1048576)
            echo round($mem_usage/1024,2)." kilobytes";
        else
            echo round($mem_usage/1048576,2)." megabytes";

        echo "<br/>";
    }
?>

当在普通的PHP文件中时,256千字节会被打印出来。 - Anna_MediaGirl
在EE模板中打印出的是9.25兆字节。 - Anna_MediaGirl
就此而言,我刚在本地MAMP服务器上运行了几个测试,使用了一个几乎原始的EE安装和一个空模板。当APC(opcode缓存)被禁用时,模板调试器输出与您的几乎完全相同,约为9MB。启用APC后,在初始请求后它会降至2MB。您是否在此服务器上运行其他站点?它们的性能是否明显更好?如果没有,我认为您需要查看服务器而不是EE。 - Dom Stubbs
很遗憾,此主机上没有其他网站。非常奇怪的是,您在另一个安装中看到9MB而我在同一版本的另一个安装中看到2MB。 - Anna_MediaGirl
“在普通模板上看到30+MB的使用量” - 当然,这会因为那些模板中的插件和其他因素而有所不同...以及“浏览器经常失去与服务器的连接”听起来似乎与这个内存使用量无关,更多地与您用于此网站的网络主机有关。 - Nevin Lyne
显示剩余3条评论

3

3
从一个空模板开始,开启模板调试是很好的起点,并消除了标签导致内存使用过高的可能性。
你的两个2MB使用安装和当前的10MB使用安装之间是否有任何不同的设置或附加组件?如果排除模板标签作为原因,您可能需要查看可能增加开销的附加组件,特别是扩展。随时在此处发布已安装的插件。
此外,禁用跟踪和将模板保存为文件可能会节省一些内存。

这个10MB的内存使用是从一个空模板中来的。是的,这个安装版本和2MB的不同...完全不同的站点但是相同的EE版本。跟踪已关闭。不保存为模板。在空白模板中唯一被调用的插件是Structure。我可以在查询中看到这一点。 - Anna_MediaGirl
你能否作为一个测试,复制数据库,删除结构,然后尝试加载一个空白模板,看看有什么区别吗? - Tyssen

2

看起来我的问题的答案是,在EE安装中,~9MB是一个空白模板的正常起点。

2MB起始的模板位于EngineHosting VPS/VSC帐户上,启用了APC字节码缓存,因此数字有所不同。


有趣...我的空白模板在Clook.net托管,大小为4.6MB。 - James Smith
那台服务器上是否启用了“APC字节码缓存”或类似的功能? - Anna_MediaGirl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接