Re: Очень медленный ответ после нескольких быстрых ответов
Поскольку с помощью опций nginx нельзя, я сделал отмену предыдущего запроса в приложении (как многократно рекомендовалось). Работает быстро и без ошибок. Спасибо всем за рекомендации и прояснения! Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276726#msg-276726 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
28.09.2017, 22:06, "EugeneNF": > Так это всё экспериментальные значения, на которые заменялись параметры по > умолчанию. > Я получил ровно один прямой ответ на то, что я бы хотел иметь от nginx: > "Нельзя". Просто при виде такого вопроса невольно подозреваешь XY problem > > Posted at Nginx Forum: > https://forum.nginx.org/read.php?21,276486,276609#msg-276609 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru -- Regards, Konstantin ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Так это всё экспериментальные значения, на которые заменялись параметры по умолчанию. Я получил ровно один прямой ответ на то, что я бы хотел иметь от nginx: "Нельзя". Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276609#msg-276609 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On 28.09.2017 11:39, EugeneNF wrote: error_log /var/log/nginx/error.log debug; для того чтобы получить отладочный лог надо переключить бинарник на nginx-debug подробнее об этом тут: http://nginx.org/ru/docs/debugging_log.html для отладки удобно включать только debug_connection с определенного IP-адреса, чтобы лог не был очень большим. кроме того, не понятно какая у Вас стоит версия nginx, что показывает "nginx -V" ? воспроизводится ли проблема, если взять nginx из официального репозитория http://nginx.org/ru/linux_packages.html#mainline ? keepalive_timeout 1; uwsgi_connect_timeout 1; uwsgi_read_timeout 1; uwsgi_send_timeout 1; лучше оставить дефолтовые значения этих параметров. > uwsgi_buffers 64 1M; > proxy_buffers 64 1M; слишком большие значения, если выделять по 64 мегабайта памяти на одно клиентское соединение - то память очень быстро закончится. лучше использовать дефолтовые значения этих параметров. -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
1) местами от ваших конфигов возникает чувство что делались по статье "как сделать всё в самых bad practices что только есть", но не буду учить, ладно. 2) попробуйте заменить unix-сокет между NgX и uwsgi на tcp ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
В письме от четверг, 28 сентября 2017 г. 15:19:26 +07 пользователь EugeneNF написал: > Как было рекомендовано я добавил $request_time и $upstream_response_time. > После нескольких запросов и быстрых ответов лог файлы и для nginx и для > uwsgi не показывают ничего. Через время ~1min вываливаются все накопленные > длинные запросы и показывают ожидаемое значения ~1 min для $request_time и > upstream_response_time. Мой вывод - nginx не принимает новых запросов пока Неправильный вывод. Правильный - апстрим (бекенд) ковыряет в носу в течение минуты и только после этого отвечает. > не обработаются старые длительные. Меня это не устраивает. Я хочу отменить, > сделать reset и т.д. для старых запросов при получении новых запросов с > того же самого IP. Вам уже как минимум трижды сказали: делайте это на бекенде и всё будет работать как вы хотите. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Буду очень признателен, если глянете на мои конфигурационные файлы для nginx и uwsgi # nginx.conf: user nginx; worker_processes 10; error_log /var/log/nginx/error.log debug; pid/var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr| $time_local]| $request| $request_time| $upstream_response_time| ' '$status|$body_bytes_sent|$http_referer|' '$http_user_agent'; access_log /var/log/nginx/access.log main; sendfileon; keepalive_timeout 1; tcp_nopush on; tcp_nodelay on; limit_rate 0; disable_symlinks off; include /etc/nginx/conf.d/*.conf; } ### nf.conf: server { listen 80; server_name nf.com; root /NF; charset win-1251; location / { index index.html index.htm; } location /fs { allow all; include uwsgi_params; uwsgi_pass unix:/run/uwsgi/FS.sock; uwsgi_ignore_client_abort on; uwsgi_connect_timeout 1; uwsgi_read_timeout 1; uwsgi_send_timeout 1; uwsgi_buffers 64 1M; proxy_buffers 64 1M; tcp_nopush on; tcp_nodelay on; limit_rate 0; # uwsgi.conf: [uwsgi] module = FS:application master = true processes = 12 enable-threads async = 1000 ugreen max-requests = 5000 post-buffering = false post-buffering-bufsize = 8192000 listen = 100 uid = nginx socket = /run/uwsgi/FS.sock chown-socket = nginx:nginx chmod-socket = 660 vacuum = true die-on-term = true logto = /NF/uwsgi.log Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276595#msg-276595 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Конечно я трассирую своё приложение. Проблема в том, что при посылке нового запроса, он не доходит до приложения. Лог файлы и для nginx и для uwsgi оживляются только после окончания долгого запроса. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276593#msg-276593 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Как было рекомендовано я добавил $request_time и $upstream_response_time. После нескольких запросов и быстрых ответов лог файлы и для nginx и для uwsgi не показывают ничего. Через время ~1min вываливаются все накопленные длинные запросы и показывают ожидаемое значения ~1 min для $request_time и upstream_response_time. Мой вывод - nginx не принимает новых запросов пока не обработаются старые длительные. Меня это не устраивает. Я хочу отменить, сделать reset и т.д. для старых запросов при получении новых запросов с того же самого IP. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276592#msg-276592 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Таймаут не подходит, поскольку в отсутствии второго запроса, первый запрос должен обработаться до конца независимо от его длительности. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276591#msg-276591 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On 27.09.2017 10:59, EugeneNF wrote: Попробую сформулировать по-другому то, что наблюдаю и пробую изменить. - nginx получает запрос по какому-то IP. Запрос выполняется очень долго. - посылается второй запрос с того же самого IP, когда предыдыущий запрос ещё не обработан и ответ не послан. Этот запрос не доходит до приложения, и нет возможности принять решение внутри приложения, что же делать в таком случае. В конфиге есть блок upstream и в этом блоке директива server c параметром max_conns=1 ? Покажите конфиг на котором воспроизводится эта проблема, если Вы уверены, что причина проблемы в nginx, а не в бекенде. Вопрос: можно ли настроить nginx таким образом, чтобы при посылки запроса с того же самого IP, предыдущий запрос просто обрывался и забывался. Я понимаю тяжёлые последствия такого сценария, но вопрос сейчас - можно или нельзя с помощью опции nginx это сделать? Нельзя. -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Могу предположить, что нечто подобное вы получите установив uwsgi_read_timeout в, например, 1-5 секунд (опытным путем подберете удобное вам значение). Из документации: "Задаёт таймаут при чтении ответа uwsgi-сервера. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями чтения. Если по истечении этого времени uwsgi-сервер ничего не передаст, соединение закрывается." Т.е. при превышении этого лимита nginx просто закроет соединение с вашим бэкэндом и пусть он (бэкэнд) сам потом решает что делать с обрабатываемым запросом. 27 сентября 2017 г., 11:12 пользователь EugeneNF < nginx-fo...@forum.nginx.org> написал: > Мне это реально нужно, поскольку второй запрос не доходит до > приложения и нет возможности правильно завершить первый долгий запрос. > > > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
А пробовали сделать лог своего приложения что-бы определить на каком моменте останавливается второй запрос? Тогда перед этим местом вы могли-бы, например, ставить какой-то общедоступный флаг, за которым следил-бы первый запрос и отрубался при его обнаружении. Т.е. решение тут вообще nginx не касается - это чисто прикладная задача. 27 сентября 2017 г., 11:18 пользователь EugeneNF < nginx-fo...@forum.nginx.org> написал: > Спасибо за ответ. Может быть 20 вокеров было мало. Попробую увеличить до > 50. > Но хотелось бы найти вариант застраховаться от "зависания". Поскольку нет > гарантии, что и 50 будет достаточно при посылки запросов со многих IP. Я > хочу для начала просто делать "reset" для зависшего IP и "начинать жизнь > сначала". > > Posted at Nginx Forum: https://forum.nginx.org/read. > php?21,276486,276566#msg-276566 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
привет! мне кажется, вы сами себя (и всех остальных) загнали в ловушку "я думаю, что проблема в этом и этом" не исключено, что это действительно так, но из приведенной диагностики у меня такой картины не сложилось можете более подробно объяснить ход вашей диагностики ? 27 сентября 2017 г., 13:12 пользователь EugeneNF < nginx-fo...@forum.nginx.org> написал: > Когда веб сервер получает запрос с какого-то IP, он знает и помнит этот IP. > Если посылается следующий запрос с того же самого IP в тот момент, когда > предыдущий запрос ещё не обработан и ответ не послан, есть ли возможность > настроить nginx, чтобы предыдущий запрос был полностью "разрушен и забыт". > Пока вопрос не о тяжёлых последствия такого сценария, а о принципиальной > возможности. Мне это реально нужно, поскольку второй запрос не доходит до > приложения и нет возможности правильно завершить первый долгий запрос. > > Posted at Nginx Forum: https://forum.nginx.org/read. > php?21,276486,276565#msg-276565 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Спасибо за ответ. Может быть 20 вокеров было мало. Попробую увеличить до 50. Но хотелось бы найти вариант застраховаться от "зависания". Поскольку нет гарантии, что и 50 будет достаточно при посылки запросов со многих IP. Я хочу для начала просто делать "reset" для зависшего IP и "начинать жизнь сначала". Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276566#msg-276566 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Когда веб сервер получает запрос с какого-то IP, он знает и помнит этот IP. Если посылается следующий запрос с того же самого IP в тот момент, когда предыдущий запрос ещё не обработан и ответ не послан, есть ли возможность настроить nginx, чтобы предыдущий запрос был полностью "разрушен и забыт". Пока вопрос не о тяжёлых последствия такого сценария, а о принципиальной возможности. Мне это реально нужно, поскольку второй запрос не доходит до приложения и нет возможности правильно завершить первый долгий запрос. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276565#msg-276565 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
С самого начала у меня есть подозрение что приложение запущено в одном воркере. В таком варианте, если оно не потоковое, запрос и будет блокироваться до окончания выполнения первого запроса. Может в этом дело? 27 сентября 2017 г., 10:59 пользователь EugeneNF < nginx-fo...@forum.nginx.org> написал: > Попробую сформулировать по-другому то, что наблюдаю и пробую изменить. > - nginx получает запрос по какому-то IP. Запрос выполняется очень долго. > - посылается второй запрос с того же самого IP, когда предыдыущий запрос > ещё > не обработан и ответ не послан. Этот запрос не доходит до приложения, и нет > возможности принять решение внутри приложения, что же делать в таком > случае. > Вопрос: можно ли настроить nginx таким образом, чтобы при посылки запроса с > того же самого IP, предыдущий запрос просто обрывался и забывался. Я > понимаю > тяжёлые последствия такого сценария, но вопрос сейчас - можно или нельзя с > помощью опции nginx это сделать? > > Posted at Nginx Forum: https://forum.nginx.org/read. > php?21,276486,276563#msg-276563 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Попробую сформулировать по-другому то, что наблюдаю и пробую изменить. - nginx получает запрос по какому-то IP. Запрос выполняется очень долго. - посылается второй запрос с того же самого IP, когда предыдыущий запрос ещё не обработан и ответ не послан. Этот запрос не доходит до приложения, и нет возможности принять решение внутри приложения, что же делать в таком случае. Вопрос: можно ли настроить nginx таким образом, чтобы при посылки запроса с того же самого IP, предыдущий запрос просто обрывался и забывался. Я понимаю тяжёлые последствия такого сценария, но вопрос сейчас - можно или нельзя с помощью опции nginx это сделать? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276563#msg-276563 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Hello! On Tue, Sep 26, 2017 at 04:07:34AM -0400, EugeneNF wrote: > Тут-то и возникает противоречие - как приложению узнать, что второй запрос > блокирован поскольку nginx ждёт окончания первого запроса? Тут у вас фактическая ошибка на входе, на которой вы строите свои рассуждения, и получаете мусор на выходе. Нет никакого "второй запрос блокирован поскольку nginx ждёт окончания первого запроса". С точки зрения nginx'а - запросы независимы, и nginx просто передаёт их туда, куда указывает конфигурация. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On Tue, Sep 26, 2017 at 04:07:34AM -0400, EugeneNF wrote: > Тут-то и возникает противоречие - как приложению узнать, что второй запрос > блокирован поскольку nginx ждёт окончания первого запроса? Решение видится > в два этапа - первое nginx просто обрывает первый запрос. Каким образом? Вместо абстрактных фантазий лучше напишите конкретно что значит "обрывает запрос" -- какие системные вызовы используются, что отправляется клиенту, что серверу приложений? Почему вы думаете, что сервер приложений чего-то ждёт от апстрима, чтобы срочно прервать свою работу? А если не ждёт, то как он узнает, что запрос нужно прекратить обрабатывать? > А приложение уже решает, что же делать при потере связи с клиентом, Как оно узнает о потере связи? Конкретный механизм, pls. Какие вызовы, какие пакеты пересылаются, какие сигналы/ошибки/etc получает процесс. > т.е. заканчивает работу > с закрытием всего открытого - файлов, баз данных и т.д. А если базе отправлен запрос, который она будет молотить долгое время, как его прервать? Это точно такая же проблема, которая возникает при взаимодействии сервера приложений и nginx, между которыми нет никакой асинхронной коммуникации. -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Тут-то и возникает противоречие - как приложению узнать, что второй запрос блокирован поскольку nginx ждёт окончания первого запроса? Решение видится в два этапа - первое nginx просто обрывает первый запрос. А приложение уже решает, что же делать при потере связи с клиентом, т.е. заканчивает работу с закрытием всего открытого - файлов, баз данных и т.д. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276538#msg-276538 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On Mon, Sep 25, 2017 at 03:27:54PM -0400, EugeneNF wrote: > Представить легко - если кто-то долбит по серверу - отменяется предыдущий > запрос для такого нетерпеливогого клиента. Abort опция. Можно ли что то > такое уровне nginx, а не не уровне приложения? Такое представить легко и просто лишь в виде комбинации слов, за которой нет ничего конкретного (в виде механизма или алгоритма). Стоит же задуматься о конкретике -- сразу возникают вопросы. Что значит "отменить" запрос? Прервать процесс-обработчик? Или убить его? Оборвать коннекцию с сервером приложений? Так процесс может продолжить работать, и таких может плодиться множество, пока сервер не завалится под нагрузкой. А какой статус-код отправить клиенту? Как на него отреагирует браузер? И так далее. Вообще, это задача не для nginx, а для сервера приложений. Если он видит, что пришёл новый запрос, идентичный тому, который обрабатывается, и может детектировать ситуацию "результат предыдущего запроса не нужен", то пусть свернёт работу по старому запросу и обработает новый. -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Hello! On Mon, Sep 25, 2017 at 07:44:40PM -0400, EugeneNF wrote: > Пробовал увеличить число вокеров для nginx до 20 и uwsgi тоже до 20. Это не > помогло. Значит, видимо, проблема где-то глубже в бекенде - какие-то блокировки на пользователя, или что-то в этом роде. Ну или можно предположить, что клиент умудряется слать второй запрос в то же соединене, что и первый, но это совсем вряд ли (и было бы отчётливо видно по малому $request_time на фоне долгого ожидания ответа клиентом). Отмечу также, что увеличивать количество рабочих процессов nginx'а совершенно точно не надо, даже один рабочий процесс способен обслуживать тысячи одновременных запросов. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Да, это понятно. Я бы хотел противоположное. Старый запрос отменяется, а новый принимается. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276532#msg-276532 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Пробовал увеличить число вокеров для nginx до 20 и uwsgi тоже до 20. Это не помогло. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276531#msg-276531 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
25.09.2017, 22:28, "EugeneNF": > Представить легко - если кто-то долбит по серверу - отменяется предыдущий > запрос для такого нетерпеливогого клиента. Abort опция. Можно ли что то > такое уровне nginx, а не не уровне приложения? http://nginx.org/en/docs/http/ngx_http_limit_req_module.html Только отменяться будут новые запросы, а не старые > > Posted at Nginx Forum: > https://forum.nginx.org/read.php?21,276486,276526#msg-276526 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru -- Regards, Konstantin ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Представить легко - если кто-то долбит по серверу - отменяется предыдущий запрос для такого нетерпеливогого клиента. Abort опция. Можно ли что то такое уровне nginx, а не не уровне приложения? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276526#msg-276526 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Hello! On Sun, Sep 24, 2017 at 12:06:59PM -0400, EugeneNF wrote: > После добавления $request_time и $upstream_response_time стало ясно в чём > проблема. Спасибо! > Клиет посылает запрос, который долго обрабатывается (с AJAX). Затем клиет > посылает второй запрос, который по идее, должен обработаться очень быстро. > Но nginx ждёт пока не закончится первый запрос. Есть ли опция чтобы отменить > первый запрос при получении второго от того же самого клиента? Скорее всего речь о том, что у бекенда не хватает рабочих процессов, и второй запрос просто некому обрабатывать. И, соответственно, второе соединение к бекенду висит и ждёт, пока бекенд не закончит обрабатывать первый запрос. Добавлений рабочих процессов бекенду - должно эту проблему решить. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On Mon, Sep 25, 2017 at 10:56:24AM +0300, Alex Vorona wrote: > 24.09.17 19:06, EugeneNF wrote: > [...] > >Но nginx ждёт пока не закончится первый запрос. Есть ли опция чтобы отменить > >первый запрос при получении второго от того же самого клиента? > Как вы увидели, что именно nginx "ничего не делает" и просто ждёт ? Гораздо интереснее, как человек представляет себе магию "отмены запроса". :) -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Hi, 24.09.17 19:06, EugeneNF wrote: [...] Но nginx ждёт пока не закончится первый запрос. Есть ли опция чтобы отменить первый запрос при получении второго от того же самого клиента? Как вы увидели, что именно nginx "ничего не делает" и просто ждёт ? -- Alex Vorona ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
После добавления $request_time и $upstream_response_time стало ясно в чём проблема. Спасибо! Клиет посылает запрос, который долго обрабатывается (с AJAX). Затем клиет посылает второй запрос, который по идее, должен обработаться очень быстро. Но nginx ждёт пока не закончится первый запрос. Есть ли опция чтобы отменить первый запрос при получении второго от того же самого клиента? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276503#msg-276503 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On Sat, Sep 23, 2017 at 05:36:19PM -0400, EugeneNF wrote: > Я попробовал strace для nginx worker: strace -t -c -p 17630. Но ничего не > печатается до тех пор пока процесс не закончен. Флаг -c означает "выводить только статистику", потому системные вызовы и не печатаются. Уберите его, и поставьте -T (вывод времени, в течение которого процесс находился в сисколе), -t замените на -tt. -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Hello! On Sat, Sep 23, 2017 at 02:45:05PM -0400, EugeneNF wrote: > Используется nginx + uwsgi приложение на Python. Первый запрос > обрабатывается медленно в связи с обработкой данных. Но этот запрос не для > клиентов. Запросы от клиентов обрабатываются очень быстро, меньше 10 > миллисекунд. Однако после нескольких запросов (6-7) и быстрых/мгновенных > ответов, после очередного запроса наступает долгая мрачная тишина на > несколько секунд. Затем вываливаются все ответы. Картина повторяется. Что > может задерживать/блокировать запросы и как с этим бороться? Для начала имеет смысл добавить в логи пременные $request_time и $upstream_response_time, их описания тут: http://nginx.org/r/$request_time/ru http://nginx.org/r/$upstream_response_time/ru Подробно о том, как настраивать логгирование, можно прочитать тут: http://nginx.org/ru/docs/http/ngx_http_log_module.html По полученным значениям времён будет очевидно, где происходит задержка запросов - где-то при общении nginx'а и клиента (время $request_time большое, $upstream_response_time - малое), или же при общении с бекендом (время $upstream_response_time - большое). -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Я попробовал strace для nginx worker: strace -t -c -p 17630. Но ничего не печатается до тех пор пока процесс не закончен. Ничего очень долгого я не вижу. Всё меньше 0.001 сек. Я такжу запустил nginx-debug. После тягостной тишины он печатает информацию такую же как и при быстрых ответах (насколько я могу судить). И после быстрых ответов и после тишины печатается epoll_wait() error on fd... Так что эта ошибка, наверное не является причиной медленного ответа. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276494#msg-276494 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On Sat, Sep 23, 2017 at 03:35:16PM -0400, EugeneNF wrote: > Спасибо за ответ. > Сервер пока ничем не занят кроме этой тестовой задачи. 40 ядер, 2Т диск, 32 > Г памяти. Во время тишины загрузка нулевая. ОС - CentOS 7. Подскажите как > трассировать nginx. Я - новичок с ним. Для CentOS: man strace. В nginx ещё бывает полезен debug log. -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
Спасибо за ответ. Сервер пока ничем не занят кроме этой тестовой задачи. 40 ядер, 2Т диск, 32 Г памяти. Во время тишины загрузка нулевая. ОС - CentOS 7. Подскажите как трассировать nginx. Я - новичок с ним. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276488#msg-276488 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Очень медленный ответ после нескольких быстрых ответов
On Sat, Sep 23, 2017 at 02:45:05PM -0400, EugeneNF wrote: > Используется nginx + uwsgi приложение на Python. Первый запрос > обрабатывается медленно в связи с обработкой данных. Но этот запрос не для > клиентов. Запросы от клиентов обрабатываются очень быстро, меньше 10 > миллисекунд. Однако после нескольких запросов (6-7) и быстрых/мгновенных > ответов, после очередного запроса наступает долгая мрачная тишина на > несколько секунд. Чем при этом занят воркер, на каком сисколе висит? > Затем вываливаются все ответы. Картина повторяется. Что > может задерживать/блокировать запросы и как с этим бороться? Своппинг на хосте с сервером приложений, например. Посмотрите потребление памяти, помониторьте обмен с дисками. Посмотрите, нет ли в сообщений от ядра об ошибках диска. Попробуйте локализовать место, где происходят ожидания, трассировкой системных вызовов nginx. -- Eugene Berdnikov ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Очень медленный ответ после нескольких быстрых ответов
Используется nginx + uwsgi приложение на Python. Первый запрос обрабатывается медленно в связи с обработкой данных. Но этот запрос не для клиентов. Запросы от клиентов обрабатываются очень быстро, меньше 10 миллисекунд. Однако после нескольких запросов (6-7) и быстрых/мгновенных ответов, после очередного запроса наступает долгая мрачная тишина на несколько секунд. Затем вываливаются все ответы. Картина повторяется. Что может задерживать/блокировать запросы и как с этим бороться? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,276486,276486#msg-276486 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru