Re: Nginx медленно отдает статику медленным клиентам!
Илья Шипицин
chipitsine at gmail.com
Fri Oct 12 10:52:19 UTC 2012
ответ от апстрима может в некоторых случаях помещаться во временный файл,
особенно, если сервер отдал контент быстро, а пользователь забирает
медленно. и узким местом может являться жесткий диск.
iotop что показывается ?
11 октября 2012 г., 1:45 пользователь ProxyKZ <nginx-forum at nginx.us>написал:
> Есть сервер хостинга Xeon 2,4GHz QuadCore / RAM 2Gb / SAS 500Gb работает
> около 100 сайтов клиентов с посещаемостью по 50-100 в день и 7-10 сайтов по
> 1000-2000 в день. Nginx/0.6.32 раздает статику и стоит перед Apache. Раньше
> Apache либо съедал всю память и nginx не могу до него дсотучаться выдавая
> 502 и т.п. ошибки, потом ограничили в конфиге Апача MaxClient до 25 и стало
> стабильнее. Но после прописывания бОльшей части сайтов в Nginx - сайты эти
> которых статику начал отдавать nginx стали тормозить - сильно азметно на
> медленных клиентах. После нескольких запросов как будто пауза образуется,
> то
> есть чем чаще обращение к сайту тем тормозит сильнее - на странице прямо
> видно что недогружаются картинки и js и css, отладчик барузера часто
> ругается на файлы что их нет (404), тут же если обновить страницу они могут
> успешно загрузиться. У клиентов на широких каналах от 1MBit/s все леатет и
> тормоза почти незаметны, а на медленных каждое 3-5-ое открытие любого сайта
> замедляется от 10 секунд до даже минут иногда.
>
> Это конфиг Apache:
> -----------------------------
> ServerRoot "/etc/apache2"
>
> LockFile /var/lock/apache2/accept.lock
>
> PidFile ${APACHE_PID_FILE}
>
> Timeout 15
> KeepAlive Off
> MaxKeepAliveRequests 400
> KeepAliveTimeout 3
>
> ExtendedStatus On
>
> <IfModule mpm_prefork_module>
> StartServers 1
> MinSpareServers 2
> MaxSpareServers 10
> MaxClients 25
> MaxRequestsPerChild 1000
> </IfModule>
>
> <IfModule mpm_worker_module>
> StartServers 2
> MaxClients 50
> MinSpareThreads 25
> MaxSpareThreads 75
> ThreadsPerChild 25
> MaxRequestsPerChild 1000
> </IfModule>
>
> # These need to be set in /etc/apache2/envvars
> User ${APACHE_RUN_USER}
> Group ${APACHE_RUN_GROUP}
>
> AccessFileName .htaccess
>
> #
> # The following lines prevent .htaccess and .htpasswd files from being
> # viewed by Web clients.
> #
> <Files ~ "^\.ht">
> Order allow,deny
> Deny from all
> </Files>
>
> DefaultType text/plain
>
> HostnameLookups Off
> ErrorLog /var/log/apache2/error.log
> LogLevel info
>
> Include /etc/apache2/mods-enabled/*.load
> Include /etc/apache2/mods-enabled/*.conf
>
> Include /etc/apache2/httpd.conf
>
> Include /etc/apache2/ports.conf
>
> LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
> \"%{User-Agent}i\"" vhost_combined
> 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
>
> Include /etc/apache2/conf.d/
>
> NameVirtualHost *:443
> <VirtualHost _default_:443>
> ServerName example.com:443
> SSLEngine on
> SSLCertificateFile /etc/apache2/ssl.crt/server.crt
> SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
> </VirtualHost>
>
> Include /usr/local/ispmgr/etc/ispmgr.inc
>
> <Directory /home/user/www/domen.example.com>
> AllowOverride all
> php_admin_value open_basedir "/home/user:."
> </Directory>
> -----------------------------
> и т.д. описаны все хосты
>
>
> Это конфиг Nginx:
> -----------------------------
> user www-data;
> worker_processes 4;
> worker_rlimit_nofile 16384;
>
> error_log /var/log/nginx/error.log error;
> pid /var/run/nginx.pid;
>
> events {
> worker_connections 1024;
> use epoll;
> }
>
> http {
> include /etc/nginx/mime.types;
> default_type application/octet-stream;
>
> access_log /var/log/nginx/access.log;
> #expires 30d;
> sendfile on;
> tcp_nopush on;
> tcp_nodelay on;
> client_max_body_size 10m;
> client_body_buffer_size 16k;
> proxy_connect_timeout 60s;
> proxy_send_timeout 60s;
> proxy_read_timeout 60s;
> proxy_buffer_size 64k;
> proxy_buffers 4 32k;
> proxy_busy_buffers_size 64k;
> proxy_temp_file_write_size 10m;
>
> gzip on;
> gzip_comp_level 3;
> gzip_proxied any;
> gzip_min_length 1000;
> gzip_types application/x-javascript text/css;
> gzip_disable "MSIE [1-6]\.(?!.*SV1)";
>
> keepalive_timeout 35;
>
>
> include /etc/nginx/conf.d/*.conf;
> include /etc/nginx/sites-enabled/*;
> log_format isp '$bytes_sent $request_length';
> server {
> listen 82.200.198.10:80;
> server_name example.com www.example.com;
> rewrite ^(/manager/.*)$ https://$host$1 permanent;
> error_page 404 = @fallback;
> location ~*
> ^/(webstat/|awstats|webmail/|myadmin/|manimg/|pgadmin/) {
> proxy_pass http://82.200.198.10:81;
> proxy_redirect http://example.com:81/ /;
> proxy_set_header Host $host;
> proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
> proxy_set_header X-Real-IP $remote_addr;
> }
> location / {
> proxy_pass http://82.200.198.10:81;
> proxy_redirect http://example.com:81/ /;
> proxy_set_header Host $host;
> proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
> proxy_set_header X-Real-IP $remote_addr;
> }
> location ~*
> ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
> root /home/user/www/example.com;
> access_log /home/httpd-logs/example.com.access.log
> ;
> access_log /home/nginx-logs/user isp;
> }
> location @fallback {
> proxy_pass http://82.200.198.10:81;
> proxy_set_header Host $host;
> proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
> proxy_set_header X-Real-IP $remote_addr;
> }
> }
> -----------------------------
> и т.д. в таком же ключе еще 100 хостов прописано.
>
> Изменял по разному в конфиге Nginx следующие ключи:
> worker_connections
> worker_processes
> sendfile
> proxy_connect_timeout
> proxy_send_timeout
> proxy_read_timeout
> gzip_proxied
> gzip_comp_level
> ничего не приводит к заметному результату, как тормозил у медленных
> клиентов
> так и тормозит.
>
> Apache Server Status показывает максимум до 10 Request, то есть заметно что
> нагрузка на него упала (раньше бывало до 20-25), но почему nginx стал так
> медленно работать?
>
> в Top-е nginx почти не вылезает иногда до 2% CPU кушает, в основном кушают
> CPU процессы Apache 3-4 штуки бывает под 30-70% но всего лишь на несколько
> секунд и MySQL обычно кушает 20-30% , бывает 50-70% но тоже на считанные
> секунды. В целом RAM и CPU не загружены когда проявляются тормоза.
> Складывает такое ощущение, что nginx зажат какими то лимитами и не может
> быстро раздавать статику, хотя ресурсы сервера еще позволяют это сделать.
>
> У меня админ уволился, найти грамотного не могу, вот пытаюсь сам
> поддерживать сервер...
> Огромная просьба к бывалым хостерам - помогите советом!!!
>
> Posted at Nginx Forum:
> http://forum.nginx.org/read.php?21,231602,231602#msg-231602
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20121012/3c41b5d3/attachment-0001.html>
Подробная информация о списке рассылки nginx-ru