用新的遗物调试Magento表现

今年早些时候,新的遗物通过达丹德罗蒙特张贴了一块玛托托开发商at.大胆的商业, 上面对玛格托与新遗物。该职位介绍了将新遗物集成到Magento服务器中的好处。这篇文章将扩展这个想法,更多的是一种技术方法。

我们不会解释如何在服务器中安装新的遗物,因为这完全覆盖文件。只需确保使用最新版本的新遗物PHP代理。我们还假设您已经拥有一个完全工作的服务器,您的Magento网站已启动并运行。为了让事情简单,我们将使用Magento的vanilla安装加上公开的样品数据。如果您需要帮助,请查看此Magento帖子安装和配置示例数据。当然,您还需要一个新的遗物帐户 - 您可以通过注册来获得自由的新遗物标准帐户这里

我创建了一个(假)magento模块来陪同本文。如果您想在查看代码时逐步遵循这篇文章,可以在github找到它。该模块创建了一个可以插入任何CMS页面或静态块的Magento窗口小部件。它显示了一个列表,其中包含标有自定义属性“特色”标记的所有产品的链接亚博最新版直播。必须在测试模块之前创建并分配给某些产品的自定义属性。亚博最新版直播

示例场景

好的,所以你安装了新的遗物,您的网站正在运行!但是,您要求开发人员创建一个小部件,显示标有自定义属性“特色”的产品。亚博最新版直播一个地方,您希望该小部件位于网站的页脚。开发人员实现了该功能,但由于某种原因,整个网站现在比以前更长的负载。

如果您已经与Magento合作了一段时间,特别是如果您接管了最初由开发人员制造的项目,那么Magento认证,您可能已经遇到过类似的情况。

新遗物救援

你要做的第一件事就是安装yireo新遗物模块。此模块负责整合新遗物的一些更高级功能,并使您更容易获得适当的故障,以便在您的网站上发生的情况。

安装模块后,请转至系统>配置>高级>新遗物并输入您的申请名称(例如,演示商店),新的遗物许可证密钥,并决定是否需要新的遗物浏览器(以前称为真实的用户监测或朗姆酒)。我们不会进入新的遗物浏览器是什么或如何在本文中使用它,以便您现在可以将其禁用。保存更改。

现在去你网站的前端。开始浏览。几分钟后,您应该在“应用程序”选项卡下,查看新的遗物帐户中显示“演示商店”应用程序。点击到它以查看更多详细信息。有关应用程序概述页面的示例,请参阅下面的示例,以便在使用流量30分钟后击中站点的示例:

玛托托1

配置新的遗物应用程序设置

此时您可能希望通过单击新的遗物应用程序中的“设置”选项卡来查看应用程序设置。

更具体地说,查看“APDEX T”值,该值定义了三个阈值(“满意度”层),用于您的应用服务器的响应时间。(将鼠标悬停在问号上的问题标记以进行简要说明,或参考这个链接对于文档。)更改字段的值也将更新工具提示,这对于可视化您的不同满意度是有用的。

由于我们希望新的遗物才能记录超过两秒钟的事务(“令人沮丧的”阈值),因此确保APDEX T值设置为0.5。您还可以配置新遗物的阈值为日志追踪,但我们会在默认值下保留该阈值。

Magento 2.

调试绩效问题

返回我们的示例场景。以下是在服务器中安装模块后,“演示商店”应用程序概述页面的样子

玛托托3.

注意曲线如何突然飙升?两条曲线都有3,000毫米总增加,看起来很多时间都在洋养仓而不是数据库中花费。

关于全页缓存的注意事项:值得一提的是,必须禁用全页缓存和块缓存,以确保对此有限场景中的影响 - 否则只有在每个第一页加载时都会有效。禁用缓存还可以帮助您在新的遗物中看到与通常通常的速度更快的相关性能信息。

调试交易

由于新模块使服务器响应时间高于由应用程序的APDEX T值定义的两秒“令人沮丧”阈值,所以新的遗物将自动开始记录这些事务。您将在许多地方看到它们:

  • 监测>概述:您将在“事务”标题下,找到最后几个慢速事务及其迹线,右下方。
  • 监控>交易:这是一个更详细的观点更多的交易。您可以按不同的参数对它们进行排序,并打开它们以查看更多详细信息。

在这种情况下,我们将去监控>交易选项卡,如下所示:

Magento 4.

在这里,我们还可以欣赏在14:50的时间标记之前稍微开始的性能。这是关于模块在服务器中激活的时间。我们可以看到“/ CMS / PAGE / VIEW”路由突然需要两次以上的挂钟时间。这是因为要创建此屏幕截图,我将对单个CMS页面生成流量(使用围城或者博泽数)。但是,如果您对所有页面生成流量,则会在同一时间内看到所有曲线的增加。

