Re: Nginx медленно отдает статику медленным клиентам!

Anes Mukhametov nginx at anes.su
Thu Oct 11 07:14:58 UTC 2012


С 2-я ГБ памяти машина может элементарно свопиться даже на небольшои 
числе запросов к прожорливым CGI скриптам. Посмотрите на своп.

ProxyKZ писал 2012-10-10 23:45:
> Есть сервер хостинга 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




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