Django请求不可思议的慢,找不到原因

时间:2010-09-27 21:14:25

标签: django performance cpu-usage

我有一个Apache2 + mod_python设置已经开始响应不可能从某些日子开始 - 对于我的应用程序的任何请求,处理器时间为2秒。 一些有趣的观点:

  • Debugbar表示查询时间约为15毫秒。 DB不是主要的嫌疑人
  • 使用datetime.now()进行日志记录显示在视图中花费了0.1秒,并且在requestcontext中花费了40毫秒
  • 我找不到一种简单的时间模板渲染方法。

我知道在哪里可以看到吗?

3 个答案:

答案 0 :(得分:1)

假设它有一个无限循环。你怎么会找到它?

我想你只是暂停它在调试器中并查看堆栈各个级别的代码,因为你知道循环在堆栈的某个地方。正确?

假设循环不是无限,只需要很长时间。这有什么不同吗?

无论出现什么问题,如果它花费你一些百分比的时间,比如90%,或50%,或20%,那么当你暂停时,你就会抓住它。所以如果你暂停几次,你就会看到它。越糟糕,你需要暂停和观看的次数越少。很明显。

所以忘记时间安排。 Just find out what it's doing.


在回答问题时,这里有一些mod_python doc:

  

5.4.1 PythonEnablePdb语法:
  PythonEnablePdb {On,Off}
  默认值:PythonEnablePdb关闭
  上下文:服务器   配置,虚拟主机,目录,   htaccess覆盖:不是无模块:   mod python.c当On,mod python将   执行其中的处理函数   使用Python的Python调试器pdb   pdb.runcall()函数。因为pdb是   一个交互式工具,从httpd开始   带-DONE的命令行   使用此时的PROCESS选项   指示。一旦你的处理程序   输入代码后,您将看到一个Pdb   提示允许您单步执行   代码和检查变量。

     

5.4.2 PythonDebug语法:
  PythonDebug {On,Off}默认值:PythonDebug Off   上下文:服务器配置,虚拟主机,   目录,htaccess覆盖:不是无   模块:mod python.c通常,   由...产生的回溯输出   未捕获的Python错误被发送到   错误日志。使用PythonDebug On   指令指定,输出将   被送到客户端(以及   log),除非错误是IOError   在写作时,在这种情况下它会   转到错误日志。这个指令是   在开发过程中非常有用   处理。建议你这样做   不要将它用作生产环境   它可能会向客户透露   无意的,可能是敏感的   安全信息。

答案 1 :(得分:0)

分析应用是一个很好的起点(https://code.djangoproject.com/wiki/ProfilingDjango)。

在查看配置文件统计信息之前,请确保您知道django(或您正在使用的任何框架)的请求/响应周期。

大多数情况下,事情在视图中搞砸了,对于其他情况,它可能在中间件层中。观察您正在分析哪个层,功能明智或请求/响应中涉及的所有内容。

其他技巧如比较dev / prod模式之间的性能也可能有用。尝试使用django开发服务器来确保apache / mod_python不是罪魁祸首。

答案 2 :(得分:-1)

只需简介应用程序。有完整的指南here