【发布时间】: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