【发布时间】:2013-01-06 08:55:20
【问题描述】:
我们正在使用 django 为 mysql 创建一个 json webservice 前端。我们在 EC2 实例上运行 apache 和 django,在 RDS 实例上运行 MySQL。我们已经开始使用 apache bench 对性能进行基准测试,并且得到了一些非常糟糕的性能数据。我们还注意到,在运行测试时,我们的 apache/django 实例在非常低的负载下达到 100% 的 cpu 使用率,而 MySQL 实例的 cpu 使用率从未超过 2%。
我们试图弄清楚这一点并找出问题所在,因此我们进行了几次 ab 测试:
- 来自 apache 的静态 html 页面请求 -- ~2000 个请求/秒。
- 在 django 中执行一个小型 python 函数的请求,并且没有 db 交互 -- ~1000 个请求/秒。
- 执行我们的 django webservice 函数之一的请求,该函数调用身份验证,然后执行非常简单的查询以从表中获取一条记录 -- 11 个请求/秒
- 与 3 相同,但注释了身份验证调用 -- 95 个请求/秒。
为什么认证这么慢?是往数据库写数据,求十亿位数的圆周率,什么?
我们希望在这些函数中保留对身份验证的调用,因为我们不想让任何可以猜到 url 的人都可以使用它们。这里有没有人注意到身份验证很慢,任何人都可以建议一个有什么办法补救吗?
非常感谢!
【问题讨论】:
-
尝试一些事情:下载 django-debug-toolbar 并读取输出。看看它在做什么类型的查询。尝试 django-profile 并读取函数执行时间。最后,获得newrelic ...即使是免费版本也会向您显示每个视图功能的有用细分。很高兴听到一些结果!
标签: python mysql django performance apache