你如何找到一块Python的CPU消耗?

Yug*_*dle 6 python django performance profiling stress-testing

背景

我有一个Django应用程序,它在低负载下工作并且响应很好,但在高负载(如100个用户/秒)时,它消耗100%的CPU,然后由于缺乏CPU速度减慢.

问题:

  • 对应用程序进行概要分析为我提供了时间.
  • 这个时间在高负荷时增加.
  • 消耗的时间可能是由于复杂的计算或等待CPU.

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

由于降低CPU消耗会增加响应时间.

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

要么

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

更新

  • 我使用Jmeter来配置我的网络应用程序,它给了我2个请求/秒的吞吐量.[100位用户]
  • 我在100个请求上获得36秒的平均时间,在1个请求上获得1.25秒的平均时间.

更多信息

  • 配置Nginx + Uwsgi有4名工人
  • 没有使用数据库,使用REST API的响应
  • 在第1次点击时,REST API的响应被缓存,因此没有什么区别.
  • 使用ujson了JSON解析.

很想知道:

  • Python-Django被许多大型网站用于许多大型网站,然后必须有一些高端的Debug/Memory-CPU分析工具.
  • 我发现的所有内容都是执行性能分析的休闲代码片段.

Oli*_*oyd 2

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

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

尝试使用恒定吞吐量计时器之类的东西来调整请求的速度,这将防止 JMeter 失去控制并导致系统过载。