要继续我们的调试过程,我们将研究最耗时的交易,这是列表中的第一个。因为我们将代码添加到页面的页脚,所以您打开的是哪个事务并不重要(只要它不是管理区域):所有前端页面都被速度放慢了爬行!在仅受影响特定页面的情况下,打开与该页面的位置对应的事务。

单击事务以查看更多详细信息,将打开叠加层:

玛托托5.

在交易详细信息叠加层中,我们可以更清楚地看到对性能的影响。我们还获得了最慢的表演“细分”的细分。最后(在这个屏幕截图中不可见),有一个事务列表“追踪”,在这样的情况下非常有用。

钻井:交易痕迹

痕迹可以说是新遗物最重要的特征之一。(有关它们的更多信息以及如何使用它们可以参考交易跟踪文档。)

此时,您应该看到一些慢速迹线。如果有任何具有令人难以置信的高持续时间(例如49秒),您现在可以忽略它们,它们是奇数的(你可能一直在击中服务器,而不是可以处理的流量更多)。在2-8秒的范围内打开迹线,以便在跟踪上钻取概述标签:

玛托托6.

屏幕截图有关最慢的组件表显示一些有用的信息:

  • 属于mage_eav和mage_core类的几个函数被调用120次。EAV课程叫做这么多次大概意味着将有很多数据库调用。
  • 我们还可以看到至少两个调用120次的数据库查询。这证实了我们从前一项的理论。
  • 这不是巧合:在我的数据库中,有120个标记为“特色”的产品,并通过新模块显示。亚博最新版直播

你可以看到这一点上的发生了什么,但在跳到结论之前让我们走深入了解SQL陈述此跟踪中的标签。

Magento 7.

SQL陈述选项卡清楚地显示了没有两个但是七个查询左右执行了120次(您可以根据标记为“特色”的产品数量)。亚博最新版直播

发生了什么清晰:有缺陷的模块正在装载产品亚博最新版直播n + 1查询循环。换句话说:它为标记为“特色”的每个产品的数据库调用 - 有120个产品!亚博最新版直播

找到这个错误

找到导致此问题的代码可能并不像该过程的其余部分那么容易,但是一个好的开发人员应该使用适当的工具在15分钟内发现它。在我们的情况下,这是造成麻烦的代码:

/ ** *生成链接列表* @return字符串* / protected函数_tohtml(){$ collection = $ this  - > _ getCollection();/ *请参阅下一个代码块,以查看_getCollection()* / $ count = $ collection-> count()的代码;/ *(等...)* / foreach($ Collection AS $ Product){/ ** @Var MAGE_CATALOG_MODEL_PRODUCUC $商品* / / *注意:这样做是一个很大的错误!开发人员必须单独加载每个产品*,因为Magento不会从数据库中提取产品名称,并通过产品模型提供URL重写功能*除非*在加载* / $ Product = Mage :: GetModel之前正确配置了集合。('目录/产品') - >负载($ Product-> GetID());//(etc ...)} //(etc ...)}

Inside $以下$此 - > _ getCollection()我们可以看到集合设置为仅返回具有标记为“true”的“特色”属性的产品:亚博最新版直播

$ collection = mage ::getresourcoreingleron.('目录/ product_collection');$ Collection-> AddAttributeTofilter('特色',阵列('eq' => 1));

解决问题

这种共同的表现反attern.可以解决渴望装载进入循环之前的产品信息。由于我们的模块显示了产品名称列表及其URL,因此我们只需要急于加载这两个属性。在Magento非常容易:

// optimized version $collection->clear() // don’t load default data ->addAttributeToFilter('featured', array('eq' => 1)) ->addAttributeToSelect('name') // eager-load names ->addUrlRewrite(); // eager-load product URLs

一旦到位,我们就可以安全地删除循环中加载产品信息的行:

Foreach($ Collection AS $ Product){/ ** @var mage_catalog_model_product $ product * / //邪恶的线已被删除!// (等等 ...) }

最后,现在我们做出了一些更改,让我们看看是否通过检查新的遗物应用程序概览页面来恢复性能:

Magento 8.

由于新的遗物,我们已经快速识别和有效地修复了一个巨大的性能错误,这些错误将在每个页面上减速三秒钟。像这样的延误可能导致电子商务运营失去大量销售和客户,因为他们放弃了挫折感。

客人作者Gabriel Somoza.是业务总监策略,专注于建立高质量的电子商务商店和Web应用程序。他也是一个Magento认证开发人员(加)A.Zend PHP 5经认证的工程师

这篇文章是由客户贡献者编写的。请参阅上面帖子顶部的传记细节。查看帖子

对新遗物博客的写作有兴趣吗?亚搏体育登入网送我们一个球场!!