调整nginx worker_process以获得每分钟10万次匹配


114

我们有一台提供一个html文件的服务器。

现在,该服务器具有2个CPU和2GB的内存。从blitz.io,我们每分钟获得约12,000个连接,并且在60秒钟内有200次超时,每秒250个并发连接。

worker_processes  2;

events {
 worker_connections 1024;
}

如果我增加超时时间,响应时间将开始爬升超过一秒钟。

我还能做些什么来榨取更多果汁呢?

Answers:


186

配置文件:

worker_processes  4;  # 2 * Number of CPUs

events {
    worker_connections  19000;  # It's the key to high performance - have a lot of connections available
}

worker_rlimit_nofile    20000;  # Each connection needs a filehandle (or 2 if you are proxying)


# Total amount of users you can serve = worker_processes * worker_connections

更多信息:针对高流量负载优化nginx


14
我认为提供每秒用户总数的方程式是错误的。相反,每秒服务的平均用户数量应为= worker_processes * worker_connections /(keepalive_timeout * 2)因此,上述conf文件每秒可以处理约7.6K个连接,这远高于@ablemike的需求。但是,如果ulimit是限制性的并且您不想对其进行修改,那么worker_rlimit_nofile是一个很好的指令。
伊桑(Ethan)

2
@Ethan,为什么要将其划分为2?如果每秒钟我们获得100个新连接,并且超时为5,则以6秒为间隔,我们将不断拥有5 * 100个连接,而这些连接仍未在服务器端终止。如果某些用户本人中止连接,我们可能会少一些
Bulat 2012年

3
如果keepalive设置为0(禁用),则该公式将不起作用
Tilo 2013年

5
每个连接都需要2个文件句柄,即使对于静态文件(例如images / JS / CSS)也是如此。对于客户端连接,此值为1;对于打开静态文件,此值为2。因此,更改worker_rlimit_nofile = 2 * worker_connections更安全。
伊桑(Ethan)

4
使用worker_rlimit_nofile,但也应调用'ulimit -n'来设置每个进程的打开文件计数值。最好在init脚本中完成此操作。
伊桑(Ethan)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.