замирает скачивание файлов
Alex Vorona
voron at amhost.net
Thu Oct 25 12:19:46 MSD 2007
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?
More information about the nginx-ru
mailing list