LINUX.ORG.RU

почему возникает connection timeout nginx и 503 ошибка?

 , ,


0

2

ИТ - коллеги, здравствуйте!

Обращаюсь за помощью к вам.

Ситуация. В логах nginx ошибка

*2283376 connect() failed (110: Connection timed out) while connecting to upstream, client: 130.193.37.19, server: server.ru, request: «GET /catalog/polki-dlya-vannoy/00006183 HTTP/1.1», upstream: "http://127.0.0.1:8887/catalog/polki-dlya-vannoy/00006183", host: «server.ru»

Пользователи сайта жалуются, что сайт не работает. Ошибка - Service temporarily unavailable.

Вопрос. Как найти причину Connection timed out? И устранить её.

Что пробовали делать. Менять таймауты nginx

        proxy_connect_timeout           500;
        proxy_send_timeout              500;
        proxy_read_timeout              500;

Это не решение. Ошибка пропала, но сайт не доступен пользователю.

Менять настройки prefork на рекомендуемые битрикс.

<IfModule prefork.c>
StartServers 20
MinSpareServers 10
MaxSpareServers 30
MaxClients 30
MaxRequestsPerChild 1000
</IfModule>

Не помогло.

На сервере настроен мониторинг. Можно смотреть загрузку сеть, диски, соединения, mysql запросы.

Гипотезы.

Загибается апатч. Какие- то параметры апач достигают максимум и от выдаёт timeout nginx. Какие настройки апач проверить?
Апач загибается из за настроек php. Какие настройки php проверить?

Сайт на битрикс, vds.

Аппаратная конфигурация сервера:

  • RAM 40 G, свободно 34 g.
  • HDD (raid 1, 2* SAS 15k) 120G свободно 40 G

Программная конфигурация:

  • Версия ОС - CentOS release 6.2
  • Версия битрикс окружения - 3.01
  • Версия php - 5.3.14
  • Версия nginx - 1.0.6
  • Версия mysql - 5.1.69-log
  • Версия apache - 2.2.15

Конфигурации nginx

user bitrix;
worker_processes 8;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_rlimit_nofile 10240;

events {
        use epoll;
        worker_connections  10240;
}

