对Django Web应用程序的请求悬而未决;简单的调试技巧?

时间:2011-01-13 11:04:00

标签: django apache webserver mod-python

更新 - 已解决

问题原来是服务器有一个挂载指向本周早些时候退休的文件服务器;毕竟与django / mod-python / etc无关。更新挂载解决了这个问题。

非常感谢您的评论&帮助,并为一个疯狂的追逐道歉......我将在任何情况下考虑升级mod-python: - )

摘要

我正在维护一个Django webapp,它在几天前工作正常,但现在所有的Web请求都会挂起很久。我不知道有什么变化,所以这个问题可能很简单。

我尝试重新启动网络服务器,然后重新启动httpd。 'top'显示服务器正在处理CPU和内存。

有人可以建议其他可能出错的简单事物或其他需要检查的事情吗?

更多详情

我没有创建Web服务器,所以不幸的是我不完全确定完整的细节,或者在哪里查找所有日志等。我知道Web服务器由以下组件组成:使用Django实现;在Linux服务器上运行;使用PostgreSQL数据库; lighttpd用于静态内容; Apache处理传入的HTTP请求并通过mod_python将它们传递给Django;使用memcached缓存渲染页面。我确实可以完全访问Linux服务器和数据库,所以如果我知道在哪里查看,我们可以愉快地浏览。

每当我发出新请求时,

/ var / log / httpd / access_log和error_log都会显示如下行。我不知道mod_python行是否表示错误(当我用googled这个日志时没有明显的事实)。

的access_log:

127.0.0.1 - - [13/Jan/2011:10:56:11 +0000] "GET /testruns/testrun2176/ HTTP/1.0" 301 - "http://myapp/testruns/" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729; .NET4.0E)"

error_log中:

[Thu Jan 13 10:34:19 2011] [notice] mod_python: (Re)importing module 'django.core.handlers.modpython'

正在运行的开发服务器的输出

# python manage.py runserver 0.0.0.0:8088
Validating models...
0 errors found

Django version 1.0-final-SVN-unknown, using settings 'myapp.settings'
Development server is running at http://0.0.0.0:8088/
Quit the server with CONTROL-C.
[13/Jan/2011 14:23:31] "GET /testruns/testrun2176/ HTTP/1.1" 301 0

然后没有任何反应。网页刚加载。

我可以加载其中一个稍微简单的页面。通过开发版本,图片不会加载,但它没关系。简单页面位于/ testruns / - 虽然由于某种原因我在runserver输出中看不到该页面:

# python manage.py runserver 0.0.0.0:8088
Validating models...
0 errors found

Django version 1.0-final-SVN-unknown, using settings 'myapp.settings'
Development server is running at http://0.0.0.0:8088/
Quit the server with CONTROL-C.
[13/Jan/2011 14:27:42] "GET /static/myapp.css HTTP/1.1" 404 1113
[13/Jan/2011 14:27:42] "GET /static/myapp_print.css HTTP/1.1" 404 1113
[13/Jan/2011 14:27:42] "GET /static/myapp_ticks_crosses.css HTTP/1.1" 404 1113

我应该再次指出,这几天前一切正常。从那以后我没有明确地改变任何东西 - 我突然发现所需的页面不会加载,我试图找出原因。

/ var / log / httpd / log文件似乎没有显示出特别有趣的内容,我不确定我还应该注意什么。

我们正在运行第二台服务器,该服务器可以处理不同的测试结果集。在其上运行开发服务器显示预期301重定向(... / testrunX /重定向到... / testrunX / broken / page1 /)。

// This trace, on a different server but with a similar setup, shows that the
// 301 redirect is expected, and is not the source of the problem
[server2]# python manage.py runserver 0.0.0.0:8088
Validating models...
0 errors found

Django version 1.0-final-SVN-unknown, using settings 'myapp.settings'
Development server is running at http://0.0.0.0:8088/
Quit the server with CONTROL-C.
[13/Jan/2011 14:47:59] "GET /testruns HTTP/1.1" 301 0
[13/Jan/2011 14:47:59] "GET /testruns/ HTTP/1.1" 200 11568
[13/Jan/2011 14:47:59] "GET /static/myapp.css HTTP/1.1" 404 1131
[13/Jan/2011 14:47:59] "GET /static/myapp_print.css HTTP/1.1" 404 1131
[13/Jan/2011 14:47:59] "GET /static/star.png HTTP/1.1" 404 1131
[13/Jan/2011 14:47:59] "GET /static/myapp_ticks_crosses.css HTTP/1.1" 404 1131
[13/Jan/2011 14:47:59] "GET /static/star.png HTTP/1.1" 404 1131
[13/Jan/2011 14:48:02] "GET /static/star.png HTTP/1.1" 404 1131

[13/Jan/2011 14:48:12] "GET /testruns/testrun1879/ HTTP/1.1" 301 0
[13/Jan/2011 14:48:12] "GET /testruns/testrun1879/broken/page1/ HTTP/1.1" 200 309477
[13/Jan/2011 14:48:12] "GET /static/myapp.css HTTP/1.1" 404 1131
[13/Jan/2011 14:48:12] "GET /static/myapp_print.css HTTP/1.1" 404 1131
[13/Jan/2011 14:48:13] "GET /static/myapp_ticks_crosses.css HTTP/1.1" 404 1131

所以我认为没有无限循环。由于某种原因,请求/数据库查询/其他东西花费的时间太长或完全卡住了。

memcached信息

坏服务器上的memcached似乎很空。但是,如果Web请求失败,可能会出现这种情况,即没有返回任何内容存储在缓存中(缓存到期时间为12小时)。

糟糕的服务器:

// Top - only using 6K memory (VIRT)
PID   USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30743 nobody    15   0  6640 4972  476 S  0.0  1.9   0:00.01 memcached

// memcache-top from http://code.google.com/p/memcache-top/
// only using 0.2% available space
memcache-top v0.6       (default port: 11211, color: on, refresh: 3 seconds)
INSTANCE                USAGE   HIT %   CONN    TIME    EVICT/s READ/s  WRITE/s
127.0.0.1:11211         0.2%    0.0%    5       0.8ms   0.0     2       161
AVERAGE:                0.2%    0.0%    5       0.8ms   0.0     2       161
TOTAL:         111.0KB/ 64.0MB          5       0.8ms   0.0     2       161

好的服务器:

// Top - using ~68K memory (VIRT)
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2503 nobody    15   0 67900 8256  396 S  0.0  3.2   0:01.68 memcached

// memcache-top - using 63% space
memcache-top v0.6       (default port: 11211, color: on, refresh: 3 seconds)
INSTANCE                USAGE   HIT %   CONN    TIME    EVICT/s READ/s  WRITE/s
127.0.0.1:11211         63.2%   0.0%    3       1.2ms   0.0     0       0
AVERAGE:                63.2%   0.0%    3       1.2ms   0.0     0       0
TOTAL:          40.5MB/ 64.0MB          3       1.2ms   0.0     0       0

1 个答案:

答案 0 :(得分:3)

仅提一点:

  • 您应该尽快避免使用mod_python,因为它的使用已被弃用,将来django将不再支持它。
  • 您可以使用开发服务器重现问题吗?
  • 您可以使用不同的数据库后端重现它吗?
  • 尝试使用django-debug-toolbar检查是否发生过于复杂的数据库查询或类似问题!
  • 错误日志doesn't indicate an error中的行!