замирает скачивание файлов

tswiah at innovativemarketing.com.ua tswiah at innovativemarketing.com.ua
Thu Oct 25 19:15:23 MSD 2007


On Thu, 25 Oct 2007, Alex Vorona wrote:

iostat:

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz 
avgqu-sz   await  svctm  %util
dm-0              0.00     0.00 64.96  4.04  1705.92  1101.39    40.69 
2.75   39.92   9.50  65.58

Воркеры в основном спят.

> Date: Thu, 25 Oct 2007 11:19:46 +0300
> From: Alex Vorona <voron at amhost.net>
> Reply-To: nginx-ru at sysoev.ru
> To: nginx-ru at sysoev.ru
> Subject: Re: замирает скачивание файлов
> 
> tswiah at innovativemarketing.com.ua пишет:
>>
>>  Господа, подскажите, куда копать.
>>
>>  Ситуация такова: имеется довольно нагруженный файловый сервис на линуксе.
>>  nginx работает как фронтэнд: проксирует на апач практически все, кроме
>>  мелкой статики, и работает с fastcgi для скриптов, которые используются
>>  для собственно скачивания файлов. Файлы отдаются с помощью
>>  X-Accel-Redirect.
>>  Трафика сейчас в районе 100 мегабит (бывает и до 115), однако периодически
>>  возникает проблема:
>>  скачивание файла просто застывает в какой-то момент.
>>
>>  Железо:
>>  - intel core 2 quad
>>  - 4 gb ram
>>  - "типа железный raid" интеловый, на 3 винта, уровень 0, работающий с
>>  помощью dmraid
>>  uptime в районе 2, в пиковой нагрузке - около 4
>>
>>  sysctl:
>>  net.ipv4.tcp_syncookies=1
>>  net.ipv4.tcp_fin_timeout = 1
>>  net.ipv4.tcp_tw_recycle = 1
>>  net.ipv4.tcp_keepalive_time = 1800
>>
>>  Конфиг nginx:
>>
>>  === nginx.conf ===
>>
>>  worker_processes 4;
>>
>>  worker_rlimit_nofile 10240;
>>  worker_rlimit_sigpending 32768;
>>  worker_priority 5;
>>
>>  events {
>>      worker_connections  20480; }
>> 
> worker_connections  должны быть меньше  worker_rlimit_nofile с расчётом чтобы 
> воркер мог открывать файлы и делать запросы на бэкенд.
> Также попробуйте явно задать метод epoll если у вас 2.6.x ядро, или сравните 
> poll и rtsig, если 2.4.x
>>  error_log  /var/log/nginx/error.log;
>>
>>  http {
>>      include       /etc/nginx/mime.types;
>>      default_type  application/octet-stream;
>>
>>  '"$upstream_response_time"';
>>
>>      access_log  /var/log/nginx/access.log;
>>
>>      gzip on;
>>      gzip_proxied any;
>>      gzip_min_length  10240;
>>      gzip_buffers     32 64k;
>>      gzip_types       text/html application/x-javascript text/css
>>  text/xml text/plain;
>>
>>      client_header_timeout  60;
>>      client_body_timeout    60;
>>      send_timeout           120;
>>
>>      client_max_body_size       1800m;
> у вас реально заливают 1800Мб через http POST?  Обычно хватает 10Мб
>>      client_body_buffer_size    128k;
>>      client_header_buffer_size    4k;
>>      large_client_header_buffers  16 8k;
>>
>>      sendfile       on;
>>      sendfile_max_chunk 1024k;
> пробовали менять размер чанка?
>>      tcp_nopush     on;
>>      tcp_nodelay    on;
>>      output_buffers   32 256k;
>>      postpone_output  1460;
>>
>>      lingering_time     30;
>>      lingering_timeout  6;
>>      reset_timedout_connection  on;
>>
>>      keepalive_timeout  0;
>>      optimize_server_names on;
>>
>>      proxy_read_timeout          180;
>>      proxy_connect_timeout       60;
>>      proxy_send_timeout          180;
>>
>>      msie_padding                on;
>>
>>      proxy_buffer_size           32K;
>>      proxy_buffers               64 512K;
>>      proxy_busy_buffers_size     1024K;
>>      proxy_temp_file_write_size  1024K;
>> 
> возможно будет дешевле проксировать ответ бэкенда налету, чем буферизировать 
> его на диск, начать можно с
> proxy_max_temp_file_size  0;
>>      server {
>>          listen       <ip_address>:80 default backlog=1024 rcvbuf=131072
>>  sndbuf=1048576 deferred;
> великоваты буферы - вы видео раздаёте ?
>>          server_name  <server_name>;
>>
>>         location / {
>>                  proxy_pass      http://<ip_of_backend>;
>>                  proxy_redirect     off;
>>                  proxy_set_header  Host       $host;
>>                  proxy_set_header  X-Real-IP  $remote_addr;
>>                  proxy_set_header  REMOTE_ADDR  $remote_addr;
>>                  proxy_set_header  REMOTE_USER  $remote_user;
>>                  proxy_set_header  HTTP_COOKIE  $http_cookie;
>>                  proxy_set_header  REQUEST_METHOD  $request_method;
>>
>>                  proxy_set_header   X-Forwarded-For
>>  $proxy_add_x_forwarded_for;
> зачем используете X-Forwarded-For - обычно хватает X-Real-IP и 
> mod_realip&аналоги на бэкенде
>>          }
>>
>>          location /img {
>>                  root /var/www/<site>/htdocs/www;
>>          }
>>
>>          location /js {
>>                  root /var/www/<site>/htdocs/www;
>>          }
>>
>>          location /css {
>>                  root /var/www/<site>/htdocs/www;
>>          }
>>
>>          location /favicon.ico {
>>                  root /var/www/<site>/htdocs/www;
>>          }
>>
>>          location /download/ {
>>                  root /var/www/<site>/fcgi;
>>                  if ($uri ~ '^/download/(.*)$') {
>>                          set $file $1;
>>                  }
>>                  rewrite ^/download/(.*)
>>  /download/index_dload.php?url=$file last;
>>          }
>>
>>          location ~ ^/download/.+\.php$ {
>>              fastcgi_pass   unix:/tmp/spawn-fcgi.socket;
>>              fastcgi_index  index_test.php;
>>
>>              fastcgi_param  SCRIPT_FILENAME
>>  /var/www/<site>/fcgi$fastcgi_script_name;
>>              fastcgi_param  QUERY_STRING     $query_string;
>>              fastcgi_param  REQUEST_METHOD   $request_method;
>>              fastcgi_param  REQUEST_URI      $request_uri;
>>              fastcgi_param  CONTENT_TYPE     $content_type;
>>              fastcgi_param  CONTENT_LENGTH   $content_length;
>>          }
>>      }
>>
>>  === nginx.conf ===
>>
>>  Буду очень признателен за любые подсказки.
>> 
> что говорит iostat на дисках, какой статус имеют воркеры nginx?
>

-- 
Best,
 	Yaroslav Tarasenko aka Taras Tswiah
 	(SysAdmin Department Manager)





More information about the nginx-ru mailing list