замирает скачивание файлов
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