django uwsgi nginx 性能调优

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/epeaktop/article/details/80506180

‘’

  • django 支撑什么类型的数据库

    常见的关系数据库postgresql、mysql、oracle、sqlite这些都支持,官方优先推荐PostgreSQL关系数据库。

  • django 如何设置保存mysql数据库


配置project目录的 init.py

import pymysql
pymysql.install_as_MySQLdb

在setting.py文件中 修改:

DATABASES = {

  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'MEMBER', #数据库的名字 需要在sql中设置
    'USER': 'root',
    'PASSWORD': '123',
     'CONN_MAX_AGE': 60, # 这是我加的配置,启动数据库连接池,默认是0,** 不开启 **
   }
}
  • 生成必要的数据表
python manage.py migrate

  • 如何设置异步写入mysql
  • 设置mysql最大连接数

大规模连接同时发给uwsgi,如128 * 8 = 1024 个线程同时处理请求,如果程序中有数据库连接操作
原来数据库的连接只有100个,这样会倒数数据库的连接池的连接扩展到1024个连接。没有连接池时,下次来请求时,要重新建立数据库连接;销毁和建立数据库连接的时间全都浪费了。这样做会不会节省数据库连接数? 多余的请求会被nginx拦住,返回502

show variables like "%timeout%";
show variables like '%max_connections%';
set global max_connections=5000
  • uwsgi 配置说明
[uwsgi]
socket = 127.0.0.1:9000
# Django-related settings
# the django project directory (full path)
chdir           = /data/www/game3s
# Django's wsgi file
module          = wsgi

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 24
threads = 8

max-requests = 60000

# ... with appropriate permissions - may be needed
chmod-socket    = 664

# clear environment on exit
vacuum          = true

listen = 10000

# 后台运行,并输出日志
# daemonize = logs/uwsgi.log
# monitor uwsgi status  通过该端口可以监控 uwsgi 的负载情况
stats = 127.0.0.1:9191
# 收发数据缓存的大小,** 默认值是4K?**,  不设置上传大文件会报错
buffer-size = 32768
  • nginx配置

    nginx在反向代理HTTP协议的时候,默认使用的是HTTP1.0去向后端服务器获取响应的内容后在返回给客户端。
    HTTP1.0和HTTP1.1的一个不同之处就是,HTTP1.0不支持HTTP keep-alive。
    nginx在后端服务器请求时使用了HTTP1.0同时使用HTTP Header的Connection:Close通知后端服务器主动关闭连接。
    这样会导致任何一个客户端的请求都在后端服务器上产生了一个TIME-WAIT状态的连接。
    所以我们需要在Nginx上启用HTTP1.1的向后端发送请求,同时支持Keep-alive。

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

worker_rlimit_nofile 60000; # 这个是我加的配置,同时连接的数量 -- [受限于系统上可用的文件描述符的数量]
events {
    worker_connections  65535; # default 2048
    multi_accept on;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    server_tokens off;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   120; # *** 请求返回后连接保持的时间 *** 
    # ****************************************************
    # * 负载均衡改这里,默认轮询(无状态且短平快的服务)
    # * least_conn 最少连接
    # * ip_hash ip哈希
    # * 加权   weight=3;
    upstream http_backend {
        server 127.0.0.1:9000;
        server 192.168.1.231:9000;
        keepalive 16;
    }

    server {
        listen       80;
        server_name  localhost;
        charset UTF-8;
        access_log  /data/www/game3s/logs/access.log;
        error_log   /data/www/game3s/logs/error.log;
        client_max_body_size 75M;
        location / {
            include uwsgi_params;
            uwsgi_pass http_backend; # *******
            uwsgi_read_timeout 300;

            proxy_http_version 1.1;
            proxy_set_header Connection "";
            # jiangxf add end 
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /data/www/game3s/static/;
        }
        location /static/ {
            alias  /data/www/game3s/static/;
            index  index.html index.htm;
        }
        location /media/ {
            alias  /data/www/game3s/media/;
        }
    }

    types_hash_max_size 2048;
    proxy_connect_timeout 60;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    proxy_buffer_size 32k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;

    proxy_hide_header X-Powered-By;
    fastcgi_hide_header X-Powered-By;

    client_max_body_size 200m;
    client_body_buffer_size 2560m;

    proxy_temp_path /data/www/web_cache/cache_dir;
    proxy_cache_path /data/www/web_cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=7d max_size=2g;

    #ssl_session_cache shared:SSL:50m;
    #ssl_session_timeout 5m;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/javascript application/xml application/xml+rss;

    include /etc/nginx/conf.d/*.conf;
}

参考:https://docs.djangoproject.com/en/1.11/ref/databases/
http://www.net-add.com/a/xitongyouhua/Pythonmoxing/2017/0424/43.html
https://www.cnblogs.com/wufengtinghai/p/5237165.html

猜你喜欢

转载自blog.csdn.net/epeaktop/article/details/80506180
今日推荐