Падение производительности nginx

zortexx nginx-forum на nginx.us
Вт Фев 22 22:30:12 MSK 2011


Приветствую всех!
Никогда не думал, что придется писать
сюда. До этого момента nginx никогда не
подводил, да и сейчас нет уверенности,
что дело в нем. Вобщем, ситуация: nginx в
качестве прокси для apache2 mpm-prefork (fastcgi
гораздо медленнее, на низких нагрузках,
а больших не предвидится) и mod_mem_cache.
Также установлен MySQL 5.1 с поддержкой MyISAM
и InnoDB с большим объемом оперативной
памяти выделенной под кэширование
таблиц. Но дело точно не в нем, так как
многочисленные тесты показывают, что
скорость обработки максимального
комплекса запросов составляет меньше
10мс. В итоге, среднее время генерации
страницы составляет 2 секунды.

В какой-то момент времени я начал
экспериментировать с различными
директивами nginx. В частности, после
добавления директив "timer_resolution 100ms;", "use
epoll;", "sendfile on;", "tcp_nopush  on;", "keepalive_timeout  5;" и
"tcp_nodelay  on;"  - время генерации страниц
упало до 0,4 секунды. Сначала была мысль,
что это кэш, но для тестирования  я
менял данные в базе напрямую и страницы
формировались с корректными данными.

Однако, после перезагрузки сервера все
вернулось на круги своя, - 2 секунды, на
легких страницах - 1,5 секунды.

В процессе настройки nginx никакие другие
сервисы не подвергались
конфигурированию. Визуально, да и по
дате редактирования конфигурационные
файлы те же, на которых недавно было 0,4
секунды.

Собственно, вопрос обычный - куда
копать?
PS.: Я понимаю, что nginx только отдает
статику и скидывает на бэкенд
генерацию контента. Но кроме nginx ничто
не было затронуто. И, по всей видимости
это какой-то необъяснимый глюк
производительности apache2, но все же
хотелось услышать мнения экспертов.


Привожу свои конфиги:
cat /etc/nginx/nginx.conf
user www-data;
worker_processes 2;
worker_priority -5;

timer_resolution 100ms;

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

events {
    worker_connections  1024;
    use epoll;
}

http {
    upstream backend {
    server 127.0.0.1:8080;
      }

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log off;

    sendfile       on;
    tcp_nopush     on;

    keepalive_timeout  5;
    tcp_nodelay        on;

gzip on;
gzip_buffers 4 8k;
gzip_comp_level 3;
gzip_proxied any;
gzip_types text/plain text/css application/x-javascript text/xml
application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

cat /etc/nginx/sites-enabled/example.org
server {
        listen  80;
        server_name  example.org;
        root   /var/www/example.org;
        index  index.php;

        location / {
                proxy_pass  http://backend;
                include     /etc/nginx/proxy.conf;
                open_file_cache max=1024 inactive=600s;
                open_file_cache_valid 2000s;
                open_file_cache_min_uses 1;
                open_file_cache_errors on;
        }

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        access_log /var/log/nginx/example.org_access.log;
        error_log /var/log/nginx/example.org_error.log;

        error_page 403 /403.html;
        
        error_page 404 /404.html;
        
        location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
        root /var/www/example.org/;
            }

        ## Disable viewing .htaccess & .htpassword
        location ~ /\.ht {
                deny  all;
        }
}

cat /etc/nginx/proxy.conf
proxy_redirect              off;
proxy_set_header            Host $host;
proxy_set_header            X-Real-IP $remote_addr;
proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size        10m;
client_body_buffer_size     128k;
proxy_connect_timeout       90;
proxy_send_timeout          90;
proxy_read_timeout          90;
proxy_buffer_size           4k;
proxy_buffers               4 32k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,177531,177531#msg-177531




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