django部署(uwsgi+nginx),内有测试数据
部署django用nginx+uwsgi的,我的服务器是双核CPU,内存4G,在UWSGI里开启100个线程进行测试
#数据库是mysql5.1(没有用集群和读写分离),就是普通的inndb表类型,数据库放在另外一台服务器
#下面是测试数据:
# ##########################################################华丽分割线
#时间(s) 客户端数 完成请求数 出错率(502错误) 是否连接数据库 测试期间web访问状态 每秒处理请求数 3600 5000 3370706 1.40% Y 正常访问,速度很快 936 3600 5000 3353730 1.42% Y 正常访问,速度很快 931 1800 500 1672610 0.05% Y 正常访问,速度很快 929 3600 10000 1679068+1756774 3.16% Y 正常访问,速度很快(但有时候会卡一下) 954 3600 500 1670963+1699892 0.05% Y 正常访问,速度很快 936 60 500 223033 0% N 正常访问,速度很快 3717 600 5000 1840949 0.4% N 正常访问,速度很快 3068 600 10000 803311+799297 0.7% N 正常访问,速度很快(但有时候会卡一下) 2671
# ##########################################################华丽分割线
#请问有什么方法可以提高性能,我用的是
#nginx配置文件:
# ##########################################################华丽分割线
#user nobody;
worker_processes 2;
worker_cpu_affinity 00000001 00000010;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
uwsgi_connect_timeout 120;
uwsgi_send_timeout 180;
uwsgi_read_timeout 180;
open_file_cache max=65535 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
#gzip on;
server {
listen 82;
server_name jasonwu.me;
access_log /home/workspace/Project/logs/access.log;
error_log /home/workspace/Project/logs/error.log;
location / {
root /home/workspace/Project;
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
location ^~ /site_media {
alias /home/workspace/OBJ/media;
access_log /home/workspace/Project/logs/access.log;
error_log /home/workspace/Project/logs/error.log;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) {
access_log off;
expires 30d;
}
}
}
# ##########################################################华丽分割线
#uwsgi的配置文件(uwsgi.xml):
# #########################################################华丽分割线
# <uwsgi>
#
# <socket>127.0.0.1:8000</socket>
#
# <!--socket-timeout>4</socket-timeout--> #socket等待时间,如果超出这个时间就不返回500页面, 默认是4秒
#
# <listen>128</listen> #每个线程的socket处理队列--默认最高128, 可以修改内核(见修改openfile文件), 修改内核后这个值也不适合修改的太高,最多200
#
# <master/> #启动主控进程
#
# <processes>50</processes> #开启2个进程(双核)
#
# <max-requests>10000</max-requests> #当每个进程达到10000请求后将重启这个进程
#
# <module>django_wsgi</module> #你的配置文件
#
# <!--profiler/-->
#
# <buffer-size>4096</buffer-size> #默认每个页面是4K
#
# <harakiri>10</harakiri> #如果一个进程处理一个请求超过10秒,则重启这个进程
#
# <post-buffering>4096</post-buffering> #对应harakiri
#
# <memory-report/> #内存报告
#
# <enable-threads/>
#
# <limit-as>2048</limit-as> #限制内存空间1024M
#
# <!--async>100</async--> #使用async模式来运行,这里要注意一下,
#
# 如果你的app的是no-async-friendly 那就不要用这个模式
# <disable-logging/>
#
# <!--daemonize>/home/workspace/OBJ/logs/uwsgi.log</daemonize-->
#
# </uwsgi>
# #########################################################华丽分割线
# ubuntu内核我已经优化(修改过openfile,socket队列数等)
# django优化只做了模板缓存
# mysql连接数没有进行优化,因为django连接数据库是一个线程一个常连接在内存里,所以一共也就是100个连接(因为我开的100个线程)