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

Sergey Averyanov asv at pallant-mobile.ru
Mon May 25 17:45:22 MSD 2009


Есть 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