如何对网站进行分析?

时间:2009-11-07 14:13:27

标签: django profiling

我目前有一个django网站,它有点慢,所以我想了解发生了什么。我如何对其进行分析以区分:

  • 网络的影响
  • 主持人的效果我正在使用
  • javascript的效果
  • 服务器端执行(python代码)和sql访问的效果。
  • 由于我今晚碰巧遇到的巨大头痛,我没有考虑任何其他影响。

当然,对于其中一些我可以使用firebug,但是一些效果是相关的(例如,javascript可能看起来很慢,因为它正在进行慢速网络访问)

由于

4 个答案:

答案 0 :(得分:5)

客户方:

  • 检查firebug是否/需要多长时间加载页面组件,以及加载完成后浏览器需要多长时间呈现页面。如果一切都很快但渲染需要时间,那么可能你的html / css / js是问题,否则它就是服务器端。

服务器端(我假设你坐在一些类似unix的服务器上):

  • 使用小的静态内容(一个小的gif或一个小的html页面)检查Web服务器,使用apache bench(ab,apache webserver包的一部分)或httperf,服务器应该是能够每秒回答至少100个请求(当然这在很大程度上取决于你的测试内容,网络服务器类型,硬件和其他东西的大小,所以不要认真对待那100个)。如果看起来不错,

  • 在“静态视图”(不使用数据库对象的那个)上使用abhttperf测试django,如果那样慢,则暗示您需要更多的CPU功率。使用top检查服务器上的cpu利用率。如果没关系,问题可能在于Web服务器执行python代码的方式

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

    • 使用iostat检查i / o吞吐量。如果您看到很多写入,那么您可以获得更好的光盘子系统,更快的raid,SSD硬盘......或者优化您的应用程序以减少写入。
    • 如果有大量读取,主机可能没有足够的ram作为文件系统缓冲区,或者您的数据库查询可能未被优化
    • 如果i / o看起来没问题,那么数据库可能不适合您的工作负载或未正确配置。记录慢查询和监视数据库活动,锁等可能会给你一些想法

如果您告诉我们您使用的硬件/软件,我可能会提供更详细的建议

编辑/ PS:忘了一件事:当然你的应用程序可能设计不好并且做了许多不必要/低效的事情......

答案 1 :(得分:3)

查看Django debug toolbar - 这将帮助您了解服务器端代码(例如,运行的数据库查询以及它们花了多长时间);并且通常是Django开发的重要资源。

您可以使用yslow配置的其他非Django特定位。

答案 2 :(得分:1)

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

您遇到了问题,当您将其删除时,您将体验到加速。假设加速是某个因素,比如2x。这意味着该计划花费50%的时间等待缓慢的部分。我所做的只是停下几次,看看它在等什么。在这种情况下,我会在50%的时间内看到这个问题。

首先,我会在客户端执行此操作。如果我看到50%用于等待服务器,那么我会尝试在服务器端停止它。然后,如果我看到它正在等待SQL查询,我可以看看那些。

我几乎肯定会发现,要求的工作量比实际需要的还多。它通常不像“热点”或“算法”那样深奥。它通常是一种愚蠢的东西,比如在一个已经足够的情况下进行多次查询,以避免编写代码来保存第一个查询的结果。

Here's an example.

答案 3 :(得分:0)

首先要做的事情;确保你知道哪些页面很慢。你可能会感到惊讶。我推荐django_dumpslow