accept_mutex и epoll

Черданцев Евгений joe at netpost.ru
Tue Feb 17 07:28:49 MSK 2009


Здравствуйте.

    Заметил интересную особенность, что с выключенным параметром
    accept_mutex off и при использовании epoll, - nginx неравномерно
    распределяет задачи между воркерами, независимо от общего
    количества воркеров.

    При новом соединении fastcgi, прикрученный к nginx, решает отдавать
    ли файл клиенту путём X-Accel-Redirect или средиректить подальше.
    Стоит ограничение на 3 коннекта до файла с ip-адреса.

    Для наглядности использование 16ти воркеров.
Active connections: 470
server accepts handled requests
 194410 194410 196069 
Reading: 15 Writing: 425 Waiting: 30     

    root      4986  0.0  0.0 105000   488 ?        Ss   09:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx
    nobody    4987  0.0  0.0 105160  1128 ?        S    09:30   0:00 nginx: worker process
    nobody    4988  0.1  0.0 105160  1200 ?        S    09:30   0:00 nginx: worker process
    nobody    4989  0.1  0.0 105160  1176 ?        S    09:30   0:00 nginx: worker process
    nobody    4990  0.1  0.0 105160  1192 ?        S    09:30   0:00 nginx: worker process
    nobody    4991  0.1  0.0 105160  1172 ?        S    09:30   0:00 nginx: worker process
    nobody    4992  0.2  0.0 105288  1248 ?        S    09:30   0:00 nginx: worker process
    nobody    4993  0.1  0.0 105160  1172 ?        S    09:30   0:00 nginx: worker process
    nobody    4994  0.2  0.0 105160  1240 ?        S    09:30   0:00 nginx: worker process
    nobody    4995  0.4  0.0 105420  1480 ?        S    09:30   0:00 nginx: worker process
    nobody    4996  0.2  0.0 105160  1208 ?        S    09:30   0:00 nginx: worker process
    nobody    4997  0.4  0.0 105292  1304 ?        S    09:30   0:00 nginx: worker process
    nobody    4998  0.5  0.0 105420  1408 ?        S    09:30   0:00 nginx: worker process
    nobody    4999  1.4  0.0 106048  2048 ?        S    09:30   0:00 nginx: worker process
    nobody    5000  1.7  0.0 106292  2368 ?        S    09:30   0:00 nginx: worker process
    nobody    5001  3.2  0.0 107328  3400 ?        S    09:30   0:01 nginx: worker process
    nobody    5002  0.3  0.0 105288  1328 ?        S    09:30   0:00 nginx: worker process

    strace -rp 5001

     0.003729 sendfile64(80, 144, [214611750], 518723802) = 63888
     0.000099 sendfile64(153, 161, [579022769], 154292303) = 71298
     0.000110 sendfile64(36, 50, [259638363], 473676709) = 95832
     0.000139 sendfile64(130, 138, [817406163], 418968116) = 93600
     0.000059 sendfile64(106, 113, [379293086], 316409910) = 518400
     0.061436 sendfile64(131, 133, [1185271275], 376758805) = 127776
     0.000118 sendfile64(176, 180, [471314155], 1091547413) = 283140
     0.002180 sendfile64(243, 256, [448979514], 1019177666) = 64800
     0.000065 sendfile64(240, 241, [40881853], 1427919171) = 241032
     0.001439 sendfile64(16, 18, [624171750], 844283162) = 191664
     0.000100 sendfile64(207, 233, [299333088], 470728787) = 255552
     0.000129 sendfile64(77, 291, [312522764], 447597074) = 75504
     0.000122 sendfile64(186, 189, [880238754], 587669342) = 139680
     0.000106 sendfile64(224, 234, [471687747], 262315453) = 174240
     0.000095 close(331)                = 0
     0.000071 recv(248, 0x8302010, 1024, 0) = -1 EAGAIN (Resource temporarily unavailable)
     0.000055 epoll_wait(43, {{EPOLLOUT, {u32=135077552, u64=135077552}}, {EPOLLOUT, {u32=135084353, u64=135084353}},
      {EPOLLOUT, {u32=135083233, u64=135083233}}, {EPOLLOUT, {u32=135081392, u64=135081392}},
      {EPOLLOUT, {u32=135089552, u64=135089552}}, {EPOLLOUT, {u32=135083552, u64=135083552}},
      {EPOLLOUT, {u32=135079873, u64=135079873}}, {EPOLLOUT, {u32=135082032, u64=135082032}},
      {EPOLLOUT, {u32=135076833, u64=135076833}}, {EPOLLOUT, {u32=135085392, u64=135085392}},
      {EPOLLOUT, {u32=135078913, u64=135078913}}, {EPOLLOUT, {u32=135088833, u64=135088833}},
      {EPOLLOUT, {u32=135080513, u64=135080513}}, {EPOLLOUT, {u32=135084752, u64=135084752}},
      {EPOLLOUT, {u32=135088192, u64=135088192}}, {EPOLLOUT, {u32=135077312, u64=135077312}},
      {EPOLLOUT, {u32=135078432, u64=135078432}}, {EPOLLOUT, {u32=135090272, u64=135090272}},
      {EPOLLOUT, {u32=135087712, u64=135087712}}, {EPOLLOUT, {u32=135087153, u64=135087153}},
      {EPOLLOUT, {u32=135085073, u64=135085073}}, {EPOLLOUT, {u32=135081952, u64=135081952}},
      {EPOLLOUT, {u32=135087792, u64=135087792}}, {EPOLLOUT, {u32=135087873, u64=135087873}},
      {EPOLLOUT, {u32=135083713, u64=135083713}}, {EPOLLOUT, {u32=135088112, u64=135088112}},
      {EPOLLOUT, {u32=135080593, u64=135080593}}, {EPOLLOUT, {u32=135085472, u64=135085472}},
      {EPOLLOUT, {u32=135086193, u64=135086193}}, {EPOLLOUT, {u32=135094032, u64=135094032}},
      {EPOLLOUT, {u32=135076672, u64=135076672}}, {EPOLLOUT, {u32=135078752, u64=135078752}},
      {EPOLLOUT, {u32=135084913, u64=135084913}}, {EPOLLOUT, {u32=135085872, u64=135085872}},
      {EPOLLOUT, {u32=135079152, u64=135079152}}, {EPOLLOUT, {u32=135080272, u64=135080272}},
      {EPOLLOUT, {u32=135077233, u64=135077233}}, {EPOLLOUT, {u32=135079792, u64=135079792}},
      {EPOLLOUT, {u32=135079393, u64=135079393}}, {EPOLLOUT, {u32=135082272, u64=135082272}},
      {EPOLLOUT, {u32=135085632, u64=135085632}}, {EPOLLOUT, {u32=135082513, u64=135082513}},
      {EPOLLOUT, {u32=135078672, u64=135078672}}, {EPOLLOUT, {u32=135086832, u64=135086832}},
      {EPOLLOUT, {u32=135080992, u64=135080992}}, {EPOLLOUT, {u32=135084592, u64=135084592}},
      {EPOLLOUT, {u32=135085313, u64=135085313}}, {EPOLLOUT, {u32=135083392, u64=135083392}},
      {EPOLLOUT, {u32=135090672, u64=135090672}}, {EPOLLOUT, {u32=135082752, u64=135082752}},
      {EPOLLOUT, {u32=135087073, u64=135087073}}, {EPOLLOUT, {u32=135083953, u64=135083953}},
      {EPOLLOUT, {u32=135077952, u64=135077952}}, {EPOLLOUT, {u32=135088752, u64=135088752}},
      {EPOLLOUT, {u32=135079232, u64=135079232}}, {EPOLLOUT, {u32=135090112, u64=135090112}},
      {EPOLLOUT, {u32=135084993, u64=135084993}}}, 512, 6) = 57    

     
    При использовании poll, select - клиенты раскидываются равномерно.

    nginx version: nginx/0.7.5
    configure arguments: --with-http_stub_status_module --with-select_module --with-poll_module







More information about the nginx-ru mailing list