2

システム情報(ElasticBeanstalk の背後にある AWS EC2 インスタンス (m4.large)):

リージョン: us-west-1
メモリ: 8GB
CPU: 2 コア / 2.4GHz
PHP バージョン: 7.0.22 (ZTS) with FPM
Nginx バージョン: 1.10.2

Web/モバイル/その他で使用される API があります。各エンドポイントはデータベース リクエストを作成し、キャッシュ (APCu または Redis) を使用しています。

アパッチ

Apache は 1 秒あたり最大 40 のリクエストを処理します。レイテンシは ~500 ~ 1200 ミリ秒でした (API エンドポイントによって異なります)。

ニンクス

その後、Nginx に移行することにしました。しかし、奇妙な動作に直面しました - スループットは 1 秒あたり約 20 リクエストに減少しました。また、レイテンシは常に増加しています (例: テストは 300 ミリ秒で開始し、31000 ミリ秒を超えて終了します)

/etc/nginx/nginx.conf:

user webapp;
pid /var/run/nginx.pid;

worker_processes auto;
worker_rlimit_nofile 10000;

error_log /var/log/nginx/error.log;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;

    charset utf-8;

    client_max_body_size 50m;

    gzip  on;
    gzip_vary on;
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/json;
    gzip_disable "MSIE [1-6]\.";

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    upstream php {
        server 127.0.0.1:9000;
    }

    include /etc/nginx/conf.d/*.conf;

    index   index.html index.htm;
}

/fpm/pools/www.conf:

[www]
user = webapp
group = webapp
listen = 127.0.0.1:9000

pm = dynamic
pm.max_children = 75
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 35
pm.max_requests = 500

... the rest is default

パフォーマンスは、カスタム シナリオを使用してApache Jmeterによって測定されます。テストは同じリージョン (別の EC2 インスタンス) から実行されます。

cURL 統計:

lookup: 0.125
connect: 0.125
appconnect: 0.221
pretransfer: 0.221
redirect: 0.137
starttransfer: 0.252
total: 0.389

tcptracerouteもバッチリ(1ms)

お知らせ下さい!私は自分で問題の原因を見つけることができません..ありがとう!

4

0 に答える 0