首先,我的网站启动并运行正常。没有关键问题。
我想了解一些事情。
我将首先概述一下我的系统。
这是一个django驱动的站点,位于CentOS 5.3 VPS上,内存为256MB,在带有mod_wsgi的apache下。
django应用程序作为带有1个线程的守护程序进程运行。
我的申请需要的是: 1.初始化日志记录(目前它正在运行,但我每次都会进行双重日志记录) 2.开始守护进程线程做一些后台工作
现在,我已阅读并实施了提供的解决方案 http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html 但它没有多大帮助。
基本上我必须手动禁用worker MPM(只有prefork MPM正在运行),并将守护进程配置为使用一个进程和一个线程(由于某种原因,它不能与任何其他组合一起使用)。
但奇怪的是,该网站正在运行,它正在创建2个后台线程。 1.这是怎么发生的? 2.我的设置是否意味着我的网站上不会处理并发请求?
以下是我网站的一些配置
的httpd.conf
WSGIScriptAlias / /var/www/NiceHouse/trunk/apache/django.wsgi
WSGISocketPrefix run/wsgi
<VirtualHost *:80>
WSGIDaemonProcess site-1 user=**** group=**** threads=1
WSGIProcessGroup site-1
ServerName *****
ServerAlias *****
ServerAdmin *****
#DocumentRoot /usr/local/www/documents
#Alias /robots.txt /usr/local/www/documents/robots.txt
#Alias /favicon.ico /usr/local/www/documents/favicon.ico
Alias /media/ /usr/lib/python2.4/site-packages/django/contrib/admin/media/
Alias /site_media/ /var/www/NiceHouse/trunk/media/
Alias /phpmyadmin /var/www/phpmyadmin/
#<Directory /usr/local/www/documents>
#Order allow,deny
#Allow from all
#</Directory>
WSGIScriptAlias / /var/www/NiceHouse/trunk/apache/django.wsgi
#<Directory /usr/local/www/wsgi-scripts>
#Order allow,deny
#Allow from all
#</Directory>
</VirtualHost>
swtune.conf
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 3
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 1000
</IfModule>
django.wsgi
import sys
import os
os.environ['PYTHON_EGG_CACHE']='/tmp/hoge'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
sys.path.insert(0,'/var/www/NiceHouse/trunk')
import settings
import django.core.management
django.core.management.setup_environ(settings)
utility = django.core.management.ManagementUtility()
command = utility.fetch_command('runserver')
command.validate()
import django.conf
import django.utils
django.utils.translation.activate(django.conf.settings.LANGUAGE_CODE)
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
我会感激任何帮助
谢谢,Elad
答案 0 :(得分:2)
由于多种原因,您可能会进行双重记录。首先是你把伐木放在哪里了?如果您在settings.py文件中记录了日志,那么它将使用您正在使用的WSGI脚本文件内容执行两次。博客文章解释了如何导入设置文件两次。
BTW,您甚至没有正确复制WSGI脚本文件。在博客文章中没有设置DJANGO_SETTINGS_MODULE环境变量。如果您自己导入的模块通过两个不同的路径登录,您可能也会看到双重日志记录。也就是说,合格且不符合网站包名称。从记忆中,这个问题也在博客文章中提到。
关于后台线程,虽然你已经指定了threads = 1,但是mod_wsgi有一些独立的线程,以确保事情正常工作,如果被认为是死锁,就终止进程。
顺便说一下,如果你不使用mod_php,你真的应该让工人MPM继续。使用prefork MPM只会浪费内存。