如何分析 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 的扩展瓶颈?的主要内容,如果未能解决你的问题,请参考以下文章

如何衡量和解决每天 60K PV 的网站的瓶颈 [关闭]

如何进行性能瓶颈分析

系统性能瓶颈会存在那几个方面?如何分析

如何识别阻碍我的程序在 32 核 CPU 上良好扩展的瓶颈? [关闭]

HTTP请求的TCP瓶颈分析

怎样查出SQLServer的性能瓶颈