使用了gevent一段时间之后,应用进程占用的内存稳步增长,一不小心就好几百M了,gevent应该存在一些内存泄漏,同时还有一些其他问题, 放到生产环境中很不适合。于是查找了一些其他的wsgi server,看了国外的一些评测,选定了uwsgi,安装之后,和gevent进行了一些测试比较,两者相差不多,在响应速度上似乎uwsgi要胜出一 点。
下载源码之后,直接make,得到uwsgi,就可以直接用了。
首先设置django应用的配置文件,django-uwsgi.py文件格式如下:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = ‘yourapp.settings’import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
uwsgi启动命令:
/var/www/uwsgi –socket 127.0.0.1:8098 –pythonpath /var/www/yourapp -w django-uwsgi -p 10 -M -d /var/log/nginx/uwsgi-yourapp.log –uid www-data –l 10000
nginx中的配置非常简单,nginx从0.8.40之后,默认支持了uwsgi协议。
location / {
uwsgi_pass 127.0.0.1:8098;
include uwsgi_params;
}
uwsgi中的-p 10表示启动10个进程,-l 10000 表示处理了10000次请求之后,会自动重新启动该进程。
uwsgi的重启也非常优雅,和nginx一样,发一个信号过去,uwsgi的主控制程序会等候应用进程处理完当前事务之后,再进行重启。uwsig的说明在http://projects.unbit.it/uwsgi/wiki/uWSGIReload。
重启命令:
sudo killall -s HUP /var/www/uwsgi
和nginx的信号一样