6

背景

我有一个 Django 应用程序,它在低负载下工作和响应非常好,但在像 100 个用户/秒这样的高负载下,它消耗 100% 的 CPU,然后由于缺乏 CPU 速度变慢。

问题:

  • 分析应用程序给了我函数所花费的时间。
  • 该时间在高负载时增加。
  • 消耗的时间可能是由于复杂的计算或等待 CPU。

那么,如何找到一段代码消耗的 CPU 周期呢?

由于减少CPU消耗会增加响应时间。

  • 我可能编写了非常高效的代码并且需要增加更多的 CPU 能力

或者

  • 我可能有一些愚蠢的代码占用 CPU 并导致速度变慢?

更新

  • 我正在使用 Jmeter 来分析我的 Web 应用程序,它为我提供了 2 个请求/秒的吞吐量。[ 100 个用户]
  • 100 个请求的平均时间为 36 秒,而 1 个请求的平均时间为 1.25 秒。

更多信息

  • 配置 Nginx + Uwsgi 与 4 个工作人员
  • 未使用数据库,使用来自 REST API 的响应
  • 在第一次命中时,REST API 的响应被缓存,因此没有什么区别。
  • 用于jsonujson解析。

很想知道:

  • Python-Django 被如此多的组织用于如此多的大型站点,那么必须有一些高端的 Debug / Memory-CPU 分析工具。
  • 我发现的所有这些都是执行分析的随意代码片段。
4

2 回答 2

2

您可以尝试将测试配置为缓慢上升,足够慢,以便您可以看到 CPU 逐渐增加,然后在达到高 CPU之前运行分析器。当 CPU 用尽时,尝试分析代码是没有意义的,因为此时一切都会变慢。事实上,您真的只需要相对较轻的负载就可以从分析器中获取有用的数据。

此外,通过逐渐增加负载,您将能够更好地查看 CPU 是否逐渐增加(表明 CPU 瓶颈)或 CPU 是否突然跳跃(表明可能是另一种类型的问题,不一定由更多的 CPU 解决)。

尝试使用诸如 Cosntant Throughput Timer 之类的东西来调整请求的速度,这将防止 JMeter 走神并让系统过载。

于 2012-06-05T23:40:22.673 回答
0

查看New Relic以获得一些非常好的分析,他们有 django 特定的日志记录。

于 2012-09-08T11:58:57.523 回答