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个线程)