我目前有一个django网站,它有点慢,所以我想了解发生了什么。我怎么可以分析它,以便区分之间:网络 我使用的服务器端执行的JavaScript 如何为网站执行分析?
- 效果)和sql访问。
- 任何其他影响我不考虑由于我今晚发生的大规模头痛。
当然,对于他们中的一些,我可以使用Firebug,但有些效果是相关的
感谢
我目前有一个django网站,它有点慢,所以我想了解发生了什么。我怎么可以分析它,以便区分之间:网络 我使用的服务器端执行的JavaScript 如何为网站执行分析?
当然,对于他们中的一些,我可以使用Firebug,但有些效果是相关的
感谢
客户端:
服务器端(我假设你坐在一些UNIX的一致好评服务器上):
检查与小静内容的Web服务器(一个小GIF或少许的HTML页面),使用Apache工作台(ab,apache web服务器包的一部分)或httperf,服务器应该能够每秒响应至少100个请求(当然,这很大程度上取决于测试内容的大小,web服务器类型,硬件和其他东西,所以不要认真对待这100个)。如果这看起来不错,
测试的Django与“静态视图” ab
或httperf
(一个,这并不使用数据库对象),如果那是慢的,你需要更多的CPU功率的提示。用top
检查服务器上的CPU利用率。如果可以,问题可能出在Web服务器执行python代码的方式
如果服务半静态内容正常,您的问题可能是数据库或IO绑定。数据库问题是一个广泛的领域,这里有一些一般性的建议:
iostat
检查I/O吞吐量。如果你看到很多的写入,那么你可以获得更好的光盘子系统,更快的RAID,SSD硬盘驱动器......或优化你的应用程序以减少写入。,如果你让我们知道你用什么硬件/软件,我也许能够提供更多的建议
编辑/ PS:忘了一件事:当然你的应用程序可能有一个不好的设计,并做了很多不必要的/低效的事情...
(因为它做缓慢的网络访问,例如JavaScript的可能出现慢)看看的Django debug toolbar - 这可以帮助您处理服务器端代码(例如,数据库查询运行的时间以及它们花费的时间);并且通常是Django开发的一个很好的资源。
您可以用yslow进行配置的其他非Django特定位。
有各种工具,但这样的问题不难找到,因为他们很大。
您遇到问题,并且在删除它时会遇到加速问题。假设加速是一些因素,比如2x。这意味着该计划花费了50%的时间等待缓慢的部分。我所做的只是停下来几次,看看它在等待什么。在这种情况下,我会看到问题的50%,我停止它。
首先,我会在客户端执行此操作。如果我看到这50%是花在等待服务器上,那么我会尝试在服务器端停止它。然后如果我看到它正在等待SQL查询,我可以看看那些。
我几乎肯定会发现,正在请求的工作量比实际需要的要多。它通常不像“热点”或“算法”那样深奥。它通常是愚蠢的,就像在多次查询时进行多次查询,以避免必须编写代码来保存第一个查询的结果。
首先第一件事情;确保你知道哪些页面很慢。你可能会感到惊讶。我建议django_dumpslow。
当然,您应该在实时网站上执行这种分析,因为它通常是真实数据的位置,但我也认为这不是特别安全......标准解决方案是什么?用假查询打网站(我记得有一个实用程序)? – 2009-11-07 14:26:35
您不必在实时网站上执行django-debug-toolbar的内容,但您可能想在您的实时网站上运行yslow。我在开发服务器上使用了django-debug-toolbar。不要将它用于绝对数字('x'需要'y'秒),而是用于查询的相对时间等。这对于确定特定视图是否发出比需要的更多数据库查询特别有用。 – 2009-11-07 14:32:55