тюнинг sysctl для вебсервера, тесты ab

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
DarkAGeS
мл. сержант
Сообщения: 75
Зарегистрирован: 2009-05-30 14:07:28

тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение DarkAGeS » 2012-04-26 15:24:43

тесты ab с любыми параметрами не проходят до конца, если kern.ipc.numopensockets приближается к 56000
завершается с ошибкой:

Код: Выделить всё

apr_socket_connect(): Can't assign requested address
при этом в sysctl:

Код: Выделить всё

kern.ipc.nmbclusters=131072
kern.ipc.somaxconn=4096
kern.ipc.maxsockets=204800
kern.ipc.maxsockbuf=83886080
kern.maxfiles=204800
kern.maxfilesperproc=200000
куды копать?..

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение Gloft » 2012-04-28 13:04:22

Что такое ab?

Аватара пользователя
DarkAGeS
мл. сержант
Сообщения: 75
Зарегистрирован: 2009-05-30 14:07:28

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение DarkAGeS » 2012-04-28 13:24:58

apache benchmark
с опцией "-c 500" (500 коннектов) держит нормально, а вот с 1000 начинаются указанные выше проблемы. хочу понять во что упираюсь

Gloft
лейтенант
Сообщения: 645
Зарегистрирован: 2008-03-09 11:32:12
Откуда: Москва

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение Gloft » 2012-04-28 13:39:33

Возможно твой случай или очень похожий, там же есть ссылки на обсуждения и попытки решения.
http://phpsuxx.blogspot.com/2010/12/ngi ... 11211.html

Аватара пользователя
DarkAGeS
мл. сержант
Сообщения: 75
Зарегистрирован: 2009-05-30 14:07:28

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение DarkAGeS » 2012-05-03 15:50:38

Gloft
спасибо за ссылку, вроде бы похоже, но не то
по умолчанию на freebsd 9.0

Код: Выделить всё

net.inet.ip.portrange.hifirst: 49152
net.inet.ip.portrange.first: 10000
второе значение уменьшать не хочу, а первое уменьшал до 40000 - эффект нулевой относительно описанной проблемы
параметры

Код: Выделить всё

net.ipv4.tcp_tw_recycle
net.ipv4.tcp_tw_reuse
вообще отсутствуют в freebsd 9.0
в итоге забил. 500 коннектов держит стабильно и нормально. интерес был в общем то сугубо теоретический

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение manefesto » 2012-05-04 9:22:29

nginx стоит ?
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
DarkAGeS
мл. сержант
Сообщения: 75
Зарегистрирован: 2009-05-30 14:07:28

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение DarkAGeS » 2012-05-04 10:55:46

manefesto
ога nginx

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение manefesto » 2012-05-10 8:11:21

знаешь, тестирование с помощью ab сомнительное удовольствие.
Тест на чистом сервере не всегда оканчивается удачно.
Я забил.
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
DarkAGeS
мл. сержант
Сообщения: 75
Зарегистрирован: 2009-05-30 14:07:28

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение DarkAGeS » 2012-05-10 8:25:17

DarkAGeS
в итоге забил.
manefesto
Я забил.
:D

Аватара пользователя
AntonioK
рядовой
Сообщения: 38
Зарегистрирован: 2009-12-10 16:26:55

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение AntonioK » 2012-10-05 10:26:34

Похоже, это проблема самого ab.

Тоже мучался: http://habrahabr.ru/qa/19823/

В итоге тоже забил.

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: тюнинг sysctl для вебсервера, тесты ab

Непрочитанное сообщение Dmitriy_K » 2012-12-11 13:28:33

А вот я справился с этим траблом! :"":
Вот пример результата при тестировании локалхоста с запросом HTML:

Код: Выделить всё

# ab -n 1000000 -c 500 http://127.0.0.1:81/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Server Software:        Apache
Server Hostname:        127.0.0.1
Server Port:            81

Document Path:          /
Document Length:        1152 bytes

Concurrency Level:      500
Time taken for tests:   330.425 seconds
Complete requests:      1000000
Failed requests:        0
Write errors:           0
Total transferred:      1392000000 bytes
HTML transferred:       1152000000 bytes
Requests per second:    3026.40 [#/sec] (mean)
Time per request:       165.213 [ms] (mean)
Time per request:       0.330 [ms] (mean, across all concurrent requests)
Transfer rate:          4114.02 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8 140.1      0    6209
Processing:     6  158 104.7    139    3925
Waiting:        6  157 104.7    139    3925
Total:         12  165 176.0    139    9951

Percentage of the requests served within a certain time (ms)
  50%    139
  66%    173
  75%    216
  80%    245
  90%    310
  95%    360
  98%    412
  99%    440
 100%   9951 (longest request)
Трабл оказался связан с тем как ab и apache обращаются с WAIT-сокетами локалхоста. У них это как-то криво сделано, они обязательно нуждаются в их наличии. В результате, если в sysctl имеется net.inet.tcp.nolocaltimewait=1 (не создавать состояния TIME_WAIT для соединений localhost), ab падает с ошибкой "apr_socket_connect(): Can't assign requested address".
Кроме того, для большого потока запросов на локалхост, ab нуждается в максимально возможном количестве "compressed TCP TIME_WAIT entries", указываемых через net.inet.tcp.maxtcptw. Там нужно прописывать половину имеющихся сокетов.
Когда ab тестирует apache на localhost, видно как идут волны нарастания и спада количества занятых сокетов. Посмотреть можно так:

Код: Выделить всё

# sysctl kern.ipc.numopensockets && netstat -an | grep -c TIME_WAIT
kern.ipc.numopensockets: 36690
33692
А вот при тестировании nginx ситуация другая, там никаких волн нет, держится на одном уровне:

Код: Выделить всё

#sysctl kern.ipc.numopensockets && netstat -an | grep -c TIME_WAIT
kern.ipc.numopensockets: 25057
84866
Кстати, сравнительный результат примерно такой:

Код: Выделить всё

Server Software:        nginx
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /
Document Length:        1152 bytes

Concurrency Level:      500
Time taken for tests:   245.439 seconds
Complete requests:      1000000
Failed requests:        1
   (Connect: 0, Receive: 0, Length: 1, Exceptions: 0)
Write errors:           0
Total transferred:      1390998609 bytes
HTML transferred:       1151998848 bytes
Requests per second:    4074.33 [#/sec] (mean)
Time per request:       122.719 [ms] (mean)
Time per request:       0.245 [ms] (mean, across all concurrent requests)
Transfer rate:          5534.56 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   54 381.1      6    9409
Processing:     0   68 364.5     19   26733
Waiting:        0   67 363.7     19   26733
Total:         10  122 533.0     25   26739

Percentage of the requests served within a certain time (ms)
  50%     25
  66%     26
  75%     27
  80%     27
  90%     30
  95%    255
  98%   3025
  99%   3027
 100%  26739 (longest request)
То есть, nginx примерно в полтора раза быстрее. Малая величина RPS в обоих случаях - следствие вредного воздействия PF, который имеет странную особенность после некоторого количества запросов тормозить поток запросов без превышения лимитов и сильно задерживать ответы (см. longest request). Сейчас пытаюсь понять как преодолеть этот эффект.
В целом, ab пользоваться можно, у него есть некоторые полезные параметры в результатах. Я по очереди использую ab и Siege.