http {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        log_format main '$remote_addr - $remote_user [$time_local] $status                                '
                        '"$request" $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
         log_format main2 '$remote_addr - $remote_user [$time_local] $host $request '
                '$status $body_bytes_sent "$http_referer" "$http_user_agent" '
                '"$http_x_forwarded_for" $request_time-$upstream_response_time';

        log_format common '$remote_addr - - [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent" $msec';
        #access_log /var/log/nginx/access.log  common;
        access_log                      off;
        sendfile                        on;
        tcp_nopush                      on;
        tcp_nodelay                     on;

        client_max_body_size            1024m;
        client_body_buffer_size         4m;

        proxy_connect_timeout           500;
        proxy_send_timeout              500;
        proxy_read_timeout              500;
        proxy_buffer_size               64k;
        proxy_buffers                   8 256k;
        proxy_busy_buffers_size         256k;
        proxy_temp_file_write_size      10m;

        error_page 500 502 503 504 /500.html;
        error_page 404 = /404.php;

        gzip                    on;
        gzip_proxied            any;
        gzip_static             on;
        gzip_http_version       1.0;
        gzip_types              application/x-javascript text/css;

        include conf.d/*;
        include bx/site_enabled/*.conf;
        include bx/site_ext_enabled/*.conf;

}

Конфигурация apache

ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15

<IfModule prefork.c>
StartServers 20
MinSpareServers 10
MaxSpareServers 30
MaxClients 30
MaxRequestsPerChild 1000
</IfModule>

<IfModule worker.c>
StartServers 20
MinSpareServers 10
MaxSpareServers 30
MaxClients 30
MaxRequestsPerChild 1000
</IfModule>


LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

Include conf.d/*.conf

User bitrix
Group bitrix

ServerAdmin root@localhost

UseCanonicalName Off

DocumentRoot "/home/bitrix/www"

<Directory />
    Options FollowSymLinks
    AllowOverride None


</Directory>

<IfModule mod_userdir.c>
    UserDir disable
</IfModule>

DirectoryIndex index.html index.html.var

AccessFileName .htaccess

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

TypesConfig /etc/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
    MIMEMagicFile conf/magic
</IfModule>

HostnameLookups On

ErrorLog logs/error_log

LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent


ServerSignature On

<IfModule mod_dav_fs.c>
    # Location of the WebDAV lock database.
    DAVLockDB /var/lib/dav/lockdb
</IfModule>

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw



AddDefaultCharset UTF-8

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

AddHandler type-map var
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
<IfModule mod_status.c>
ExtendedStatus On
<Location /server-status>
    SetHandler server-status
    Allow from all
</Location>
</IfModule>


Конфигурация virtual host

<VirtualHost *:8887>
        ServerName server.ru
        ServerAlias www.server.ru
        ServerAdmin webmaster@localhost
        DocumentRoot /home/bitrix/ext_www/lmh



        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /home/bitrix/ext_www/lmh>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                DirectoryIndex index.php index.html index.htm
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog logs/error_log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn


    <IfModule mod_rewrite.c>
    #Nginx should have "proxy_set_header HTTPS YES;" in location
    RewriteEngine On
    RewriteCond %{HTTP:HTTPS} =YES
    RewriteRule .* - [E=HTTPS:on,L]
    </IfModule>

</VirtualHost>

Ответ на: комментарий от Hater

Отставить. Похоже что веб-приложение очень медленно отвечает.

Даже и не знаю что посоветовать. Может быть, БД заблокирована какой-то транзакцией или типа того. Что происходит в логах приложения?

Hater ★★ ()
Ответ на: комментарий от Hater

netstat -an | grep ":8887"

Количество соединений мониторю. Были «всплески». По типам соединений оказалось, что был syn-flood. Закрыл от флуда.

В логах какого приложения? php?

Может быть, БД заблокирована какой-то транзакцией или типа того.

Какие параметры бд смотреть? Чтобы понять, заблокированна она или нет?

sky_leo ()
Ответ на: комментарий от sky_leo

В логах какого приложения? php?

Да, и apache в целом.

Какие параметры бд смотреть? Чтобы понять, заблокированна она или нет?

Посмотри что висит в текущих запросах:

show processlist;

Если что-то будет висеть долго, то это и будет звоночком.

Hater ★★ ()

Иди в скрипты и замеряй

GET /catalog/polki-dlya-vannoy/00006183 HTTP/1.1

Настройки конечно адовые, но дело скорее всего не в них. Замерь скрипт и скажи нам, может у тебя там жирные запросы или дофига обработки и т.д. и т.п.

znenyegvkby ()
Ответ на: комментарий от Hater

Hater, спасибо. промониторю текущие запросы.

Логи apache

https://goo.gl/NuaxHp

reached MaxClients setting

Установили минимум. Увеличивали с маленьким шагом MaxClient, пока не пропала ошибка.

[Tue Jun 07 10:13:14 2016] [notice] caught SIGTERM, shutting down

Поставили сами по крону перезапуск apache

znenyegvkby, спасибо. В эту сторону не догадался смотреть. Найду топ 10 url по которым timeout и проверю их.

sky_leo ()

Менять таймауты nginx

Ни в коем случае и нипри каких обстоятельствах не надо так делать!!!11

Goury ★★★★★ ()
Ответ на: комментарий от sky_leo

ты кодер проекта или админ? если админ, зови кодера и пусть смотрит бд, смотрит свой код. Далее, обнови систему, до 6.8 хотя бы, версии php не изменятся, это ужас. Если ты не кодер проекта, тупо зови, кто тебе его делал, пусть он запросы исправляет.

erzen ()
Ответ на: комментарий от sky_leo

А самому не видно? Некоторые запросы висят больше минуты, причем выбирается их (записей) с гулькин нос. Очевидно же что куча ненужных джойнов, причем половина таблиц явно без нужных индексов. Хотя что тут сказать – битрикс – одно слово.

znenyegvkby ()
Последнее исправление: znenyegvkby (всего исправлений: 1)
Ответ на: комментарий от erzen

erzen, я админ. кодеры говорят проблема не на нашей стороне. Если бы проблема была у нас то сайт постоянно бы тормозил. Это тоже правильный вопрос. Понять, проблема в сфере ответвенности админа, или кодера. Я не могу пока найти где кончается админ и начинается кодер.

sky_leo ()
Ответ на: комментарий от znenyegvkby

znenyegvkby,извни,самому нет, не видно. с mysql так плотно не работал. Можешь сказать пример такого долгого запроса и когда от был по дате, время?

sky_leo ()
Ответ на: комментарий от sky_leo

Все запросы в твоем логе безобразно долгие. Некоторые из них анализируют _всего 30-40 записей_! Причем выполняются по 100 секунд. Для примера, на наших текущих серверах тоже есть mySQL для системы остатков. При правильно построенных индексах, мы делаем примерно такие же запросы (с 3-4-мя джойнами), при этом анализируют около 0.5-1кк записей, выбирается 1-2к, а запрос выполняется не больше секунды. И это еще много, нужно оптимизировать. Можешь взять любой запрос из твоего лога на SELECT, например

SELECT DISTINCT B.*, B.XML_ID as EXTERNAL_ID,
    DATE_FORMAT(B.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') 
    as TIMESTAMP_X,
    L.DIR as LANG_DIR, L.SERVER_NAME
    FROM b_iblock B
    INNER JOIN b_lang L ON L.LID=B.LID
    WHERE 1 = 1
    AND (B.ID IN 
           (SELECT IBLOCK_ID
            FROM b_iblock_group IBG
            WHERE IBG.GROUP_ID IN (2)
            AND IBG.PERMISSION >= 'R')
    OR (B.RIGHTS_MODE = 'E' 
            AND B.ID IN 
            (SELECT IBLOCK_ID
            FROM b_iblock_right IBR
            INNER JOIN b_task_operation T 
                ON T.TASK_ID = IBR.TASK_ID
            INNER JOIN b_operation O 
                ON O.ID = T.OPERATION_ID
            INNER JOIN b_user_access UA 
                ON UA.ACCESS_CODE = IBR.GROUP_CODE 
                AND UA.USER_ID = 0
            WHERE IBR.ENTITY_TYPE = 'iblock'
                AND O.NAME in ('section_read','element_read','section_element_bind','section_section_bind'))))
                AND  ((((B.CODE LIKE 'catalog_shop'))))
и посмотреть на результат его выполнения
Query_time: 93.032570  Lock_time: 0.000161 Rows_sent: 1  Rows_examined: 33
Тебе нужно оптимизировать запросы + устанавливать индексы.

с mysql так плотно не работал.

Тогда придется изучать. Бери любой запрос, например этот. И делай его в консоли с помощью EXPLAIN, он сразу все тебе покажет, где какие индексы нужны, где лишние джойны и прочее и прочее. От LIKE-ов и IN для текста вообще нужно отказываться в первую очередь. Вообщем смотри запросы, это битрикс генерирует это уродство, и я надеюсь такие запросы не люди руками пишут? :))

znenyegvkby ()
Ответ на: комментарий от sky_leo

кодеры говорят проблема не на нашей стороне.

Скинь им лог slow-запросов которые сейчас вылил, и пусть они обосрутся.

znenyegvkby ()
Ответ на: комментарий от sky_leo

Как интерпретировать результат EXPLAIN?

http://dev.mysql.com/doc/refman/5.7/en/explain-output.html

Query_time: в секундах измеряется?

Если все по дефолту, то да.

У вас _все_ запросы такие. Вы не сможете оптимизируя один запрос сейчас что-либо выиграть. Вам нужна полная реструктуризация схем таблиц и связей скорее всего, или хотя бы анализ существующих индексов и их доработка. И только потом оптимизация. Вы же уже сказали выше, что

с mysql так плотно не работал.

а если не работали, то можете наделать только хуже. Поэтому обратитесь к вашим программистам. Одно вам я могу сказать точно. Проблема _только в запросах и структуре БД_. А в битриксе, ЕМНИП, все это генерируется автоматически. Сл-но, это конечная проблема программистов, и вам, как сис. админу незачем этим заниматься. Да, можно поковыряться в ваших натройках и улучшить производительность на 5-10%, но с прибавлением еще N+m пользователей и увеличением нагрузки вся эта работа пойдет коту под хвост. Поэтому можете смело обращаться к программистам.

znenyegvkby ()
Ответ на: комментарий от sky_leo

не скажу за mysql но explain может отдавать только план выполнения запроса. например в postgresql explain - только план запроса а explain analyze уже конкретная статистика непосредственно выполнения запроса.

exception13 ★★★★★ ()

Может, системное время не так стоит? sudo ntpdate ntp.nsu.ru

ZenitharChampion ★★★★★ ()
Ответ на: Спасибо! от sky_leo

Вангую, что у вас таблицы MyISAM лочатся при синхронизации с 1С. Медленные запросы тут следствие, а не причина.

Если так, то переводите на InnoDB, битрикс это вроде умеет.

NeOlip ★★ ()
Ответ на: комментарий от NeOlip

Вангую попало в цель ))

У нас в innodb таблицы. При синхронизации с 1с тоже наблюдаются проблемы timeout и 503.

Синхронизация идет блоками по 220 кб. Выгрузка прайса (выполнение php скрипта) на сайт. Размер прайса 2G.

Если поменять размер блоков, это может решить проблему?

sky_leo ()
Ответ на: комментарий от sky_leo

У нас в innodb таблицы.

Я бы на всякий случай перепроверил. Если действительно так, то стоит покопать конфиг mysql в сторону параметров

innodb_buffer_pool_size
innodb_thread_concurrency
innodb_flush_log_at_trx_commit
innodb_flush_method
transaction-isolation

Посмотрите в админке рекомендации битрикса по настройке, может там что-то полезное будет.

Если поменять размер блоков, это может решить проблему?

Сомнительно.

NeOlip ★★ ()
Последнее исправление: NeOlip (всего исправлений: 1)
Ответ на: комментарий от NeOlip

Спасибо. Настройки mysql проверил. Есть такие параметры. Установлены в значения, рекомендуемые битрикс.

Так же есть параметр

skip-external-locking

sky_leo ()
Ответ на: комментарий от NeOlip

Спасибо

Спасибо всем, кто откликнулся. Тему закрываю.

sky_leo ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.