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

时间:2019-02-25 20:20:08

标签: nginx config passenger benchmarking

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

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;
    }
}

我正在将wrk用于多个并发连接(例如100)。

以下是一些具体问题:

  • 是否可以进一步改善Nginx的配置?
    • 是否使用与乘客应用程序服务器的HTTP / 1.1持久连接?<​​/ li>
    • 使用动态模块会导致性能问题吗?
    • 我是否需要做其他任何事情以最大程度地提高集成的工作效率?
    • 我没有设置乘客日志文件来确保记录IO不会成为瓶颈。
  • 关于进程数-我有8个硬件线程,因此我将其设置为最少使用8个实例。
    • 在每个应用程序服务器上使用线程是否有意义?我认为这仅与IO绑定的工作负载有关。
    • 如果我将处理器与8个应用服务器固定在一起,是否表示服务器数量足够?还是应该尝试16岁?
  • Nginx + Passenger与“乘客独立”之间的预期性能差异是什么?

1 个答案:

答案 0 :(得分:2)

客运开发人员在这里。

  

“可以进一步改善Nginx的配置吗?”

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

  

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

不,它使用unix套接字。

  

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

否,一旦nginx加载了库,对其进行函数调用便与任何其他c ++函数调用相同。

  

“我是否需要做其他事情以使集成的工作效率最大化?”

您可能想研究乘客的Turbo缓存和/或Nginx缓存。

  

“我尚未设置乘客日志文件以确保记录IO不会成为瓶颈。”

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

  

“在每个应用程序服务器上使用线程是否有意义?我认为它仅与IO绑定的工作负载相关。”

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

  

“如果我将处理器与8个应用服务器固定在一起,这是否表明服务器数量足够?”

如果您受CPU限制,那么添加更多进程将无济于事。

  

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

不多,Passenger Standalone内部使用nginx。如果您将内置引擎与乘客独立使用,则可能会看到一些改进,但这意味着您无法使用缓存,这更重要。