【问题标题】:How do you find the CPU consumption for a piece of Python?你如何找到一段 Python 的 CPU 消耗?
【发布时间】:2012-06-08 06:35:53
【问题描述】:

背景

我有一个 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 的响应被缓存,因此没有任何区别。
  • 使用ujson 解析json。

很想知道:

  • Python-Django 被这么多组织用于这么多大站点,那么一定有一些高端的调试/内存-CPU 分析工具。
  • 我发现的所有这些都是执行分析的随意 sn-ps 代码。

【问题讨论】:

  • 我进行分析的第一步是查看哪些函数花费了大部分时间,然后他们调查原因、是否合理以及是否/如何可以减少。 时间量(通常)不如时间的比例量重要。
  • 所有花费的时间似乎都分布在整个应用程序中。似乎没有特定点是问题区域。
  • 好像?你精确测量了吗?请参阅stackoverflow.com/a/582337/851737 寻求帮助。
  • 我正在使用:djangosnippets.org/snippets/186 来分析我的东西。
  • 顺便说一句,你在哪个服务器(Apache+WSGI)上运行它?你的 Django 应用有多少个进程?它主要是受数据库限制还是受 CPU 限制?

标签: python django performance profiling stress-testing


【解决方案1】:

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

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

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

【讨论】:

  • 很好的建议开始.. 我会探索你建议的选项。除此之外,我正在寻找更多用于 django / python 的 ninja 分析工具 - 它可以提供对系统的更精细的外观。 :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2015-05-18
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多