Часть контента не грузится с ошибкой ERR_CONNECTION_TIMED_OUT

Тема в разделе "Администрирование серверов", создана пользователем verfaa, 27 сен 2015.

Модераторы: mefish, stooper
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    371
    Симпатии:
    41
    Приветствую всех.
    Есть сайт, который с недавнего времени стал очень долго грузиться.
    При запросе страницы часть контента отдается практически мгновенно, затем загрузка как бы подвисает и оставшаяся часть контента выдается через 10-30 секунд, а на часть контента google chrome пишет ошибку Net::ERR_CONNECTION_TIMED_OUT.
    Такое продолжается уже неделю, ранее все работало хорошо, пользователи стали жаловаться.

    Сервер выделенный, проект самопис.

    На сервере установлен nginx/1.0.15 и PHP: 5.5.29

    Вот скрины:
    [​IMG]

    Картинки которые не загрузились с ошибкой ERR_CONNECTION_TIMED_OUT на сервере есть, напрямую грузятся очень быстро.
    Если рефрешить страницу, часть контента будет отдаваться быстро - 30-60 мс, часть очень долго 10-20 сек, а часть (причем случайная - картинки, css и js файлы) вообще не будет подгружаться с ошибкой ERR_CONNECTION_TIMED_OUT. Итоговое время загрузки страницы - долго до нескольких минут, причем получается она неполной из-за недогрузки части контента.

    Прошу помочь.
     
  2. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    1. а как в других броузерах работает?
    2. логи сервера что говорят?
    3. обращались ли к разработчику неведомого скрипта?
    4. экстрасенсы в отпуске
    5. хрустальный шар не помогает
    6. проверить комп на вирусы
    7. проверить файл hosts
     
  3. vgrey

    vgrey Создатель

    Регистр.:
    27 июл 2012
    Сообщения:
    47
    Симпатии:
    15
    Как вариант - в nginx некоректно настроены ограничения.
     
  4. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    371
    Симпатии:
    41
    Попробую дать больше информации:
    Вот скрин команды top:
    [​IMG]
    Говорит о том, что свободных ресурсов на сервере предостаточно (сайт на выделенном сервере).
    -----------------
    Далее, результаты проверки на сервисе webopulsar.ru
    [​IMG]
    говорит о том, что время ожидания ответа сервера (Зависит от скорости выполнения серверной логики, запросов к базе данных.) - предпоследняя колонка находятся в допустимых пределах, следовательно проблема не на стороне PHP+MySQL - они генерируют контент очень быстро.

    Проблема я так понимаю находится где-то в nginx. Пересмотрел его ещё раз, добавил сжатие gzip, скорость загрузки страниц немного выросла, однако проблему совсем не решило. Вот часть конфига, комментарии делал когда-то для себя.


    Код:
    user              nginx;
    worker_processes  8;
    
    # Уменьшает число системных вызовов gettimeofday(),
    # что приводит к увеличению производительности
    timer_resolution 100ms;
    
    worker_rlimit_nofile 100000;
    
    # Директива задаёт приоритет рабочих процессов от -20 до 20
    # (отрицательное число означает более высокий приоритет).
    # Тут будьте осторожны, так как другие сервисы могут начать заметно тормозить.
    # На наших серверах этот параметрт установлен в -5.
    # Чем меньше значение — тем выше приоритет для nginx
    worker_priority -5;
    
    error_log  /var/log/nginx/error.log;
    #error_log  /var/log/nginx/error.log  notice;
    #error_log  /var/log/nginx/error.log  info;
    
    pid        /var/run/nginx.pid;
    
    
    #----------------------------------------------------------------------
    # Events Module
    #
    #   http://wiki.nginx.org/NginxHttpEventsModule
    #
    #----------------------------------------------------------------------
    
    events {
        worker_connections  2048;
        use epoll;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        fastcgi_buffers 8 1024k;
        fastcgi_buffer_size 1024k;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" "$gzip_ratio"';
    
        # access_log off;  # Отключаем логирование
        access_log  /var/log/nginx/access.log  main;
    
    
    
        charset utf-8; # Заставляем nginx принудительно отдавать в заголовках кодировку utf-8 для всех сайтов. ВАЖНО поставить, иначе гугл может индексить кракозяблы вместо русских букв
    
    expires    240h;
    
    # Задаёт максимально допустимый размер тела запроса клиента, указываемый в поле “Content-Length”
    # заголовка запроса. Если размер больше заданного, то клиенту возвращается ошибка 413 (Request Entity Too Large).
    # Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. Установка аргумента размер в 0
    # отключает проверку размера тела запроса клиента.
        client_max_body_size 32m;
    
    # размер буфера для чтения тела запроса клиента. Если тело запроса больше заданного буфера,
    # то всё тело запроса или только его часть записывается во временный файл. По умолчанию
    # размер одного буфера равен двум размерам страницы. На x86, других 32-битных платформах и
    # x86-64 это 8K. На других 64-битных платформах это обычно 16K.
        client_body_buffer_size    128k;
    
    
    # Включить sendfile(). Использование sendfile() экономит
    # системные вызовы, уменьшает число копирований данных,
    # позволяет использовать меньше физической памяти.
        sendfile        on;
        tcp_nopush     on;
        tcp_nodelay     on;
        server_tokens   off;
    gzip            on;
    gzip_min_length 1000;
    gzip_proxied    any;
    gzip_types      *;
    
    
    
    # При значении 0 конфиг максимально готов к ddos. тут механизм таков, что ddos на сервер может идти не путем запроса всех страниц и получение страницы,
    # а просто отправкой пакетов на запрос и разрыв соединения. А при keepalive_timeout 65;  Nginx еще 65 секунд будет держать порт за пользователем.
    # т.е. 100 посетителей в секунду и через 65 секунд кончатся все порты.
        keepalive_timeout 0; # не стоит держать соединение, если оно прервалось. клиент может и обновить страничку, а серверу приходится держать лишний порт.
    #   keepalive_timeout  65; # Было такое значение раньше, во многих конфигах из нета стоит именно оно
     
    
    limit_zone   myzone  $binary_remote_addr  10m;
    
     
    # зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения
        output_buffers   4 64k; # настройка для одного клиента, т.е. ему одному 4 буфера по 64 килобайта
    
    # если строка запроса или поле заголовка запроса не помещаются полностью в этот буфер, то выделяются буферы большего размера,
    # задаваемые директивой large_client_header_buffers
    client_header_buffer_size 8k; # размер буфера для чтения заголовка запроса клиента.
    
    # максимальное число и размер буферов для чтения большого заголовка запроса клиента. Строка запроса не должна превышать размера
    # одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не должно превышать
    # размера одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request).
    large_client_header_buffers  4 16k;
    
    proxy_temp_file_write_size 64k;
    
    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;
    
    
    ### Nginx permanent (301) redirect from www.domain.com to domain.com
    server {
         listen MY_IP:80;
         server_name   ~^(www\.|ns1\.|ns2\.)(?<domain>.+)$;
         rewrite ^ $scheme://$domain$request_uri? permanent; #301 redirect
    }
    
    server {
    
    listen MY_IP:80;
    
        server_name ~^(www\.)?(.+)$;
    
        location / {
            root   /home/domen.com/site;
            index  index.php index.html index.htm;
        }
    
        error_page  404              /404.html;
        location = /404.html {
            root   /home/domen.com/site/cssjs/404;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        location /nginx_status { # Получаем информацию по текущему состоянию nginx
            # Active connections — количество открытых соединений
            # server accepts handled requests — Сервер принял 96296 соединения, обработал 96296 соединения и обработал 170563 запроса (1.77 запросов/соединение)
            # Reading — количество запросов, заголовки которых nginx читает в данный момент
            # Writing — количество запросов, тело которых читает nginx + количество запросов для которых nginx отдает данные
            # Waiting — количетсво keep-alive соединений, расчитывается как: waiting = active — reading — writing
            stub_status on;
            access_log   off;
        }
    
        ######### 301 permanent redirect (i.e. from /faq.php to /faq/) #########
    
        # 301 redirect from /index.php to /
        if ( $request_uri ~ "^/index.(php|html?)" ) {
            rewrite ^ /$1 permanent;
        }
    
        location ~ \.php$ {
            root           /home/domen.com/site;
            try_files $uri =404;
            fastcgi_pass   unix:/tmp/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_read_timeout 3600; ## 1 час
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
    
        location ~ /\.ht {
            deny  all;
        }
    
        rewrite ^/en/?$ /?language_code=1&$args last;
        rewrite ^/ru/?$ /?language_code=2&$args last;
    
    
    
    сервер Xeon E3-1220 Quad Core 3.1GHZ

    На моем ПК вирусов нет, позавчера переустановил виндовс, предварительно отфарматировав диск С
     
    latteo нравится это.
  5. mefish

    mefish Support

    Moderator
    • Супермодератор
    Регистр.:
    30 авг 2007
    Сообщения:
    915
    Симпатии:
    643
    что в логах по файлам 1.jpg sprite.png ??
     
  6. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    371
    Симпатии:
    41
    В /var/log/nginx/error.log только ошибки вида
    Код:
    2015/09/27 15:50:25 [error] 1866#0: *4912 open() "/home/domen.com/images/gyuu.png" failed (2: No such file or directory), client: 185.26.180.153, server: ...
    причём попробовал поискать в этом файле свой IP - не нашёл, хотя страницы рефрешил и сообщения об ошибках получал в браузере.

    у меня были мысли, может с каналом на сервере что-то не так. Или у моего провайдера проблемы с доступом до голландии
    Короче, вот сайт, http://bamoo.ru если интересно, в хроме жмете f12 - вкладка network и рефрешите, может проблема у меня только, хз
     
  7. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    всё нормально загружается в разных броузерах. без ошибок.


    еще раз вопрос:
    1. в других броузерах есть ошибки?

    адблоки и прочие "радости" в броузере?
     
    verfaa нравится это.
  8. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    371
    Симпатии:
    41
    да, адблок стоял, т.к. писал функцию детекта этого плагина для сайта.
    Неужели он и есть причина проблем с загрузкой сайта??
    Он уже месяца полтора точно стоит, и все нормально было, а потом резко пошли проблемы.
    В других браузерах визуально грузилось быстрее, особенно в IE.
    В любом случае, сегодня у меня уже быстро грузится во всех браузерах.
    Что сделал:
    добавил сжатие gzip в nginx
    убрал адблок
    добавил в конфиг nginx expires 240h;
    сжал картинки сервисом optimizilla.com
    тяжелые css js оптимизировал в PageSpeed

    Кстати, а насколько оправданно включать gzip в nginx?
    Где-то читал что вреда (в виде повышенной нагрузки на процессор) больше чем пользы.
    И какой уровень компрессии ставить оптимальнее всего?
     
    latteo нравится это.
  9. vgrey

    vgrey Создатель

    Регистр.:
    27 июл 2012
    Сообщения:
    47
    Симпатии:
    15
    Вместо expires 240h; можно писать expires 10d;. Есни не ошибаюсь, Гугл рекомендует 7d.

    При степени сжатия 1, нагрузку на прочессор заметить можно только скурпулезными измерениям. Дальше просто ссылки:
    http://habrahabr.ru/post/99256/
    http://webo.in/articles/habrahabr/30-gzip-versus-broadband/
    http://webo.in/tools/gzip-cpu/
    http://nginx.org/ru/docs/http/ngx_http_gzip_module.html#gzip_min_length

    ---
    Виктор