如何找出导致该服务器上的应用程序运行缓慢的原因?

如何找出导致该服务器上的应用程序运行缓慢的原因?

这不是典型的 serverfault 问题,但我没有主意,也不知道该去哪里。如果有更好的地方可以问这个问题,请在评论中告诉我。谢谢。


情况

我们有这个 Web 应用程序使用Zend 框架,因此运行PHPApache Web 服务器。 我们用MySQL用于数据存储和memcached用于对象缓存。

该应用程序具有非常独特的使用和加载模式。这是一款移动 Web 应用程序,每隔一小时,定时任务就会查看数据库,查找有信息等待或需要执行操作的用户,并将这些信息发送到(外部)通知服务器,通知服务器会将这些通知推送给他们。用户收到这些通知后,就会转到应用程序并使用它,但大部分时间都很短。一小时后,同样的事情又发生了。

问题

在过去的几周里,应用程序的使用量开始真正增长。在过去的几天里,我们遇到了非常高的负载和应用程序响应时间翻倍的情况在发送这些通知期间和之后(基本上是每小时一次)。服务器不会崩溃或停止响应请求,只是速度越来越慢,通常需要 20 分钟才能恢复 - 直到整点时同样的事情再次发生。

我们已经实施了广泛的监控(New Relic、collectd),但我无法找出问题所在;我找不到瓶颈。这就是你发挥作用的地方:

您能帮助我找出问题所在并告诉我怎样修复它吗?


附加信息

该服务器是 16 核 Intel Xeon(我认为是 8 核超线程)和 12GB RAM,运行 Ubuntu 10.04(Linux 3.2.4-20120307 x86_64)。Apache 是 2.2.x,PHP 是版本 5.3.2-1ubuntu4.11。

如果任何配置信息有助于分析问题,请发表评论,我会添加它。

图表

信息

收集

新遗物

(抱歉,这些图表是 GIF,而且不是同一时间段的,但我认为最重要的信息都在里面)

答案1

你好,很遗憾,很难立即找到解决方案,尤其是在没有系统管理员的情况下。话虽如此,我认为你至少可以(从长远来看)解决内存消耗大的 apache 问题 - 从你的遗留报告中可以看出 - 使用 nginx + apache + php 来大幅提高应用程序的速度,见 http://www.richweb.com/nginx或者直接在 Google 上搜索/询问您的系统管理员。当您使用 Zend 框架时,您可能还会考虑 Zend Serverhttp://www.zend.com/en/products/server/

抱歉,如果这些想法看起来有点笼统并且不能解决您的眼前问题,但从长远来看,这可以为您提供一个很好的解决方案。

另一个建议是,如果你的应用程序将来会扩展,你可以考虑测试在亚马逊 EC2 上相同的设置http://aws.amazon.com/ec2/ 这将为您带来诸多好处,例如:

  1. 可扩展性:您可以运行一个主实例并将其克隆到第二个实例,以便在有需要时随时运行(例如,某些实例很慢,您想查看第二个实例上是否相同),或者更好地使用两个实例和负载平衡。
  2. 克隆:使用传统服务器,克隆所有内容并在几分钟内启动并运行相当复杂。使用 EC2 你有这个优势;
  3. 简单:使用新的基于 EC2 Web 的界面,您将不需要系统管理员启动新实例并使用新 IP(可动态分配)对其进行测试。

这听起来可能是一个无法解决您的问题的随机建议,但从个人经验来看,有时随着业务的增长,扩展的可能性变得至关重要。

只有系统管理员才能为您提供即时帮助。如果您想聘请系统管理员,您可以考虑https://www.odesk.com但同样,您需要选择一家有良好反馈的可靠公司。如果您只是想要咨询,而不想让管理员进入您的服务器,我相信您可以找到几家价格非常合理的公司(每小时 20/30 美元)来为您提供一些反馈。

答案2

一般来说,Serverfault 不是您的外包 IT 咨询公司。我们旨在回答以下技术问题:具体的(因为他们得到回答)而且一般的(因为提供的答案可能对将来遇到同样问题的人有用,他们可能会在互联网上搜索他们的问题,并会找到你的问题,答案会对他们有所帮助)。不幸的是,你的问题在这两个方面都失败了。

我会给予你一定的赞誉,因为你至少提供了有用的诊断信息,这使你成为提出此类问题的前 1% 的人。然而,这并不能改变这样一个事实,即问题基本上是“帮我完成我的工作”,这相当粗鲁。

我唯一的有用对你来说,最好的答案是聘请顾问。根据你对问题的描述,我的预期是,你最终需要重新设计你的应用程序,可能涉及拆分 DB 读取从属并使用单独的机器来处理异步通知。我还想切换到实时工作队列,这样应用程序就不会需要浏览整个数据库,或者至少在数据库中配置一些索引和/或重新处理查询以使该信息的检索更有效率。 称职的顾问应该能够通过性能指标和代码及系统操作检查来分析您的情况,并提供建议和实施帮助。 我为一家托管公司工作,该公司将所有这些服务作为我们支持包的一部分提供,但只针对由我们托管的客户,因此我自己无法承担这些临时工作(除非您想更换托管服务...)

相关内容