最近使用flask来重写之前的一些php项目,但是部署到生产环境上经常出现502,于是乎打算收集下资料进行调优,下面我们来看看具体哪些方面需要进行改进
nginx优化,主要是nginx.conf文件内
user www www; worker_processes 56; #CPU逻辑个数,根据你的服务器来 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; worker_rlimit_nofile 65535; #最大打开文件数,这个值要小于等于worker_connections events { worker_connections 65535; #最大连接数 multi_accept on; use epoll; }
接下来我们看看系统调优的地方,主要是syctl.conf
net.core.somaxconn = 2048 #系统队列最大的监听长度 vm.swappiness = 10 #物理内存剩下10%时使用虚拟内存
开辟新的虚拟内存可以参考之前做的swapfile文件的创建和挂载
接下来我们看看uwsgi的优化,我的文件就是uwsgi.ini
workers = 56 # 并发处理进程数 listen = 65535 # 并发的socket连接数,优化需要根据系统配置 processes = 56 #进程数,根据根据逻辑CPU个数修改 threads = 128 #线程数,酌情修改
由于经常遇到而已访问导致的队列堵塞,我们可以在nginx.conf做下适当的限制
limit_req_status 599; #定义被限制的返回码,便于和正常的区分 limit_req_zone $binary_remote_addr zone=allips:2m rate=100r/s; #nginx每秒仅接受100个请求 geo $limited { #设定不受限制的IP default 1; 182.92.117.23 0; }
上面限速以后还需要处理下等待请求数
location / { ... limit_req zone=allips burst=60 nodelay; #达到限速后,允许等待的请求数 }