如何对网站进行性能分析?

6
我目前拥有一个 django 网站,但速度有点慢,因此我想了解到底是怎么回事。我该如何进行分析以区分以下问题的影响:
  • 网络效应
  • 使用的主机效应
  • Javascript 效果
  • 服务器端执行(Python 代码)和 SQL 访问效果。
  • 由于今晚头痛得厉害,我可能没有考虑到的其他效果。
当然,对于其中一些问题,我可以使用 Firebug 进行分析,但某些效果是相关的(例如,JavaScript 可能会看起来很慢,因为它正在进行缓慢的网络访问)。
谢谢。
4个回答

5

客户端:

  • 使用Firebug检查哪些页面组件需要较长时间加载,以及浏览器在加载完成后需要多长时间来呈现页面。如果一切都很快但呈现需要时间,则可能是您的html/css/js有问题,否则可能是服务器端的问题。

服务器端(我假设您使用某个类Unix服务器):

  • 使用Apache Bench(ab,Apache Web服务器包的一部分)或httperf检查具有小静态内容(小gif或小html页面)的Web服务器,服务器应能够每秒至少回答100个请求(当然,这严重取决于您的测试内容大小,Web服务器类型,硬件和其他因素,因此不要过分关注100)。如果看起来不错,

  • 在“静态视图”上使用abhttperf测试Django(不使用数据库对象的视图),如果速度慢,则表明需要更多CPU功率。使用top检查服务器上的CPU利用率。如果没问题,则问题可能在Web服务器执行Python代码的方式上

  • 如果提供半静态内容可以,那么您的问题可能是数据库或IO绑定。数据库问题是一个广泛的领域,这里是一些一般建议:

    • 使用iostat检查I/O吞吐量。如果看到大量写入,则必须获得更好的磁盘子系统,更快的RAID,SSD硬盘驱动器..或者优化应用程序以减少写入。
    • 如果是许多读取,则主机可能没有足够的RAM专用于文件系统缓冲区,或者您的数据库查询可能未经过优化
    • 如果I/O看起来没问题,则数据库可能不适合您的工作负载或未正确配置。记录慢查询并监视数据库活动、锁等可能会给您一些想法
如果您告诉我们您使用的硬件/软件,我可能能够给出更详细的建议。
编辑/附言:忘记了一件事:当然,您的应用程序可能具有糟糕的设计并且执行许多不必要/低效的操作...

3
看看Django调试工具栏 - 这将帮助您处理服务器端代码(例如,运行了哪些数据库查询以及它们花费了多长时间); 并且通常是Django开发的绝佳资源。
您可以使用YSlow来分析其他非Django特定的部分。

当然,你应该在实际运行的网站上进行这种性能分析,因为通常真实数据都存在于那里,但我也认为这样做不太安全...标准解决方案是什么呢?通过发送虚假查询(我记得有一个工具可以做到)来检测网站吗? - Stefano Borini
你不需要在实际网站上使用django-debug-toolbar,但是你可能想在实际网站上运行yslow。我在开发服务器上使用django-debug-toolbar。不要用它来计算绝对数值(x花费y秒),而是用于查询等相对时间的计时。它对于确定特定视图是否发出了比必要更多的数据库查询非常有帮助。 - Dominic Rodger

1

有各种各样的工具,但像这样的问题并不难找,因为它们很大。

你有一个问题,当你解决它时,你会体验到加速。假设加速是某个因素,比如2x。这意味着程序花费50%的时间等待缓慢的部分。我所做的就是停止它几次,看看它在等待什么。在这种情况下,我会在停止它的50%的时间里看到问题。

首先,我会在客户端上这样做。如果我看到50%的时间都花在等待服务器上,那么我会尝试在服务器端停止它。然后,如果我看到它正在等待SQL查询,我可以查看这些查询。

我几乎可以确定会发现请求的工作量比实际需要的要多。通常不是像“热点”或“算法”这样的玄学东西。通常是一些愚蠢的事情,比如进行多个查询,而只需要一个查询就足够了,以避免编写保存第一个查询结果的代码。

这里有一个例子。


0
首先,确保您知道哪些页面速度较慢。您可能会感到惊讶。我建议使用django_dumpslow

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