anonymous@RULINUX.NET~# Last login: 2024-11-22 23:08:18
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Переход сервера в насыщение - чем объяснить?

Вопрос скорее из любопытства.
Задался тут вопросом каков будет чистый оверхед при неиспользовании keep-alive в интранете (ну, в интернете понятно оно окупается стоимостью установления соединения через кучу хопов).
Сетап такой: старый однопроцессорный одноядерный лэптоп (проц Intel(R) Pentium(R) M processor 1.60GHz), который особо ничего не делает.
На лэптопе стоит lighttpd и по заданному урлу отдаёт статический файлик размером 14 байт. Беру Apache Bench и начинаю долбить сайт. Количество запросов постоянно, а количество параллельных потоков (опция -c) варьируется.

И вот что интересно, если посмотреть на портянку внизу, то при 131 потоке время, затраченное на "Connect" не превышает 13 миллисек - этот показатель варьируется, но не превышает 50 миллисек никогда.

Однако, стоит начать долбить сервер в 132 потока, то максимальное время коннекта сразу подскакивает до целой секунды (второй тест в портянке в конце поста).

ИЧСХ, это стабильно воспроизводится от теста к тесту.

С разрешёнными Keepalive (Опция -k - два последних результата) потоков требуется больше, но "насыщение" всё равно наступает. Количество потоков незначительно варьируется - при повторном тесте с малым количеством потоков может дать макс.задержку соединения больше минуты, а если дать "отдохнуть" минутку - то опять всё хорошо.

Спрашивается - чем определяются эти пороги?
Настройки, в части на мой взгляд касающейся, такие:

text

server.max-connections = 1024
server.max-keep-alive-idle = 5
server.max-keep-alive-requests = 16
 


Ну и выхлоп бенчмарка:
text

$ ab -n 12000 -c 131   http://somehost/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
...
Server Software:        lighttpd/1.4.32
Server Hostname:        somehost
Server Port:            80

Document Path:          /
Document Length:        14 bytes

