我的DJango应用程序中的500个来自哪里?

时间:2012-03-08 08:00:56

标签: django apache mod-wsgi

我在Windows上安装了Apache,(是的,这不是一个好主意,但不是我的错)。我打开一个弹出窗口,其中包含大约32个图像,除了3个图像链接外,其他所有图像都有效。这些图像来自一个TIF文件,因此必须进行转换,因此它通过我的Django应用程序运行以完成所有这些并且该部分正在运行。重试时失败的3个网址。

在apache日志中,我得到29 200s,然后是3 500s,但是无法加载的实际图像在29个好图像中随机散布。当我用tail -f观察日志时,500s会在200s之后出现很多秒,但是在它们之前加上时间戳,就像这样:

192.168.20.45 - - [08/Mar/2012:01:24:28 -0600] "GET /viewer/...  200  44277
192.168.20.45 - - [08/Mar/2012:01:24:28 -0600] "GET /viewer/...  200  52283
192.168.20.45 - - [08/Mar/2012:01:24:28 -0600] "GET /viewer/...  200  44991
192.168.20.45 - - [08/Mar/2012:01:24:29 -0600] "GET /viewer/...  200  33077
192.168.20.45 - - [08/Mar/2012:01:24:22 -0600] "GET /viewer/...  500  16
192.168.20.45 - - [08/Mar/2012:01:24:22 -0600] "GET /viewer/...  500  16
192.168.20.45 - - [08/Mar/2012:01:24:22 -0600] "GET /viewer/...  500  16

DEBUG = False,并且管理员已设置好,所以我应该收到Django中每500个发生一封的电子邮件,我已经测试了电子邮件,它按预期工作。我将要通过的代码具有错误条件的日志记录语句,并且没有触发这些语句。

它几乎像Apache或Mod_wsgi知道这些连接进来,但从未将它们传递给Django代码,它们最终会从看似超时的事情中消失。 Chrome DevTools最终向我展示:

**Response Headers**
Connection:close
Content-Type:text/html; charset=utf-8
Date:Thu, 08 Mar 2012 07:24:22 GMT
Server:Apache/2.2.21 (Win32) mod_wsgi/3.3 Python/2.7.2
Set-Cookie:sessionid=d4616w0f850u1eb33q7a6fzf37f840b5; Path=/
Transfer-Encoding:chunked
Vary:Cookie

我在Windows上,Apache在启动时说这个:

[Thu Mar 08 01:38:09 2012] [warn] mod_wsgi: Compiled for Python/2.7.
[Thu Mar 08 01:38:09 2012] [warn] mod_wsgi: Runtime using Python/2.7.2.
[Thu Mar 08 01:38:09 2012] [notice] Apache/2.2.21 (Win32) mod_wsgi/3.3 Python/2.7.2 configured -- resuming normal operations
[Thu Mar 08 01:38:09 2012] [notice] Server built: Sep  9 2011 10:26:10
[Thu Mar 08 01:38:09 2012] [notice] Parent: Created child process 3260
[Thu Mar 08 01:38:09 2012] [warn] mod_wsgi: Compiled for Python/2.7.
[Thu Mar 08 01:38:09 2012] [warn] mod_wsgi: Runtime using Python/2.7.2.
[Thu Mar 08 01:38:09 2012] [notice] Child 3260: Child process is running
[Thu Mar 08 01:38:09 2012] [notice] Child 3260: Acquired the start mutex.
[Thu Mar 08 01:38:09 2012] [notice] Child 3260: Starting 64 worker threads.
[Thu Mar 08 01:38:09 2012] [notice] Child 3260: Starting thread to listen on port 80.

请求少于64个,因此应该留下线程来处理它们。

关于WHAT的任何想法都在发生?或者怎么弄清楚?

EDIT ---- 没有追溯,这就是问题所在。没有迹象表明Python曾经看过这个请求。

是的,您不应该使用python来提供静态文件,但是您不能将多图像TIFF中的单个图像TIFF放入必须从多图像文件中提取它,将其放入格式中浏览器可以显示,并且您不希望将1亿多个TIFF图像转换为单个图像PNG或JPEG。这些不是公众可以看到的图像,但仅限于他们的“所有者”

在第二台机器上加载此问题并没有发生问题.....

1 个答案:

答案 0 :(得分:0)

您可以编写一个小型中间件来处理异常。您可以在process_exception方法中进行一些日志记录,以找到问题的根源:

https://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception