调整nginx worker_process以获得每分钟100k的命中率

abl*_*ike 113 nginx

我们有一台服务器正在提供一个html文件.

现在服务器有2个CPU和2GB内存.从blitz.io开始,我们每分钟可以获得大约12k个连接,并且在60秒内有200个超时,每秒250个并发连接.

worker_processes  2;

events {
 worker_connections 1024;
}
Run Code Online (Sandbox Code Playgroud)

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

我还能做些什么来挤出更多汁液?

Bul*_*lat 184

配置文件:

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
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为每秒用户总数的公式是错误的.相反,每秒服务的平均用户数应该是= worker_processes*worker_connections /(keepalive_timeout*2)因此,上面的conf文件可以每秒服务~7.6K连接,这远远高于@ablemike所需要的.但是,如果ulimit是限制性的并且您不想修改它,则worker_rlimit_nofile是一个很好的指令. (13认同)
  • 即使对于像images/JS/CSS这样的静态文件,每个连接也需要2个文件句柄.这是客户端连接的1和打开静态文件的第2个.因此,更改worker_rlimit_nofile = 2*worker_connections更安全. (5认同)
  • 使用worker_rlimit_nofile但是也应该调用'ulimit -n'来设置每个进程的打开文件计数值.这在init脚本中更好. (4认同)
  • 如果keepalive设置为0(禁用),则该公式不起作用 (3认同)
  • @Ethan,为什么它应该被2分开?如果每秒我们得到100个新连接,超时为5,然后以第六秒为止,我们将不断有5*100个连接,但仍未在服务器端终止.如果某些用户自己中断连接,我们可能会减少 (2认同)
  • 谢谢你,Ethan.通过我们的集体工作,这个主题成为百科全书的高通量nginxing :) (2认同)
  • 你应该从公式中删除`keepalive_timeout`.当达到`worker_connections`限制时,Nginx关闭keepalive连接. (2认同)