Задать вопрос
@andrei_pro

Не справляется nginx?

Всем привет.

Сервер cloud: 4 cpu, 8 ram. Стоит nginx как прокси на другие сервера и rabbitmq в контейнерах докера, логи включены.
Трафик ~70k rpm. При > трафике появляются лаги на других серверах - растет php-fpm, запросы не доходят.

Подозрение что nginx нужно больше ресурсов?

user nginx;
worker_processes auto;
pid /var/run/nginx.pid;

load_module modules/ngx_http_vhost_traffic_status_module.so;

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

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    send_timeout 2;
    keepalive_timeout 30;
    client_body_timeout 10;
    reset_timedout_connection on;
    types_hash_max_size 2048;
    # server_tokens off;
    server_names_hash_bucket_size 128;
    # server_name_in_redirect off;

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

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

    # https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/
    # Note: The DNS server is always at 127.0.0.11
    resolver 127.0.0.11 valid=5s;

    ssl_prefer_server_ciphers on;
    ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers               HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    vhost_traffic_status_zone;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


5e7539d703dc9287530153.png
  • Вопрос задан
  • 2288 просмотров
Подписаться 3 Средний 4 комментария
Пригласить эксперта
Ответы на вопрос 5
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Итак, что мы имеем - туча всякого на одном сервере что уже плохо. Отличное время задуматься о масштабировании. Что можно сделать для старта:
  1. взять несколько более дешевых виртуалок
  2. разнести отдельно nginx, rabbitmq
  3. подумать о том чтобы избавиться от докера. последний раз я видел чтобы он хорошо работал в больших облаках вроде AWS ECS, но не на отдельных VPS
  4. настроить горизонтальное масштабирование и dns-round-robin


также:
  • напомню что число портов ограничено и при большом числе одновременных соединений они могут тупо закончиться
  • слой с приложением тоже стоит масштабировать
Ответ написан
@Badbuka
Судя по LA вам не хватает 2х cpu
Ответ написан
@metajiji
Выглядит так, как будто nginx использует много cpu.
Конфиг не полный, поэтому предположу, что:
1. в конфигах много regex правил и они не оптимальны.
2. Порты до nginx зачем-то проброшены через docker-proxy(настоятельно рекомендую не делать проброс портов в продакшене вообще никогда!, Docker proxy написан на go и требует очень много CPU! Решение проблемы простое --net host, при создании контейнера с nginx.
3. Настроено gd сжатие через nginx, отсюда и трафик на cpu. Решение либо не генерить их на лету, либо отселять на другой хост.

Полный конфиг nginx можно увидеть командой nginx -T (пишу по памяти, проверьте справку:))
Ответ написан
opium
@opium
Просто люблю качественно работать
Ну так увеличьте процы до 8 штук с четырех если и так очевидно что их не хватает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы