2009-11-07 26 views
6

我目前有一个django网站,它有点慢,所以我想了解发生了什么。我怎么可以分析它,以便区分之间:网络 我使用的服务器端执行的JavaScript 如何为网站执行分析?

  • 效果
  • 效果托管
  • 效果(Python代码的

    • 效果)和sql访问。
    • 任何其他影响我不考虑由于我今晚发生的大规模头痛。

    当然,对于他们中的一些,我可以使用Firebug,但有些效果是相关的

    感谢

  • 回答

    5

    客户端:

    • 检查与萤火虫是否有/哪个页面组件需要很长时间来加载和浏览器需要加载完成后呈现的页面多久。如果一切都很快,但渲染需要时间,那么可能你的html/css/js就是问题,否则就是服务器端。

    服务器端(我假设你坐在一些UNIX的一致好评服务器上):

    • 检查与小静内容的Web服务器(一个小GIF或少许的HTML页面),使用Apache工作台(ab,apache web服务器包的一部分)或httperf,服务器应该能够每秒响应至少100个请求(当然,这很大程度上取决于测试内容的大小,web服务器类型,硬件和其他东西,所以不要认真对待这100个)。如果这看起来不错,

    • 测试的Django与“静态视图” abhttperf(一个,这并不使用数据库对象),如果那是慢的,你需要更多的CPU功率的提示。用top检查服务器上的CPU利用率。如果可以,问题可能出在Web服务器执行python代码的方式

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

      • iostat检查I/O吞吐量。如果你看到很多的写入,那么你可以获得更好的光盘子系统,更快的RAID,SSD硬盘驱动器......或优化你的应用程序以减少写入。
      • 如果它的大量读取,主机可能没有足够的内存专用作为文件系统缓冲区,或者您的数据库查询可能未被优化
      • 如果I/O看起来不错,那么数据库可能不适合您工作量或未正确配置。登录慢查询和监控数据库活动,锁具等可能给你一些想法

    ,如果你让我们知道你用什么硬件/软件,我也许能够提供更多的建议

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

    3

    (因为它做缓慢的网络访问,例如JavaScript的可能出现慢)看看的Django debug toolbar - 这可以帮助您处理服务器端代码(例如,数据库查询运行的时间以及它们花费的时间);并且通常是Django开发的一个很好的资源。

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

    +0

    当然,您应该在实时网站上执行这种分析,因为它通常是真实数据的位置,但我也认为这不是特别安全......标准解决方案是什么?用假查询打网站(我记得有一个实用程序)? – 2009-11-07 14:26:35

    +0

    您不必在实时网站上执行django-debug-toolbar的内容,但您可能想在您的实时网站上运行yslow。我在开发服务器上使用了django-debug-toolbar。不要将它用于绝对数字('x'需要'y'秒),而是用于查询的相对时间等。这对于确定特定视图是否发出比需要的更多数据库查询特别有用。 – 2009-11-07 14:32:55

    1

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

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

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

    我几乎肯定会发现,正在请求的工作量比实际需要的要多。它通常不像“热点”或“算法”那样深奥。它通常是愚蠢的,就像在多次查询时进行多次查询,以避免必须编写代码来保存第一个查询的结果。

    Here's an example.

    0

    首先第一件事情;确保你知道哪些页面很慢。你可能会感到惊讶。我建议django_dumpslow