我应该如何配置Nginx以最大化在Passenger上运行的单个Ruby应用程序的吞吐量?

问题描述 投票:1回答:1

我想对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配置可以进一步改进吗? 它是否使用与Passenger应用程序服务器的HTTP / 1.1持久连接? 使用动态模块导致任何性能问题? 我是否还需要做任何其他事情以最大限度地提高集成工作的效率? 我没有设置乘客日志文件以确保日志记录IO不是瓶颈。
  • 关于进程数 - 我有8个硬件线程,所以我把它设置为最少使用8个实例。 每个应用程序服务器使用线程是否有意义?我认为它仅与IO绑定工作负载相关。 如果我将处理器与8个应用程序服务器挂钩,那是否表示有足够数量的服务器?或者我应该试试,比方说,16?
  • Nginx + Passenger与Passenger Standalone之间的预期性能差异是什么?
nginx config passenger benchmarking
1个回答
2
投票

乘客开发在这里。

“Nginx配置能否进一步改进?”

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

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

不,它使用unix套接字。

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

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

“我是否还需要做任何其他工作来最大限度地提高集成工作的效率?”

您可能希望了解Passenger的turbo缓存和/或nginx缓存。

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

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

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

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

“如果我将处理器与8台应用服务器挂钩,那是否表示有足够数量的服务器?”

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

“Nginx + Passenger和Passenger Standalone之间的预期性能差异是什么?”

并不多,Passenger standalone在内部使用nginx。如果您使用带独立乘客的内置引擎,您可能会看到一些改进,但这意味着您不能使用更重要的缓存。

© www.soinside.com 2019 - 2024. All rights reserved.