Re: Из за чего медленно работает nginx?

Валентин Бартенев vbart at nginx.com
Sun Dec 9 15:40:27 UTC 2012


On Sunday 09 December 2012 01:58:15 Renat wrote:
> Попробовал полностью снести ArchLinux, и постановить его снова.
> Сразу же обновился:
> pacman -Syu
> После сделал рестарт и поставил nginx
> pacman -Sy nginx
> 
> К сожалению проблема не исчезла, все так же как и было ранее.

Проблема может быть и в самом пакете, что идет к вашему дистрибутиву
ArchLinux ARM. Неизвестно как и где он был собран.

А как вы собирали пакет с debug-ом? Nginx нужно собирать непосредственно на 
самом устройстве, нельзя собирать на другой системе и переносить.

Скачайте исходники nginx c http://nginx.org/en/download.html, распакуйте и 
запустите ./configure конкретно на той системе, на которой устанавливаете, и 
покажите то, что было выведено на консоль.

Nginx должен работать с сокетами в неблокирующемся режиме. Он умеет 
устанавливать этот режим тремя способами. Конкретный способ установки, который 
поддерживает система определяется на этапе конфигурации. Соответственно если 
конфигурация была выполнена на другой системе, а потом nginx был перенесен на 
систему, для которой используется иной способ - получим проблему как у вас.

Во время компиляции в исполняемый код в бинарном файле прописываются конкретные 
числовые константы, имеющие определенное значение на данной системе. И если 
nginx был перенесен на систему, где эти константы отличаются, то соответствующие 
системные вызовы в лучшем случае просто не будут работать и получим проблему как 
у вас.

Более того, поскольку эти константы берутся не из самого ядра, а из заголовочных 
файлов системных библиотек, и если они (библиотеки в вашей системе) не 
соответствуют реальному положению дел в ядре, то получим ситуацию как у вас.

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


> Сегодня на форуме заметил тему от maxspb85 - Медленно отдаются файлы от
> 128KB, до 128KB - без проблем. (http://forum.nginx.org/read.php?21,233728)
> 
> У меня точно так же, маленькие картинки, маленькие странички так же где-то
> до ~128кб, открываются очень быстро. Если же картинка или страница больше
> начинается непонятное торможение.

Эта тема к вашей не имеет никакого отношения. Размер файла в вашем случае имеет 
весьма косвенное влияние, у вас просто оба воркера работают в блокирующимся 
режиме, т.е. в принципе ваш nginx не способен обрабатывать более двух соединений 
одновременно (и работает подобно Апачу с лимитом в два процесса), поэтому 
ситуация и улучшается, если вы выключаете keepalive, в этом случае просто 
соединения быстро закрываются и это позволяет отрыть новые два, но проблема 
остается.

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

Покажите вывод ./configure для nginx на этой системе, и убедитесь, что ядро не 
внесено в IgnorePkg.

--
Валентин Бартенев
http://nginx.com/support.html
http://nginx.org/en/donation.html


Подробная информация о списке рассылки nginx-ru