简而言之,我的问题是我的请求需要很长时间,我无法找出原因。我不知道我能做些什么来弄清楚为什么这么长时间。我可能忽略了哪些其他技术来帮助缩短请求时间?
这整个场景让我在很长一段时间里摸不着头脑。我已经将测试服务器创建为虚拟盒并在服务器上加载了vagrant。每当我尝试从virtualbox的主机访问Apache / Django网站时,请求平均需要6秒。我读到mod_wsgi应该第一次加载需要时间,但是即使在后续访问中仍然需要大约6秒才能加载。
这是Django工具栏的输出
Resource Value
User CPU time 183.972 msec
System CPU time 606.908 msec
Total CPU time 790.880 msec
Elapsed time 5720.771 msec
Context switches 12800 voluntary, 21 involuntary
如您所见,经过的时间非常长,而总CPU时间大约是一分钟。我有点担心Context switches
的数量很多。无论我接下来尝试使用以下命令来配置Apache
$ ab -n 400 http://127.0.0.1:8080/scheduling/instruments
...
Time taken for tests: 5.389 seconds
Complete requests: 400
...
Time per request: 13.473 [ms] (mean)
这对我没有任何意义,因为它在我的浏览器完成一个请求时设法完成了400个请求。当我在浏览器中发出相同的确切请求时,通常需要6秒钟。我唯一想到的是,请求必须以某种方式花费5秒钟让mod_wsgi启动django并从那里处理请求。以下是我的httpd.conf
文件中的相关部分以及用于提供应用程序的django.wsgi
文件
# Use apache to serve the static media files
AliasMatch ^/([^/]+)/media/(.*) /var/www/apps/$1/media/$2
<DirectoryMatch ^/var/www/apps/([^/]+)/media>
Order deny,allow
Allow from all
</DirectoryMatch>
WSGIDaemonProcess django_apps user=apache group=root
WSGIProcessGroup django_apps
WSGISocketPrefix /var/run/wsgi
WSGIScriptAliasMatch ^/([^/]+) /var/www/apps/$1/django.wsgi
和django.wsgi apache加载
import os
import sys
path = '/var/www/apps'
path2 = '/var/www/apps/scheduling'
path3 = '/var/www/apps/scheduling/debug_toolbar'
if path not in sys.path:
sys.path.append(path)
if path2 not in sys.path:
sys.path.append(path2)
if path3 not in sys.path:
sys.path.append(path3)
os.environ['DJANGO_SETTINGS_MODULE'] = 'scheduling.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
import scheduling.monitor
scheduling.monitor.start(interval=1.0)
schedu.monitor从此网站Reloading Source Code
逐字复制如果它有帮助,服务器是我本地Mac Lion上托管的VirtualBox,并且所有端口转发都已正确设置。服务器是Centos 6,默认安装Apache 2.2和Django 1.3.1
编辑:事实证明问题在于它在虚拟机上。由于VM配置为使用我的本地计算机作为DNS,因此DNS查找可能需要超过5秒才能从计算机内部进行。这意味着任何时候机器连接到另一台服务器(也就是查找我们的SQL服务器),它会冻结,巧合在mod_wsgi获取请求和我的python视图接收请求之间。将/etc/resolv.conf
中的值更改为我们的本地DNS可以解决问题。