nginx грузит проц в простое

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Духовитин
мл. сержант
Сообщения: 125
Зарегистрирован: 2014-12-17 8:46:05

nginx грузит проц в простое

Непрочитанное сообщение Духовитин » 2016-11-17 8:52:56

Привет умельцам!

Товарищи, помогите пожалуйста найти проблему с nginx'ом.

Проблема в том, что при запуске nginx'а, запускаются как указано в конфигурации 4 worker'а, 1 мастер процесс. И воркеры дико грузят проц. При этом клиентов нет. В логах nginx'а никаких сообщений нет об ошибках, хоть при остановке, хоть при запуске. Клиенты когда подключаются, у них всё работает, но как мне кажется загрузка процессора четырьмя процессами в постоянном режиме ситуация неправильная. Оба бэкенда на lighttpd работают, у них нагрузки никакой. Подскажите где порыть, чтобы разобраться с проблемой?

Информация по серверу:
uname -a

Код: Выделить всё

FreeBSD BSD-ARK 11.0-PRERELEASE FreeBSD 11.0-PRERELEASE #0 r306459M: Fri Sep 30 02:47:16 MSK 2016    me@BSD-ARK:/usr/obj/usr/src/sys/SERV  amd64
На нём несколько клеток:
jls

Код: Выделить всё

   JID  IP Address      Hostname                      Path
     7  10.10.10.4      www.php                       /var/jails/www.php
     8  10.10.10.1      www.nginx                     /var/jails/www.nginx
     9  10.10.10.2      voip.asterisk                 /var/jails/voip.asterisk
    10  10.10.20.2      site2.local                   /var/jails/site2.local
    11  10.10.20.1      site1.local                   /var/jails/site1.local
    12  10.10.10.3      db.mysql                      /var/jails/db.mysql
Соответственно входящие коннекты к серверу на 80 и 443 порт идут на клетку с nginx'ом:

Код: Выделить всё

01800       404       37402 fwd 10.10.10.1,80 tcp from any to me dst-port 80 in
01900   5946454  2193548839 fwd 10.10.10.1,443 tcp from any to me dst-port 443 in
В клетке с nginx'ом версия
pkg info | grep nginx

Код: Выделить всё

nginx-1.10.2_1,2               Robust and small WWW server
В nginx'е простая конфигурация с двумя бэкендами:
nginx.conf

Код: Выделить всё

user    nobody;
worker_processes        4;

error_log       /var/log/nginx/error.log;
pid     /var/run/nginx/nginx.pid;

events {
        worker_connections  1024;
}

http {
        include mime.types;
        default_type    application/octet-stream;
        access_log      /var/log/nginx/access.log;

        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     on;

        keepalive_timeout       65;
        gzip    on;

        server {
                listen          10.10.10.1:80;
                server_name    site1.local;
                rewrite         ^ https://$host$request_uri? permanent;
        }


        server {
                listen  443;
                server_name    site1.local;

                charset utf8;

                ssl     on;
                ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
                ssl_certificate         /etc/ssl/nginx/site1.pem;
                ssl_certificate_key     /etc/ssl/nginx/site1.key;
                ssl_session_cache       shared:SSL:10m;
                ssl_session_timeout     10m;
                # ssl_ciphers           AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;

                access_log      /var/log/nginx/site1.acc.log  combined;
                error_log       /var/log/nginx/site1.err.log;


                location / {
                        proxy_set_header        Host    $host;
                        proxy_set_header        X-Real-IP       $remote_addr;
                        proxy_set_header        X-Forwarded-For $remote_addr;
                        proxy_pass              http://10.10.20.1:80;

                        proxy_connect_timeout   120;
                        proxy_send_timeout      120;
                        proxy_read_timeout      120;
                        index                   index.php;
                }
        }

        server {
                listen          443;
                server_name     site2.local;

                charset         utf8;

                ssl     on;
                ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
                ssl_certificate         /etc/ssl/nginx/site2.pem;
                ssl_certificate_key     /etc/ssl/nginx/site2.key;
                ssl_session_cache       shared:SSL:10m;
                ssl_session_timeout     10m;
                # ssl_ciphers           AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;

                access_log      /var/log/nginx/site2.acc.log      combined;
                error_log       /var/log/nginx/site2.err.log;


                location / {
                        proxy_set_header        Host    $host;
                        proxy_set_header        X-Real-IP       $remote_addr;
                        proxy_set_header        X-Forwarded-For $remote_addr;
                        proxy_pass              http://10.10.20.2:80;

                        proxy_connect_timeout   120;
                        proxy_send_timeout      120;
                        proxy_read_timeout      120;
                        index                   index.php;
                }

        }
}
Ошибок в логах nginx'а никаких, в messages тоже никаких.
Кто не рискует - тот не пьёт шампанского.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

