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

问题描述 投票:6回答:2

背景

我有一个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分析工具。
  • 我发现的所有内容都是执行性能分析的休闲代码片段。
python django performance profiling stress-testing
2个回答
2
投票

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

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

尝试使用类似恒定吞吐量计时器的功能来调整请求,这将阻止JMeter被带走并过度加载系统。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.