我目前有一个django网站,它有点慢,所以我想了解发生了什么.我如何对其进行分析以区分:
网络的影响
我正在使用的托管效果
javascript的效果
服务器端执行(python代码)和sql访问的效果.
由于我今晚碰巧遇到的巨大头痛,我没有考虑任何其他影响.
当然,对于其中一些我可以使用firebug,但是一些效果是相关的(例如,javascript可能看起来很慢,因为它正在进行慢速网络访问)
谢谢
客户端:
检查firebug是否/需要多长时间加载页面组件,以及加载完成后浏览器需要多长时间呈现页面.如果一切都很快但渲染需要时间,那么可能你的html/css/js是问题,否则它就是服务器端.
服务器端(我假设你坐在一些类似unix的服务器上):
使用apache bench(ab,apache webserver包的一部分)或httperf检查Web服务器的小静态内容(一个小的gif或一个小的html页面),服务器应该能够每秒回复至少100个请求(的当然,这在很大程度上取决于你的测试内容,网络服务器类型,硬件和其他东西的大小,所以不要认真对待那100个).如果那看起来不错,
使用ab
或者httperf
在"静态视图"(不使用数据库对象)上测试django ,如果这样做会减慢它的暗示,你需要更多的CPU功率.检查服务器上的cpu利用率top
.如果没关系,问题可能在于Web服务器执行python代码的方式
如果服务半静态内容没问题,那么您的问题可能是数据库或IO限制.数据库问题是一个广泛的领域,这里有一些一般的建议:
检查i/o吞吐量iostat
.如果您看到很多写入,那么您可以获得更好的光盘子系统,更快的raid,SSD硬盘驱动器......或者优化您的应用程序以减少写入量.
如果它的大量读取,主机可能没有足够的ram专用作文件系统缓冲区,或者您的数据库查询可能未被优化
如果i/o看起来没问题,那么数据库可能不适合您的工作负载或未正确配置.记录慢查询和监视数据库活动,锁等可能会给你一些想法
如果您告诉我们您使用的硬件/软件,我可能会提供更详细的建议
编辑/ PS:忘了一件事:当然你的应用程序可能设计不好,做了很多不必要/低效的事情......