我应该如何配置Nginx以最大限度地提高运行在计算机上的单个Ruby应用程序的吞吐量?

我应该如何配置Nginx以最大限度地提高运行在计算机上的单个Ruby应用程序的吞吐量?,nginx,config,passenger,benchmarking,Nginx,Config,Passenger,Benchmarking,我想对Nginx+Passenger进行基准测试,我想知道在下面的Nginx.conf中是否有可以调整的内容,以提高吞吐量并减少延迟。它运行在4核i7(8个硬件线程)上,主内存为16GB load_module /usr/lib/nginx/modules/ngx_http_passenger_module.so; # One per CPU core: worker_processes auto; events { } http { include mime.types;

我想对Nginx+Passenger进行基准测试,我想知道在下面的
Nginx.conf
中是否有可以调整的内容,以提高吞吐量并减少延迟。它运行在4核i7(8个硬件线程)上,主内存为16GB

load_module /usr/lib/nginx/modules/ngx_http_passenger_module.so;

# One per CPU core:
worker_processes auto;

events {
}

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

    access_log off;

    sendfile on;

    keepalive_timeout 60;

    # 8 should be number of CPU threads.
    passenger_root /usr/lib/passenger;
    passenger_max_pool_size 8;

    server {
        listen [::]:80;
        server_name passenger;

        root /srv/http/benchmark/public;

        passenger_enabled on;
        passenger_min_instances 8;
        passenger_ruby /usr/bin/ruby;
        passenger_sticky_sessions on;
    }
}
我正在使用具有多个并发连接(例如100)的
wrk

以下是一些具体问题:

  • Nginx配置是否可以进一步改进?
    • 是否使用HTTP/1.1与乘客应用程序服务器的持久连接
    • 使用动态模块是否会导致性能问题
    • 我还需要做些什么来最大限度地提高集成工作的效率吗
    • 我还没有设置乘客日志文件来确保日志IO不是瓶颈
  • 关于进程的数量——我有8个硬件线程,所以我将其设置为至少使用8个实例。
    • 每个应用服务器使用线程有意义吗?我假设它只与IO绑定的工作负载相关
    • 如果我将处理器与8台应用服务器挂钩,这是否表明服务器数量足够?或者我应该试试,比如说,16岁
  • Nginx+乘客与独立乘客之间的预期性能差异是什么
这里是乘客发展

“Nginx配置是否可以进一步改进?”

也许,Nginx有很多杠杆,如果您所做的只是在基准测试中提供已知的有效负载,那么您可以通过Nginx的缓存来提高性能

“是否使用到乘客应用程序服务器的HTTP/1.1持久连接?”

不,它使用unix套接字

“使用动态模块是否会导致性能问题?”

<>不,一旦nGiNX加载了库,函数调用就如同任何其他C++函数调用一样。 “我还需要做些什么来最大限度地提高集成工作的效率吗?”

您可能需要查看Passenger的turbo缓存和/或nginx缓存

“我没有设置乘客日志文件以确保日志IO不是瓶颈。”

很好,但是将日志记录级别降低到0以避免一点处理

“每个应用程序服务器使用线程有意义吗?我假设它只与IO绑定的工作负载相关。”

不确定您的确切意思,您是在谈论Passenger的多线程支持还是nginx

“如果我将处理器与8台应用程序服务器挂钩,这是否表明服务器数量足够?”

如果您是CPU受限的,那么添加更多进程将没有帮助

“Nginx+乘客与独立乘客之间的预期性能差异是什么?”

不多,乘客单机版在内部使用nginx。如果将内置引擎与passenger standalone一起使用,您可能会看到一些改进,但这意味着您不能使用更重要的缓存