Nginx 作为 Apache 的代理 - 负载测试

Nginx 作为 Apache 的代理 - 负载测试

我最近改用了 2 个服务器设置,其中 Nginx、Apache Fastcgi 和 Php-fpm 位于一台服务器上,而 Mysql 5.5 位于另一台服务器上。每台服务器的 RAM 为 1GB

Nginx 用作 Apache 的镜像代理。Apache 使用 FastCgi 通过套接字与 Php-Fpm 进行通信。

Apache 正在使用 MPM 工作器配置(我使用以下配置)

<IfModule mpm_worker_module>
    StartServers         2
    ServerLimit          2
     MinSpareThreads      50
    MaxSpareThreads      80
    ThreadLimit          80
    ThreadsPerChild      50
    MaxClients           100
    MaxRequestsPerChild  10000
</IfModule>

Nginx 基本配置

user                www-data www-data;
worker_processes    2;

events {
  worker_connections  1024;
  use epoll; 
}
server_tokens       off;

sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;

keepalive_timeout   55;

现在,当我使用 ab 和 Siege 进行负载测试时,我发现这两种工具的每秒交易量存在很大差异

有时 abs 的结果很差,每秒只有 3-6 次 trans,而 siege 的返回结果为每秒 22-26 次 trans

我有点困惑,无法确定我的新设置是否提高了性能!!

以前当我进行测试时,我平均每秒可以得到 3-6 次传输,这个数字比较低,但是当围攻开始给出每秒 26 次传输的结果时,我就相信了。

nginx.conf 设置

client_header_timeout 30m;
client_body_timeout 30m;
send_timeout 30m;
connection_pool_size 256;
client_header_buffer_size 16k;
client_max_body_size 24M;
client_body_buffer_size 128k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
proxy_buffer_size   256k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   128k;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 1m;
fastcgi_buffers 4 500k;
fastcgi_busy_buffers_size 1m;
fastcgi_temp_file_write_size 1m;
fastcgi_intercept_errors on;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 2;
ignore_invalid_headers on;

答案1

这里可能根本不需要 apache,除非您的应用程序专门使用 apache API。只需使用 nginx 提供图像,然后让其将其余部分直接传递给 PHP-FPM;您将获得更好的性能。

另外,假设小的PHP 脚本为 8MB,您的 100 个最大客户端 = 100 x 8MB = 800MB 仅用于 PHP,这将导致小型 VPS 崩溃。这还未考虑数据库等所需的内存。如果您正在运行某些大的使用 PHP,例如 drupal(带有大量插件)或 magento,可能需要 100 个客户端 x 200MB = 20GB 内存。大多数 wordpress 安装大约需要 16-32MB,因此您需要 2GB 内存,外加数据库、nginx 等。

您在这里看到的可能是基准测试,根据服务器内存耗尽并因交换而开始停止的时间而变化。我建议从干净的 nginx + fpm 配置开始,在使用您的应用程序一段时间后找出一个 PHP 线程最大使用的 RAM 量,然后相应地调整 nginx / fpm 和您的数据库。坦率地说,现在,如果可以的话,只需卸载 apache 即可。

相关内容