如何使用New Relic找到WordPress性能瓶颈

New Relic APM是一个强大的工具,可以深入了解WordPress网站的内部工作原理,以查明插件、主题模板文件、数据库查询、外部调用或导致客户网站性能问题的编码错误。

然而,让New Relic运行只是一个开始。如果您从未使用过New Relic APM(即使您使用过),您可能很难充分利用这个强大的工具。在本教程中,我们将向您展示如何使用New Relic APM来诊断和修复WordPress站点上的性能问题。

New Relic APM概览

New Relic APM

New Relic APM

那么什么是New Relic APM?就我们的目的而言,以下定义适合:

New Relic APM是一个Web应用程序,可提供有关WordPress站点性能的详细信息。

您可以通过向PHP添加扩展来安装New Relic 。该扩展程序侦听PHP处理的每个请求,然后将该信息发送回New Relic仪表板。然后,New Relic将该信息组织成一系列图表和图形,您可以使用它们来诊断网站的性能问题。需要注意的是,HHVM不支持New Relic。

让我们快速浏览一下New Relic的主要数据可视化。

概述

New Relic APM概述

New Relic APM概述

概览提供了网站整体性能的快速快照。您不会从该屏幕诊断特定问题,但显示PHP、MySQL和外部调用如何协同工作的便捷编译可以为您指明正确的方向。

了解有关APM概述页面的更多信息

事务

New Relic Transactions选项卡

New Relic Transactions选项卡

事务(Transactions)选项卡是New Relic中最有用的选项卡。

学会喜欢事务选项卡,您将能够深入了解缓慢的事务,以识别数据库调用、外部资源或降低站点速度的代码瓶颈。事务视图中特别有趣的是慢Transactions列表。要查看列表,请向下滚动到事务选项卡的底部,然后查看页面的右下方。

New Relic Transactions跟踪

New Relic Transactions跟踪

在这里,您将找到New Relic捕获的最慢事务的列表。我们现在不会在此部分上花费更多时间,但稍后我们将解释如何使用此部分来诊断您网站的问题。

了解有关New Relic APM事务页面的更多信息

WordPress钩子

WordPress钩子

WordPress钩子

WordPress挂钩选项卡提供了通过WordPress操作挂钩触发的所有PHP函数消耗的时间的可视化。此信息对有经验的开发人员很有用,他们可以使用这些信息从重载的钩子中逆向工作,以识别由钩子触发的函数。

WordPress插件和主题

WordPress插件和主题

WordPress插件和主题

WordPress插件和主题选项卡显示插件和活动主题消耗了多少PHP处理时间。如果单个插件或您的站点主题消耗了大量时间,此页面可以帮助您快速找到导致问题的插件或主题。

需要注意的是:New Relic中的WordPress插件和主题选项卡最容易被滥用。

在调查网站性能问题时,很容易默认首先检查此选项卡,然后简单地停用最耗时的插件。然而,这样做是忽略了在New Relic其他地方发现的有价值的信息。这类似于治疗症状,而不是挖掘并找到根本原因。

由于错误配置问题,插件可能运行缓慢,例如由于使用了不正确的SMTP端口号,成员资格管理插件运行缓慢。或者插件可能没有被正确卸载。这是您可能通过在“事务”选项卡中钻取缓慢交易获得的信息类型,并且您永远无法通过简单地停用New Relic报告的最慢的插件来解决问题。

因此,请熟悉此选项卡,但不要排除New Relic提供的其余信息。

数据库

New Relic MySQL概述

New Relic MySQL概述

数据库选项卡,您可以识别的查询占用了大部分时间的数据库表和类型。New Relic将此信息与进行这些查询的事务联系起来。您可以使用此信息来识别可能需要优化的数据库表和对数据库施加过大负载的模板文件。

外部服务

New Relic外部服务

New Relic外部服务