nginx грузит проц в простое

Непрочитанное сообщение Amadeus » 2016-11-17 18:22:21

Ну допустим,

Только одно но. Нагрузка на камень то где?

Код: Выделить всё

 ps auxw | grep nginx
Нет ничего невозможного

Аватара пользователя
Духовитин
мл. сержант
Сообщения: 125
Зарегистрирован: 2014-12-17 8:46:05

nginx грузит проц в простое

Непрочитанное сообщение Духовитин » 2016-11-17 19:01:38

Пожалуйста:

Код: Выделить всё

nobody 45051 44.4  0.1 39660 9144  -  RJ   10:29   241:41.72 nginx: worker process (nginx)
nobody 45053 42.3  0.1 39660 9300  -  SJ   10:29   240:03.61 nginx: worker process (nginx)
nobody 45052 37.0  0.1 39660 9036  -  RJ   10:29   240:10.00 nginx: worker process (nginx)
nobody 45050 32.9  0.1 39660 8884  -  SJ   10:29   241:51.87 nginx: worker process (nginx)
root   45049  0.0  0.0 39660 6892  -  IsJ  10:29     0:00.00 nginx: master process /usr/local/sbin/nginx
Отправлено спустя 47 секунд:
И это прямо сейчас, когда клиентов использующих обслуживаемые им сайты ровно 0.
Кто не рискует - тот не пьёт шампанского.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

nginx грузит проц в простое

Непрочитанное сообщение Amadeus » 2016-11-17 19:16:20

1) Во первых приведите в порядок конфиг. Это - копипаст с разных источников

Для поиска проблемы, раз вы говорите, что без клиентов, оставьте, ТОЛЬКО например секцию http в nginx.conf

например так

Код: Выделить всё


load_module /usr/local/libexec/nginx/ngx_http_headers_more_filter_module.so;
load_module /usr/local/libexec/nginx/ngx_mail_module.so;
load_module /usr/local/libexec/nginx/ngx_stream_module.so;
load_module /usr/local/libexec/nginx/ngx_http_lua_module.so;

worker_processes  7;

events {
    use kqueue;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    client_max_body_size 30m;
    port_in_redirect off;
    server_tokens off;
}
И перезапустите. Нагрузка останется?

Отправлено спустя 2 минуты 6 секунд:
Духовитин писал(а): user    nobody;
Вот это тоже интересный момент. Сие откуда? Вы проверили что этот пользователь имеет доступ ко всем пидам, ко всем логам и т.д и т.п?
Нет ничего невозможного

Аватара пользователя
Духовитин
мл. сержант
Сообщения: 125
Зарегистрирован: 2014-12-17 8:46:05

nginx грузит проц в простое

Непрочитанное сообщение Духовитин » 2016-11-17 20:05:05

Сделал минимальный конфиг, с ним всё в порядке. Не грузит проц. Сейчас потихоньку пойду к своему и буду вычислять что мешало жить.
По поводу пользователя, к логам доступ у него есть (логи ведудтся, права проверил), к папке с пидами тоже доступ есть, проблема только что nginx в своём rc-скрипте при перезаске ищет для остановки пид исключительно по такому пути /var/run/nginx.pid
Я в итоге так как в конфиге указан был путь для пидов другой, то просто для перезапуска убивал все nginx'ы и запускал.
Кто не рискует - тот не пьёт шампанского.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

nginx грузит проц в простое

Непрочитанное сообщение Amadeus » 2016-11-17 20:29:02

