медленная отдача по сети во внешний мир

Sergey Averyanov asv at pallant-mobile.ru
Tue May 26 09:50:06 MSD 2009


В сообщении от Monday 25 May 2009 17:45:22 Sergey Averyanov написал(а):
и еще одно наблюдение: из внешнего мира при тестовой закачке рандомного 
файлика по scp без компрессии достигается скорость 3MB/s
с учетом того, что скорость отдачи по http не сильно выше 1MS/s, можно 
предположить, что пропускной способности сети вроде как хватает и дело именно 
в каких-то настройках.
с благодарностью приму совет -- картина больно уж непонятная

> Есть FreeBSD 7.2-STABLE + nginx/0.6.36
> С некоторого момента времени заметно следующее: отдача данных по сети во
> внешний мир идет на порядок медленнее, чем ожидается.
> По сети вовне (по замеркам apache benchmark) закешированная мемекешем
> главная отдается со скоростью 3-4 запроса в секунду, тот же тест с
> локалхоста дает около 2000 запросов в секунду.
> Все это крутится на машине Intel(R) Core(TM)2 Quad CPU,
> real memory  = 3479166976 (3317 MB)
>
> Нутром чую, дело в недотюненности сети.
> Причем судя по сравнительному результату локальных и удаленных тестов
> недотюненность какая то глобальная, а не косметическая.
> Чт можно попробовать подкрутить?
>
> Дополнительная информация ниже:
> 0) Конфиг такой:
> workr_processes  4;
>
> events {
>     worker_connections  4096;
>     use kqueue;
> }
>
>
> http {
>     include       mime.types;
>     default_type  application/octet-stream;
>     sendfile        on;
>     keepalive_timeout  65;
>     gzip on;
>     gzip_min_length 0;
>     gzip_proxied any;
>     gzip_types text/html text/plain text/css application/x-javascript
> application/xml;
>     client_max_body_size 25m;
>
>     server {
>         listen x.x.x.x:80;
>         server_name  www.foo.ru;
>
>         location / {
>             set             $memcached_key   "$uri?$args";
>             memcached_pass  127.0.0.1:11211;
>             default_type text/html;
>             log_format mc '[$time_local] $remote_addr "$http_referer"
> "$http_user_agent" -- $memcached_key';
>             access_log /var/log/nginx/foo.ru/www/mc.log mc;
>             error_page      404 405 502 504 = @fallback;
>         }
>         location @fallback {
>                 proxy_pass        http://127.0.0.1:80;
>                 proxy_set_header  X-Real-IP  $remote_addr;
>                 proxy_set_header  Host        $host;
>                 proxy_set_header  MCKEY  "$uri?$args";
>         }
>         #дальше идет набор правил для отдачи статики
>         #вроде такого
>         location ~ ^/preview/ {
>                 root /media/foo.ru;
>                 access_log /var/log/nginx/foo.ru/www/images.log;
>         }
>     }
> }
>
>
> Чем можно объяснить такую странность?
>
>
> PS
> некоторые наблюдения:
>
> 1) В топе ничего подозрительного нет:
> last pid: 74125;  load averages:  0.02,  0.12,  0.14
> 76 processes:  2 running, 74 sleeping
> CPU:  2.1% user,  0.0% nice,  1.0% system,  0.1% interrupt, 96.9% idle
> Mem: 270M Active, 2576M Inact, 244M Wired, 84M Cache, 112M Buf, 72M Free
> Swap: 4096M Total, 4096M Free
>
> 2) Воркеры nginx и memcached находятся в состоянии kqread
>
> 3)
> # netstat -an -p tcp | wc -l
> 4551
> # netstat -an -p tcp | grep ESTA | wc -l
> 2318
> # netstat -an -p tcp | grep WAIT | wc -l
> 2126
>
> 4) #netstat -m
> 440/3595/4035 mbufs in use (current/cache/total)
> 292/1842/2134/25600 mbuf clusters in use (current/cache/total/max)
> 292/604 mbuf+clusters out of packet secondary zone in use (current/cache)
> 58/682/740/12800 4k (page size) jumbo clusters in use
> (current/cache/total/max)
> 0/0/0/6400 9k jumbo clusters in use (current/cache/total/max)
> 0/0/0/3200 16k jumbo clusters in use (current/cache/total/max)
> 926K/7310K/8236K bytes allocated to network (current/cache/total)
> 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
> 0/0/0 requests for jumbo clusters denied (4k/9k/16k)
> 45/223/6656 sfbufs in use (current/peak/max)
> 0 requests for sfbufs denied
> 0 requests for sfbufs delayed
> 130474 requests for I/O initiated by sendfile
> 0 calls to protocol drain routines
>
> 5) # sysctl kern.ipc.maxsockets
> kern.ipc.maxsockets: 25600
>
> 6) # vmstat -z | egrep 'tcp|ITEM'
>  ITEM                     SIZE     LIMIT      USED      FREE  REQUESTS
> FAILURES
>  tcpcb:                    464,    25600,     3857,     2223, 12571044,
> 0
>  tcptw:                     52,     5184,      795,     4389,  4803580,
> 51335
>  tcpreass:                  20,     1690,        0,      676,    23233,
> 0
>
> 7) # sysctl -a | grep kern.maxfile
> kern.maxfiles: 20000
> kern.maxfilesperproc: 20000
>
> 8) # sysctl net.inet.tcp.nolocaltimewait
> net.inet.tcp.nolocaltimewait: 1
>
> 9) Судя по systat -if наружу идет раздача примерно 1-1.2 MB/s


-- 
С уважением,
  Сергей Аверьянов


More information about the nginx-ru mailing list