大多数WordPress网站依赖于许多外部服务:

  • 插件、主题和核心更新由wordpress.org以及插件和主题开发人员提供。
  • 许多插件与第三方API集成,例如WPMU DEV的Smush图像优化插件(来自上面截图的smushpro.wpmudev.org)。
  • 聊天插件通常由外部服务提供支持。
  • 许多站点都与社交媒体平台集成,以便在这些网络上共享内容时实现最佳呈现和性能。

当这些外部服务中的任何一个停止及时响应时,它可能会使您的整个网站崩溃。

外部服务选项卡可以让你快速查看哪些外部服务占用了大部分的时间。然后,您可以使用该信息来确定是速度问题(服务响应缓慢)还是数量问题(对外部源的调用过多),并努力解决问题。

错误分析

New Relic错误分析

New Relic错误分析

错误分析选项卡报告同时加载你的WordPress网站遇到的PHP错误。错误按类别分组,以便您可以快速查看正在生成多少不同类型的错误。错误还与产生错误的实际事务相关联。如果您选择特定错误,您还可以看到生成错误的事务的完整堆栈跟踪。

将错误分析视为组织得更好的PHP错误日志。当试图追踪产生PHP错误的文件和发生这些错误的事务时,它可以证明是无价的。

调试加载缓慢的页面

我们使用New Relic进行调试的最常见问题是特定页面或进程加载时间过长的情况。发生这种情况时,New Relic APM中的事务选项卡几乎肯定是第一个去的地方。

您需要遵循的过程来诊断加载缓慢的页面非常简单:

  1. 复制缓慢的事务。
  2. 在New Relic的慢事务列表中找到该事务。
  3. 查看事务摘要和跟踪详细信息以确定性能下降的原因。

让我们看一个例子,以及如何使用New Relic来诊断问题。

第1步:复制事务

让我们看一个例子。在这个例子中,我们的客户端在每次加载单个博客文章时都会看到加载缓慢。所有其他页面正常加载,但个别文章需要几秒钟才能加载。

所以第一步是复制问题。在这种情况下,这意味着访问单个博客文章几次以确保New Relic捕获必要的日期。

第2步:找到慢事务

多次复制慢速事务后,前往New Relic并选择Transactions选项卡。然后向下滚动,直到您在New Relic仪表板的右下方看到慢事务列表。

New Relic事务缓慢

New Relic事务缓慢

单击您正在调试的事务以查看详细信息。

第3步:查看事务摘要和跟踪详细信息

选择事务后,将显示事务摘要。

慢事务总结

慢事务总结

通过摘要,您可以查看对事务处理时间有贡献的组件的快照概览。在我们的示例事务中,对外部资源www.googleapis.com的调用负责5,000毫秒的事务,该事务总共需要5,350毫秒才能完成。

虽然这是有用的信息,但跟踪详细信息选项卡将提供我们需要准确了解正在发生的事情的详细信息。

慢事务跟踪详细信息

慢事务跟踪详细信息

跟踪详细信息选项卡提供了一个分层的分步瀑布图,显示了PHP在生成页面时处理的函数、数据库查询和外部调用。

在我们的示例事务中,跟踪详细信息显示对Google分析URL的调用是阻止该过程的原因。如果我们从那个请求向后工作,它会启动一个名为gapp_get_post_pageviews的PHP函数。对该交易的快速Google搜索显示它是Google Analytics Post Pageviews插件的一部分。该插件安装在站点上,用于向粘性标题栏添加查看计数器。

New Relic刚刚允许我们将粘性标题栏中的查看计数器隔离为主要组件,导致在相关站点上缓慢加载单个博客文章。现在,该站点的所有者确切地知道在尝试解决单个博客文章加载缓慢的问题时要针对哪个组件。

修复整体缓慢

我们为客户排查的第二种最常见的问题是抱怨整个网站加载缓慢。当每个事务都需要大量时间来加载时,可能会发生以下三件事之一:

  • 该站点缺乏服务器资源。
  • 插件或活动主题导致问题。
  • 站点数据库正在努力跟上查询速度。