Concurrency Level:      131
Time taken for tests:   3.189 seconds
Complete requests:      12000
Failed requests:        0
Write errors:           0
Total transferred:      2964000 bytes
HTML transferred:       168000 bytes
Requests per second:    3762.41 [#/sec] (mean)
Time per request:       34.818 [ms] (mean)
Time per request:       0.266 [ms] (mean, across all concurrent requests)
Transfer rate:          907.54 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.7      0      13
Processing:     5   33  12.7     32     837
Waiting:        5   33  12.6     32     837
Total:         11   33  12.7     32     837

Percentage of the requests served within a certain time (ms)
  50%     32
  66%     33
  75%     33
  80%     33
  90%     34
  95%     36
  98%     41
  99%     42
 100%    837 (longest request)



$ ab -n 12000 -c 132   http://somehost/
...

Server Software:        lighttpd/1.4.32
Server Hostname:        somehost
Server Port:            80

Document Path:          /
Document Length:        14 bytes

Concurrency Level:      132
Time taken for tests:   3.210 seconds
Complete requests:      12000
Failed requests:        0
Write errors:           0
Total transferred:      2964000 bytes
HTML transferred:       168000 bytes
Requests per second:    3738.32 [#/sec] (mean)
Time per request:       35.310 [ms] (mean)
Time per request:       0.268 [ms] (mean, across all concurrent requests)
Transfer rate:          901.72 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0  12.9      0    1002
Processing:     2   33  12.9     32     837
Waiting:        2   33  12.9     32     836
Total:         12   33  18.2     32    1035

Percentage of the requests served within a certain time (ms)
  50%     32
  66%     33
  75%     33
  80%     33
  90%     34
  95%     37
  98%     38
  99%     39
 100%   1035 (longest request)


$ ab -n 12000 -c 167  -k http://somehost/
...

Server Software:        lighttpd/1.4.32
Server Hostname:        somehost
Server Port:            80

Document Path:          /
Document Length:        14 bytes

Concurrency Level:      167
Time taken for tests:   1.524 seconds
Complete requests:      12000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    11376
Total transferred:      3020880 bytes
HTML transferred:       168000 bytes
Requests per second:    7874.72 [#/sec] (mean)
Time per request:       21.207 [ms] (mean)
Time per request:       0.127 [ms] (mean, across all concurrent requests)
Transfer rate:          1935.92 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1  34.2      0    1002
Processing:     0   20   6.0     18     220
Waiting:        0   20   6.0     18     220
Total:          0   21  34.4     18    1020

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     20
  80%     21
  90%     27
  95%     31
  98%     35
  99%     40
 100%   1020 (longest request)
$ ab -n 12000 -c 166  -k http://somehost/
...

Server Software:        lighttpd/1.4.32
Server Hostname:        somehost
Server Port:            80

Document Path:          /
Document Length:        14 bytes

Concurrency Level:      166
Time taken for tests:   1.501 seconds
Complete requests:      12000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    11336
Total transferred:      3020680 bytes
HTML transferred:       168000 bytes
Requests per second:    7995.17 [#/sec] (mean)
Time per request:       20.763 [ms] (mean)
Time per request:       0.125 [ms] (mean, across all concurrent requests)
Transfer rate:          1965.40 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.0      0      18
Processing:     0   20   5.9     19      59
Waiting:        0   20   5.9     19      59
Total:          0   20   6.0     19      59

Percentage of the requests served within a certain time (ms)
  50%     19
  66%     19
  75%     19
  80%     20
  90%     27
  95%     33
  98%     41
  99%     48
 100%     59 (longest request)
 

anonymous(*) (2014-02-02 06:06:57)

[Ответить на это сообщение]
avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

А зависимость от числа потоков какая должна быть по-твоему? Порог скорее всего зависит от конкретной конфигурации. Плюс надо мониторить сам хост, что при этом на нём с системными ресурсами происходит

Pshen(*)(2014-02-02 07:49:46)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36
avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

> Порог скорее всего зависит от конкретной конфигурации.

Чтобы мы все длелали без вас, кэп :D

> Плюс надо мониторить сам хост, что при этом на нём с системными ресурсами происходит

С какими ресурсами, как мониторить?

anonymous(*)(2014-02-02 14:19:28)

avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

основными системными ресурсами. Мониторить можно, например, мониторингом

Pshen(*)(2014-02-02 14:38:49)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36
avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

Думаю, на этом месте будет уместно послать тебя на хуй.

anonymous(*)(2014-02-02 15:02:31)

avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

Это вряд ли тебе сильно поможет

Pshen(*)(2014-02-02 15:18:10)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36
avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

>Однако, стоит начать долбить сервер в 132 потока, то максимальное время коннекта сразу подскакивает до целой секунды (второй тест в портянке в конце поста).
Я плохо понимаю в выводе ab, но выходит, что оно подскакивает до секунды на очень небольшой части запросов. В среднем у тебя 99% запросов завершаются за одно и то же время, так что это мелочь какая-то. Time per request практически одинаков.

Вообще, тут сложно что-то сказать, не зная внутренностей лайти. Попробуй ради интереса nginx на том же тесте с похожими настройками. Если у него будет проседание примерно на том же месте, то дело в системе, если нет - в лайти и его настройках. Как минимум можно будет исключить некоторые варианты. Можно ещё apache mpm-worker без лишних модулей прогнать в дополнение ко всему.

SystemV(*)(2014-02-02 16:07:09)

Emacs-w3m/1.4.524 w3m/0.5.3
avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

Ну да, в том и дело - добавляешь один поток и он уже не может приконнектиться в течение секунды, хотя max-connections вроде это дело не ограничивает. Попробую нгинкс на досуге (вообще весь тест затевался для демонстранции незначительности оверхеда при работе без keep-alive, а это - побочное открытие..)

anonymous(*)(2014-02-02 16:35:20)

avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

ab жутко врет на тестах с конкурентными коннекшанами, юзай что-то другое. По опыту могу сказать, что при тестировании асинхронных серверов с количеством одновременных подключений около 1000, разница с кипалайв и без примерно на порядок.

Ax-Xa-Xa(*)(2014-02-02 16:35:43)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
avatar
Скрыть

Re:Переход сервера в насыщение - чем объяснить?

А чем мерять посоветуешь?

anonymous(*)(2014-02-03 18:23:10)

Mozilla/5.0 (X11; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0
Этот тред читают 2 пользователя:
Анонимных: 2
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!