1,超快的性能。
2,低内存占用(实测为apache2的mod_wsgi的一半左右)。
3,多app管理。
4,详尽的日志功能(可以用来分析app性能和瓶颈)。
5,高度可定制(内存大小限制,服务一定次数后重启等)。
安装:
apt-get install build-essential python-dev
pip3 install uwsgi
uwsgi 命令行参数:
-w加启动程序
-M 开启Master进程
-p 4 开启4个进程
-s 使用的端口或者socket地址
-d 使用daemon的方式运行, 注意, 使用-d后, 需要加上log文件地址, 比如-duwsgi.log
-R 10000 开启10000个进程后, 自动respawn下
-t 30 设置30s的超时时间, 超时后, 自动放弃该链接
–limit-as 32 将进程的总内存量控制在32M
-x 使用配置文件模
uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log
.ini参数:
[uwsgi]
master = false#是否启动主进程
vhost = true#是否开启虚拟主机模式
processes = 2#进程数
threads = 0#线程数
reload-mercy = 10#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了10秒就会被强行结束(忽略之前已经接收到的请求而直接结束)。
vacuum = true#当服务器退出的时候自动删除unixsocket文件和pid文件
max-requests = 1500#为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏(尽管这类情况使用reload-on-as和reload-on-rss选项更有用)。
http = :9090#网关
daemonize =uwsgi.log#使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
pidfile =uwsgi.pid#在失去权限前,将pid写到指定的pidfile文件中。
harakiri = 10#这个选项会设置harakiri超时时间,如果一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)。
例子:
test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
测试:
uwsgi --http :9090 --wsgi-file test.py
或者,
uwsgi --ini test.ini --file test.py