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

时间:2012-06-04 06:16:18

标签: python django performance profiling stress-testing

背景

我有一个Django应用程序,它可以在低负载下运行并且响应很好,但是在100个用户/秒的高负载下,它会消耗100%的CPU,然后由于CPU的速度不足而减慢。

问题:

  • 分析应用程序让我有时间使用函数。
  • 此时间在高负荷时会增加。
  • 消耗的时间可能是由于复杂的计算或等待CPU。

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

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

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

OR

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

更新

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

更多信息

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

很想知道:

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

2 个答案:

答案 0 :(得分:2)

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

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

尝试使用Cosntant吞吐量计时器来调整请求,这样可以防止JMeter被带走并过度加载系统。

答案 1 :(得分:0)

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