nginx для отдачи больших файлов
MZ
zuborg at advancedhosters.com
Wed Feb 25 14:06:30 MSK 2009
Lin wrote:
>> Когда проблемы со скоростью - что показывает netstat -m и vmstat -z ?
>
> netstat -m показывает следующее:
>
> 2633/1267/3900 mbufs in use (current/cache/total)
> 285/223/508/25600 mbuf clusters in use (current/cache/total/max)
> 285/193 mbuf+clusters out of packet secondary zone in use (current/cache)
> 4/190/194/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)
> 1244K/1522K/2767K 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)
> 2297/4409/6656 sfbufs in use (current/peak/max)
> 0 requests for sfbufs denied
> 0 requests for sfbufs delayed
> 14407662 requests for I/O initiated by sendfile
> 0 calls to protocol drain routines
все в норме, но буфера под sendfile могут скоро закончить - в пике 4409
из 6656 использовалось (настраивается через sysctl kern.ipc.nsfbufs)
> vmstat -z показывает это:
>
> ITEM SIZE LIMIT USED FREE REQUESTS FAILURES
>
> UMA Kegs: 128, 0, 81, 9, 81, 0
> UMA Zones: 480, 0, 81, 7, 81, 0
> UMA Slabs: 64, 0, 1559, 742, 2610815, 0
> UMA RCntSlabs: 104, 0, 448, 181, 54966074, 0
> UMA Hash: 128, 0, 2, 28, 6, 0
> 16 Bucket: 76, 0, 12, 38, 54, 0
> 32 Bucket: 140, 0, 13, 43, 64, 0
> 64 Bucket: 268, 0, 16, 26, 118, 11
> 128 Bucket: 524, 0, 1091, 547, 4301205, 3198
> VM OBJECT: 124, 0, 13669, 47897, 283760495, 0
> MAP: 140, 0, 7, 21, 7, 0
> KMAP ENTRY: 68, 57344, 4095, 1169, 252230719, 0
> MAP ENTRY: 68, 0, 17055, 4897, 1877824034, 0
> DP fakepg: 72, 0, 0, 53, 10, 0
> mt_zone: 1024, 0, 238, 126, 238, 0
> 16: 16, 0, 3266, 997, 265381849, 0
> 32: 32, 0, 2485, 905, 182445466, 0
> 64: 64, 0, 8405, 3926, 4996948402, 0
> 128: 128, 0, 2522, 718, 322537685, 0
> 256: 256, 0, 3611, 199, 276136230, 0
> 512: 512, 0, 148, 132, 5514109, 0
> 1024: 1024, 0, 117, 335, 153608373, 0
> 2048: 2048, 0, 315, 195, 129613, 0
> 4096: 4096, 0, 412, 147, 111997880, 0
> Files: 72, 0, 963, 1475, 983193942, 0
> TURNSTILE: 76, 0, 1065, 1431, 42995, 0
> umtx pi: 52, 0, 0, 0, 0, 0
> PROC: 684, 0, 141, 744, 4732007, 0
> THREAD: 516, 0, 898, 166, 39036148, 0
> UPCALL: 44, 0, 0, 0, 0, 0
> SLEEPQUEUE: 32, 0, 1065, 1308, 42995, 0
> VMSPACE: 232, 0, 91, 742, 4731957, 0
> audit_record: 856, 0, 0, 0, 0, 0
> mbuf_packet: 256, 0, 285, 193, 8474417812, 0
> mbuf: 256, 0, 2809, 478, 39414218470, 0
> mbuf_cluster: 2048, 25600, 478, 30, 3968083430, 0
> mbuf_jumbo_pagesize: 4096, 12800, 5, 189, 4233891254, 0
> mbuf_jumbo_9k: 9216, 6400, 0, 0, 0, 0
> mbuf_jumbo_16k: 16384, 3200, 0, 0, 0, 0
> mbuf_ext_refcnt: 4, 0, 2293, 752, 2423677261, 0
> ACL UMA zone: 388, 0, 0, 0, 0, 0
> g_bio: 132, 0, 61, 432, 931727006, 0
> ata_request: 192, 0, 22, 258, 332330252, 0
> ata_composite: 184, 0, 0, 0, 0, 0
> VNODE: 272, 0, 10517, 55003, 4539288165, 0
> VNODEPOLL: 64, 0, 0, 0, 0, 0
> NAMEI: 1024, 0, 0, 284, 10168836930, 0
> S VFS Cache: 68, 0, 2686, 6498, 60599106, 0
> L VFS Cache: 291, 0, 8204, 194, 4517020750, 0
> DIRHASH: 1024, 0, 1512, 96, 122432, 0
> NFSMOUNT: 472, 0, 0, 0, 0, 0
> NFSNODE: 456, 0, 0, 0, 0, 0
> pipe: 396, 0, 55, 225, 11941886, 0
> ksiginfo: 80, 0, 841, 71, 842, 0
> itimer: 220, 0, 0, 0, 0, 0
> KNOTE: 68, 0, 656, 856, 229931990, 0
> socket: 396, 12330, 3226, 3594, 138922304, 0
> ipq: 32, 904, 0, 226, 161, 0
> udpcb: 180, 12342, 14, 74, 10391180, 0
> inpcb: 180, 12342, 3303, 3627, 68089475, 0
> tcpcb: 464, 12328, 2791, 1769, 68089475, 0
> tcptw: 52, 2520, 512, 2008, 22035374, 13453728
> syncache: 100, 15366, 2, 193, 54172448, 0
> hostcache: 76, 15400, 761, 39, 294588, 0
> tcpreass: 20, 1690, 0, 507, 8678195, 0
> sackhole: 20, 0, 10, 328, 26122974, 0
> sctp_ep: 804, 12330, 0, 0, 0, 0
> sctp_asoc: 1400, 40000, 0, 0, 0, 0
> sctp_laddr: 24, 80040, 0, 145, 2, 0
> sctp_raddr: 396, 80000, 0, 0, 0, 0
> sctp_chunk: 92, 400008, 0, 0, 0, 0
> sctp_readq: 76, 400000, 0, 0, 0, 0
> sctp_stream_msg_out: 60, 400050, 0, 0, 0, 0
> sctp_asconf_ack: 24, 400055, 0, 0, 0, 0
> ripcb: 180, 12342, 0, 44, 64, 0
> unpcb: 168, 12328, 56, 404, 60441584, 0
> rtentry: 120, 0, 17, 47, 783, 0
> Mountpoints: 668, 0, 8, 10, 9, 0
> FFS inode: 132, 0, 10479, 12634, 4539212325, 0
> FFS1 dinode: 128, 0, 0, 0, 0, 0
> FFS2 dinode: 256, 0, 10479, 5781, 4539212325, 0
> SWAPMETA: 276, 121576, 555, 10239, 749341, 0
> IPFW dynamic rule: 108, 0, 2888, 1360, 56839876, 0
тут все в норме тоже, кроме tcptw (некритично) - стоит увеличить
net.inet.tcp.maxtcptw и уменьшить таймаут через net.inet.tcp.msl, а
также поставить net.inet.tcp.nolocaltimewait=1
видимо тормоза не связаны с переполнением буферов
>
>> Попробуй sendfile off;
таки попробуй
>> Какая длина очереди на винт в среднем (смотреть gstat-ом)?
>
> gstat выдает:
>
> dT: 1.001s w: 1.000s
> L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name
> 15 83 83 7674 194.7 0 0 0.0 99.7| ad7
> 15 83 83 7674 194.7 0 0 0.0 99.7| ad7s1
> 0 22 0 0 0.0 22 576 1.6 3.3| ad12
> 0 0 0 0 0.0 0 0 0.0 0.0| ad7s1c
> 15 83 83 7674 194.8 0 0 0.0 99.7| ad7s1d
> 0 22 0 0 0.0 22 576 1.6 3.3| ad12s1
> 0 0 0 0 0.0 0 0 0.0 0.0| ad12s1a
> 0 0 0 0 0.0 0 0 0.0 0.0| ad12s1b
> 0 0 0 0 0.0 0 0 0.0 0.0| ad12s1c
> 0 0 0 0 0.0 0 0 0.0 0.0| ad12s1d
> 0 0 0 0 0.0 0 0 0.0 0.0| ad12s1e
> 0 0 0 0 0.0 0 0 0.0 0.0| ad12s1f
> 0 0 0 0 0.0 0 0 0.0 0.0| ad12s1g
> 0 22 0 0 0.0 22 576 1.6 3.3| ad12s1h
>
>> Поставь кол-во воркеров раза в два больше среднего размера очереди.
> Я так понимаю, длина очереди на винт с файлами около 15 и нужно ставить около 30 воркеров.
не совсем, стоит поставить 30 воркеров и посмотреть ещё раз, и так далее
итеративно.
суть в том чтоб в среднем не все процессы nginx блокировались на диске,
а около половины
>> Следи чтобы nginx не писал проксируемый контент на диск активно
>> (/var/tmp/nginx если не ошибаюсь) - лучше буфера подыми.
>>
>
> Если можно, про этот момент поподробнее. Как определить, насколько активно он пишет туда и какие буфера нужно поднимать?
смотри директиву proxy_temp_path
по умолчанию это кажется /var/tmp/nginx - надо смотреть сколько там
места занято (du) и как активно используется (gstat) раздел где лежит
/var/tmp/nginx
в общем случае активное использование временных файлов при проксировании
крайне не желательно (как и активное использование свопа, например) -
эффективнее держать все в памяти
More information about the nginx-ru
mailing list