我们有一个拥有32个内核的大型EC2实例,目前运行的是Nginx,Tornado和Redis,每秒平均提供5K请求.一切似乎都运行良好,但CPU负载已经达到70%,我们必须支持更多的请求.其中一个想法是用uWSGI取代Tornado,因为我们并没有真正使用Tornado的异步功能.
我们的应用程序由一个函数组成,它接收一个JSON(〜= 4KB),执行一些阻塞但非常快的东西(Redis)并返回JSON.
我们认为速度提升将来自uwsgi协议,我们可以在单独的服务器上安装Nginx,并使用uwsgi协议代理对uWSGI的所有请求.但在尝试所有可能的配置和更改操作系统参数后,即使在当前负载下,我们仍然无法使其工作.大多数时候nginx日志包含499和502错误.在某些配置中,它只是停止接收新的请求,例如它达到某些操作系统限制
正如我所说,我们有32个内核,60GB可用内存和非常快的网络.我们不做重物,只做非常快速的阻塞操作.在这种情况下,最好的策略是什么?进程,线程,异步?应该设置哪些OS参数?
目前的配置是:
[uwsgi]
master = 2
processes = 100
socket = /tmp/uwsgi.sock
wsgi-file = app.py
daemonize = /dev/null
pidfile = /tmp/uwsgi.pid
listen = 64000
stats = /tmp/stats.socket
cpu-affinity = 1
max-fd = 20000
memory-report = 1
gevent = 1000
thunder-lock = 1
threads = 100
post-buffering = 1
Run Code Online (Sandbox Code Playgroud)
Nginx配置:
user www-data;
worker_processes 10;
pid /run/nginx.pid;
events {
worker_connections 1024;
multi_accept on;
use epoll; …Run Code Online (Sandbox Code Playgroud) 在旧的API中,init函数需要xdreceiver的路径,现在我看到它从文档中消失了.
我认为xdreceiver是用于在你的域中从Facebook获取cookie,但它现在如何工作?