Проблема при >1500 одновременных коннектов.

Igor Sysoev is at rambler-co.ru
Tue Feb 10 20:51:28 MSK 2009


On Tue, Feb 10, 2009 at 06:31:10PM +0300, Artemiev Igor wrote:

> On Tue, Feb 10, 2009 at 03:28:38PM +0300, Вадим wrote:
> > I/O с перегруженного диска медленно => блокировки воркеров => тормоза 
> > других клиентов, которые работают со свободными жесткими дисками => 
> > снижение отдачи трафика. При этом load average взлетает до 100 и выше.
> ...
> > Если у кого-то есть мысли буду рад выслушать.
> У меня описанное проседание отдачи наблюдалось на 1 (одном) коннекте при отдаче
> гигового файла. При гарантированном попадании в память этого файла. То есть
> sendfile вместо копирования данных из VM ранее вычитанного блока шёл опять
> читать с диска, но при этом отдача по сети становилась 3-4MB/s. Хотя самый
> первый прогон давал 90MB/s. Лимитирования отдачи по скорости нет.
> 
> Поэтому мне кажется, что начальное постулирование того, что если у таракана
> оторвать все ноги, то он потеряет слух - несколько неверно.

Это два разных случая.
Я подозреваю, что это проблема взаимодействия sendfile'а и zfs.

У меня при настройках:

kern.ipc.sfrefer: 0
kern.ipc.sfreadahead: 16
MAXPHYS=1M

на FreeBSD 7.0/amd64/4G/ufs первое скачивание:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1064M  100 1064M    0     0  30.9M      0  0:00:34  0:00:34 --:--:-- 31.4M


dT: 1.001s  w: 1.000s  filter: (ad..|dat)$
 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
    0     10     10   9719   20.9      0      0    0.0   20.8| ad16
    0     10     10  10231   25.5      0      0    0.0   25.5| ad18
    1      9      9   8249   24.5      0      0    0.0   22.0| ad20
    0     10     10  10231   21.1      0      0    0.0   21.1| ad22
    1     39     39  38429   23.0      0      0    0.0   76.7| mirror/dat


Последующие:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1064M  100 1064M    0     0  58.0M      0  0:00:18  0:00:18 --:--:-- 64.1M


dT: 1.001s  w: 1.000s  filter: (ad..|dat)$
 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
    0      1      1   1023   38.3      0      0    0.0    3.8| ad16
    0      2      2   1982   33.4      0      0    0.0    6.7| ad18
    0      2      2   1471   25.8      0      0    0.0    5.1| ad20
    0      2      2   1087   18.6      0      0    0.0    3.7| ad22
    0      7      7   5563   27.7      0      0    0.0   15.2| mirror/dat

            input         (bge0)           output
   packets  errs      bytes    packets  errs      bytes colls
       36K     0       2.3M        52K     0        76M     0
       40K     0       2.6M        57K     0        84M     0
       40K     0       2.6M        57K     0        84M     0
       40K     0       2.6M        57K     0        85M     0
       40K     0       2.6M        58K     0        85M     0

CPU states:  0.0% user,  0.0% nice,  2.1% system, 13.2% interrupt, 84.8% idle
Mem: 54M Active, 3378M Inact, 347M Wired, 150M Cache, 212M Buf, 21M Free
Swap: 4096M Total, 1104K Used, 4095M Free

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
  742 nobody      1   4    0 12704K  4044K kqread 1  50:07  1.66% nginx

При этом обращения к диску этого процесса, судя по top -mio, практически нет.
То есть, данные берутся из Inactive и отдаются со скоростью сети (сеть bge,
больше 89Mbyte/s отправить не может). Машина при этом ещё отдаёт около 200
файлов медленным клиентам.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list