медленная отдача по сети во внешний мир
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