проблема только что nginx в своём rc-скрипте при перезаске ищет для остановки пид исключительно по такому пути /var/run/nginx.pid
Я в итоге так как в конфиге указан был путь для пидов другой, то просто для перезапуска убивал все nginx'ы и запускал.
Не надо обращаться с FreeBSD как с линуксом. Чем вам мешает стандартное место старт стопа веб сервера? На этот пид завязан какой нибудь еще функционал? Героически создаем проблемы сами себе, что бы потом сами эти проблемы и решать.

Лучше не сводить конфиг к тому что у Вас написано, а написать заново и корректно.

Например всю работу с отдельными фронтендами вынести в виртуальные хосты.

Далее зачем вы например сжатие безусловно объявили

Код: Выделить всё

gzip    on;

Вот это явно с какого то линукс мана

Код: Выделить всё

     ssl_certificate         /etc/ssl/nginx/site2.pem;
                ssl_certificate_key     /etc/ssl/nginx/site2.key;
Ну и + пользователь. Забейте на этого nobody. Запустите веб сервер под www. Точнее просто запустите, он там по дефолту, если без указания пользователя, имеется ввиду воркеры

Отправлено спустя 9 минут 12 секунд:
+

Код: Выделить всё

/var/tmp/nginx


В случае фряхи.

Код: Выделить всё

[root@dbstat /var/tmp]# ls -axl /var/tmp/nginx
total 39
drwxr-xr-x   7 root  wheel   7 Jun 13 16:22 .
drwxrwxrwt   4 root  wheel   4 Jun 12 04:42 ..
drwx------   2 www   wheel   2 Nov 17 18:51 client_body_temp
drwx------   2 www   wheel   2 Jun 13 16:22 fastcgi_temp
drwx------  12 www   wheel  12 Jun 13 23:50 proxy_temp
drwx------   2 www   wheel   2 Jun 13 16:22 scgi_temp
drwx------   2 www   wheel   2 Jun 13 16:22 uwsgi_temp
[root@dbstat /var/tmp]# ls -axl /var/tmp/ | grep nginx
drwxr-xr-x   7 root  wheel   7 Jun 13 16:22 nginx
Если вы меняйте пользователя - вот это все так же должно быть корректно изменено
Нет ничего невозможного

Аватара пользователя
Духовитин
мл. сержант
Сообщения: 125
Зарегистрирован: 2014-12-17 8:46:05

nginx грузит проц в простое

Непрочитанное сообщение Духовитин » 2016-11-17 20:41:27

В итоге учёл ваши рекоммендации по чистке конфига. Перегенерировал сертификаты и заработало.
Проверял до перегенерации и после, перестало тормозить после. Видимо напартачил при их создании.
Только по сжатию не понял в чём особая проблема? Сервак мощный, статики (картинок и прочей мультимедии) мало, в основном текстовые данные, а у офисов в которых тоже с этой внутренней системой через VPN работают, каналы не шибко широкие. Почему бы и не пожать? Проще в одном фронтенде настроить, чем во всех бэкендах.
Но видимо попозже сделаю сжатие только для определённых типов.

Спасибо за дельные советы!
Кто не рискует - тот не пьёт шампанского.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

nginx грузит проц в простое

Непрочитанное сообщение Amadeus » 2016-11-17 20:57:39

Духовитин писал(а): Только по сжатию не понял в чём особая проблема?
А кто по вашей логике расжимает данные? Где это осуществляется?
Духовитин писал(а): Проще в одном фронтенде настроить, чем во всех бэкендах.
Я имею ввиду секции сервер вынести по виртуальным хостам, дабы вам удобно их было потом портировать. Никто не просит переносить функционал на проксируемый бекенд.
ssl_certificate /etc/ssl/nginx/site1.pem;
И я немного не понял, зачем вы указывайте отдельно key если у вас есть pem файл?

Отправлено спустя 7 минут 59 секунд:
Последний момент зависит от самого сертификата, но если после создания возникают проблемы, можно в обоих случаях указать путь к pem файлу, так как pem - это общий вайл с цепочкой + содержимым файла .key
Нет ничего невозможного