使用ZfDebug实现Zend Framework内存使用

时间:2012-06-08 23:08:48

标签: zend-framework caching optimization doctrine doctrine-orm

在我的应用程序开发中,我们安装了ZFDebug。它在工具栏中显示基准测试结果,如加载时间和内存使用情况,我发现这非常有用。

平均而言,我的应用程序使用大约19000k的内存。

该应用程序使用Doctrine 2和DQL创建配置文件和主页Feed结果。填充结果后,内存使用量可能会达到22000k内存。

该应用程序还具有加载资源的复杂模块化结构,例如javascript库和使用插件的其他外部库。

就目前而言,我们还没有实现Zend_Cache进行优化。

我对如何使用这些基准测试结果进行应用程序优化感到有些困惑。我怎么判断内存使用是否可以接受?例如,典型的zend框架应用程序内存使用情况是什么?

1 个答案:

答案 0 :(得分:1)

好日子过得好。这也是我的问题。

我从2007年开始使用ZF。内存使用始终是ZF的一个问题。对于ZF中的简单MVC,16-17M是“正常的”。如果你添加Doctrine,它就会达到20M - 就像你说的那样。

首先,在您的服务器上安装APC。这是最重要的事情,因为它甚至可以在默认设置中加速所有内容。测量页面加载时间。在APC之后,您将至少获得30%的表现。

之后使用带有APC后端的Zend_Cache。 Doctrine允许缓存查询,结果和水合作用。也可以将它们与APC一起使用。

我看到你正在使用ZFDebug。 Profile Doctrine也可以查询和优化它们。适当时添加索引。

我总是处于“可管理性而不是性能”方面。是的,ZF很慢。是的,Doctrine让它变慢了。但是我的项目大小需要使用框架和ORM以及依赖注入容器ETC.所有这些都使我有能力快速开发项目。

我是Gazi University web page的开发者。自去年以来,我试图将静态网页转换为我们所有学术和行政单位的CMS。例如,iibf.gazi.edu.trbidb.gazi.edu.tr使用相同的模板,相同的CMS和相同的数据库,但所有网站都有自己的子域。

哦,男孩,网站“活着”的那一天我快要死了。页面加载时间为15秒。 15秒谷歌网站管理员工具说,我比整个互联网慢。每个人都有超时。 VM的所有核心都以100%的速度运行。我甚至无法通过SSH进入机器!

页面上的每一个部分都可以通过CMS管理界面进行控制(如果您可以登录管理区域:D)。顶部的蓝色菜单?来自CMS。新闻?来自CMS。公告?来自CMS。快速链接区域?来自CMS。带图标的快速链接?来自CMS。即使是twitter / facebook / youtube链接也来自数据库,因为每个部门的链接都不同。

真正奇怪的部分?我正在使用缓存!我正在缓存我在前一段中计算的每个部分。

现在? Google Analytics网站速度图表在1.5秒内持平。谷歌网站管理员工具说,我比互联网上91%的网站更快。该网站每天有6万人次访问。

以下是您可以执行的一些操作的列表。但是不要马上做所有事情。做一件事。衡量新指标并进行迭代:

  1. 描述您的页面。查看哪些代码会降低页面速度。使用Xdebug和CacheGrind。例如,如果您使用Zend View partials ...就是不要使用它。使用$ this-> render()。但是在你测量之前你无法知道是什么阻碍了你。做剖析!

  2. 使用操作码缓存。正如我所说APC对操作码缓存很酷。优化它。例如,禁用apc.stat设置,它会加快速度。 (stat检查文件是否因为第一次缓存而被更改,但它需要磁盘搜索并减慢速度。如果禁用此设置,事情会加快。但是你必须在更改PHP文件后重启PHP)

  3. 数据库是另一个缓慢的事情。缓存结果集。没有人关心插入数据库后新闻项目是否延迟1分钟。相信我,即使1分钟的缓存也会有所不同。

  4. 使用CDN或至少配置您的网络服务器为静态内容设置过期时间+ 1年。并从静态内容中删除会话ID。静态内容需要+1年。做吧。例如,我们有一个620x327 jpg横幅,它是我们总页面重量的%20。

  5. 了解网络堆栈的设置。配置MySQL,Apache,PHP,PHP-FPM,Apache,Nginx或任何您使用的。但是改变一个设置时间并至少测试100次。某些设置在首次刷新时不会产生问题。

  6. 跟踪您的指标。使用strace,top,iostat,vmstat,htop等等。如果mysql始终使用CPU周期,则意味着您没有缓存查询结果。

  7. 删除未使用的模块:删除!#@ $ LDAP模块!你没有去使用它。如果你有一天需要使用它,那就是“apt-get”,“yun install”。

  8. 您的主页是最重要的事情。真实故事:我们的主页每月获得200万次观看。下一个访问量最大的页面只有420k。为您的主页使用“整页缓存”。但是不要忘记你不能使整页缓存无效,因为它是基于URL的,甚至不会触及你的MVC堆栈。正如我之前所说,将其缓存1分钟。即使1分钟也会对高流量网站产生巨大影响。

  9. 尽可能多地将工作推送到客户端的计算机上。 Google并不关心我们医学院实验室的620x327 px jpg。甚至我们的访客都不在乎。使用AJAX在页面加载后加载它们。

  10. 从我的经历中我记得这一切。