【问题标题】:High CPU usage by Django AppDjango App 的高 CPU 使用率
【发布时间】:2012-06-04 01:12:41
【问题描述】:

我创建了一个非常简单的 Django 应用程序,它在某种程度上产生了高 CPU 负载:使用简单模型列表(其中 20 个)和每页 5-6 个 SQL 查询呈现一个简单的通用视图,从而产生一个加载的 apache 进程CPU 提高 30% - 50%。虽然内存使用情况还不错(30MB),但据我了解,CPU 负载不正常,这不是因为 apache/wsgi 设置或其他原因,当我通过 runserver 运行应用程序时,会发生相同的 CPU 负载。

因为,我是 Django 新手,所以我想问: 1)对于 Django 应用程序来说,这些 30-50% 的数字是常见的吗? (Django 1.4,ubuntu 12.04,python 2.7.3) 2) 如何分析 CPU 负载?我从这里使用了一个配置文件中间件:http://djangosnippets.org/snippets/186/,但它只显示 ms 数字而不是 CPU 负载数字,并且没有什么特别的,那么我如何确定是什么消耗了这么多 CPU 能力?

【问题讨论】:

  • 您如何测量 30-50% 的 CPU 使用率?你用什么来运行负载?
  • 我在 Linux 中使用 top 并观察 %CPU 列中的 apache2 进程,该进程在我浏览应用程序时出现(或通过 轰炸它ab)

标签: django


【解决方案1】:

CPU 使用率本身并不能说明您的应用程序的效率。衡量性能的更重要指标是您的应用程序可以处理多少请求/秒。您的机器所使用的处理器类型自然也会对结果产生巨大影响。

我建议您使用多个并发请求运行ab,并将请求/秒数与一些基准进行比较(网络上应该有很多)。 ab 会尝试测试最大吞吐量,因此很自然地会充分利用其中一种资源(瓶颈),通常是disk-io。例如,如果您碰巧获得接近 100% 的 CPU 使用率,则可能意味着您在某处浪费 CPU(reqs/s 低)或您已很好地优化了磁盘 io(reqs/s 高)。

【讨论】:

  • 我的应用在 2GB Linode VPS 上提供 25 个请求/秒。现在我很好奇,如何检查这是否正常?是否有任何理想的数字可用或可以比较?
  • @Timus83 如果可以的话,没有明确的答案。这取决于很多事情。您应该阅读有关 Django 性能的更多信息以及一些可用于获得您可以接受的大致数字的基准。我敢肯定有很多人在 EC2 上对 Django 应用程序进行基准测试(here 就是其中之一)。如果在负载下您的 CPU 没有接近 100%,您知道您应该专注于优化数据库访问(例如缓存)。
【解决方案2】:

查看 %CPU 列不是很准确。我当然一直看到 50%-100% CPU 的峰值。它并不表示 CPU 使用了多长时间,只是我们在那个特定时刻达到了那个值。这些将属于最小/最大数字,而不是您的平均 CPU 使用率。

另一个重要的部分:假设您像我一样有 4 个内核,这意味着 top 上的 30-50% 数字超出了最大值 400%。顶部 50% 意味着一个核心的 50%,四个核心的 12.5%,等等。

您可以按顶部的 1 来查看各个核心 cpu 数据。

【讨论】:

  • 嗯,谢谢你的提示。我有点好奇为什么会出现这些尖峰?例如,如果我运行像 redmine 这样的基于 rails 的应用程序,峰值最高可达 10%,这是一个使用 Ruby 编写的非常复杂的应用程序。另一方面,我的应用程序很简单,并且是用性能更高的 Python 编写的,所以看到这样的峰值我有点惊讶,并想找出它们的原因。
猜你喜欢
  • 2015-02-04
  • 2022-12-07
  • 1970-01-01
  • 2012-05-19
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2014-07-16
相关资源
最近更新 更多