如何分析 Django 的扩展瓶颈?
Posted
技术标签:
【中文标题】如何分析 Django 的扩展瓶颈?【英文标题】:How to profile Django's bottlenecks for scaling? 【发布时间】:2015-06-25 13:26:02 【问题描述】:我正在使用 django 和 sweetpie 作为 REST API。
对于分析,我使用的是django-silk
,下面是请求摘要:
如何分析整个流程?除数据库查询外,平均花费的时间为 (382 - 147) 毫秒。如何找出瓶颈并优化/扩展?我确实为此资源使用了@silk_profile()
的get_object_list
方法,但即使这种方法似乎也不是瓶颈。
我使用缓存来缩短响应时间,但这并没有多大帮助,还有哪些其他选择?
使用 loader.io 进行测试时,服务器可以处理的峰值是 每 30 秒 1000 个请求(这似乎非常低)。除了缓存(我已经尝试过)还有什么帮助?
【问题讨论】:
【参考方案1】:这里有一堆建议:
-
每个请求的查询至少低于 5 个(每个请求 34 个真的很糟糕)
安装 django 工具栏,看看时间都花在了哪里
在反向代理 (nginx) 后面使用 gunicorn 或 uwsgi
【讨论】:
【参考方案2】: 您的查询太多,即使它们相对较快您花费 一些时间到达数据库等。另外,如果你有外部缓存 存储(例如,redis)可能需要一些时间才能连接 在那里。要调查代码的慢速部分,您有两种选择:
使用分析器 - 如果您已将分布式系统部署到多台计算机上,则在本地 PC 上进行分析将毫无意义 将跟踪点添加到您的代码中,以记录一些消息和当前时间(类似于https://gist.github.com/dbf256/0f1d5d7d2c9aa70bce89)。部署此修补代码并使用负载测试工具对其进行测试并检查日志。【讨论】:
以上是关于如何分析 Django 的扩展瓶颈?的主要内容,如果未能解决你的问题,请参考以下文章