站点缺乏CPU或RAM,这可能会导致整体缓慢,New Relic不会固定在任何单个资源上。因此,如果您确实看到整体缓慢并且New Relic表明站点的每个部分都在做出贡献,请检查服务器上的负载,看看是否是服务器资源短缺造成的。

如果您的站点可以访问大量服务器资源,那么您需要检查以诊断整体缓慢的下一个位置包括WordPress插件和主题选项卡、外部服务选项卡和数据库选项卡。

以下是可以使用这些选项卡中的每一个进行诊断的整体缓慢的示例。

插件导致的整体缓慢

当插件导致整体缓慢时,症状会根据插件执行的活动而有所不同。但是,在许多情况下,您会发现一个缓慢的插件会影响WordPress网站的每个页面。对于您在下图中看到的数据的站点,在站点的每个前端页面上都观察到整体缓慢。

以下是New Relic对网站插件性能的评价。

WordPress插件

WordPress插件

您可以立即看到adinjector插件消耗的时间是下一个最慢插件的15倍。

当您看到这样的数据时,您可能会立即认为该插件编码不当或无效。虽然有时是这种情况,但并非总是如此。插件配置错误、数据库缓慢或响应缓慢的外部资源可能会导致插件消耗大量时间。

因此,当您看到响应缓慢的插件时,最好检查New Relic中的其他几个屏幕以查找其他信息。在决定停用插件是最好的还是唯一的方法之前,应该检查事务、数据库和外部资源。

外部服务造成的整体缓慢

如果网站依赖于对外部服务的调用来生成页面浏览量,并且该服务停止响应或需要很长时间才能响应,则结果可能是WordPress网站完全停止加载。

前5名外部服务

前5名外部服务

上面的图片来自制作上面的慢速插件屏幕截图的同一站点。如您所见,有一个外部服务占等待外部服务所花费的总时间过大。

这个案例说明了为什么在得出结论之前需要结合查看信息。在这种情况下被调用的服务是在最后一步中确定的插件的开发者。

此信息为情况增加了一些细微差别。据说,问题不是插件的代码。相反,看起来该插件对开发人员的网站进行了大量调用,而这些调用结合起来考虑会消耗大量处理时间。

如果我们更进一步并查看此站点的缓慢事务,我们可以看到此外部调用似乎正在检查相关插件的许可证状态,这表明此特定插件的许可证可能已过期.

无论如何,我们现在可以告知该站点的所有者,adinjector插件导致性能下降,而性能下降是由于反复调用开发人员的网站以检查插件的许可证状态。

数据库不堪重负导致整体缓慢

优化不当的数据库可能会导致WordPress网站的整体运行缓慢。我们始终推荐的一种优化是将您的数据库从MyISAM转换为InnoDB。在New Relic中,这种与数据库相关的缓慢很可能会出现在两个地方:

  • 首先,您将在概览中看到大量的MySQL活动。
  • 其次,您会在数据库选项卡中看到一个或多个数据库表占用了大量时间。

从概览屏幕开始,一个有困难数据库的站点可能看起来像这样:

网络事务耗时

网络事务耗时

要更好地处理导致问题的数据库表或查询,请前往数据库选项卡。

MySQL概述

MySQL概述

数据库选项卡将指出消耗最多时间的表和查询类型。如果您选择列表中的条目之一,您可以看到更多详细信息,包括一些示例查询。

慢查询 – wp_options表

慢查询 – wp_options表

在这种情况下,数据指向wp_options表中自动加载的数据。果然,对wp_options表的快速分析证实,从该表自动加载了近250MB的数据,使该站点成为数据库维护和优化的明显候选。查看我们关于如何优化wp_options表和自动加载数据的更深入的文章。

小结

一旦您知道如何使用它,New Relic就可以成为识别WordPress网站上PHP性能瓶颈的宝贵工具。要充分利用New Relic,了解WordPress、了解每个选项卡报告的信息并了解所有信息之间的相互关系至关重要。