Нагрузка на CPU + nofile

danforth
На сайте с 18.12.2015
Offline
153
1078

Всем привет! Есть веб-приложение написанное на Go, ничего сложного, пока это просто роутинг + шаблонизация.

Есть vagrant виртуалка с Ubuntu 16.04.1.

При нагрузочных тестах, вижу такую картину:

При этом, далее в логи начало сыпать о лимитах на max open files (soft - 1024)

Решил поднять это значение до 20 000, и проблему это вроде как решило.

После чего запустил siege -c 700 site.ru, и получил следующую картину:

Смущает вот что: load averege: 201.81

Т.е., если я правильно понимаю, в очереди на обработку находится 201 процесс? При этом самое большое время ответа сервера - 1.4 секунды. По загрузке видно, что ядра не загружены полностью (если я правильно понимаю) сам процесс жрет 131% (при нескольких ядрах это нормально?) и ядра находятся в idle что видно по скриншоту. Хотя процесс имеет D state.

Вопрос: почему такая маленькая производительность, и откуда взялся такой load average? В чем проблема?

Конфиг ПК:

i5 4690

SSD 850 EVO

16GB RAM (виртуалке доступно только 4GB)

Работает через Vagrant + VirtualBox

Само приложение:

Роутинг

Инклюдим шаблон

Передаем плейсхолдеры (затычки чтобы определить все ли данные передаются в представление)

Отправляем готовый шаблон на клиент

Баз данных/редисов/кеша пока нет.

Junior Web Developer
S
На сайте с 23.05.2004
Offline
316
#1

Бери в расчет 100% на ядро. Т.е. 201% на 4 ядра - это 50% загрузки системы в среднем.

Это просто подпись.
danforth
На сайте с 18.12.2015
Offline
153
#2

Stek, откуда тогда такой load average? 400% на 4 ядра - это ок. Но для load average должно быть максимум 4.00 (4 целых) но никак не 200.0 (200 целых). Заметил что сами процессы в D уходят, то есть ждут чтения с диска. Буду, наверное, кешировать сами файлы шаблонов в оперативку (200+ кбайт - смех по сравнению с блокировкой диска). Верно мыслю?

T
На сайте с 09.12.2011
Offline
55
tls
#3
danforth:
Смущает вот что: load averege: 201.81

А чего вы ожидали после 700 запросов в секунду?

danforth
На сайте с 18.12.2015
Offline
153
#4

Ну, к примеру:

1 Xeon Core
1GB
nginx (fastcgi_cache)
php7
Wordpress

выдает те же 700rps, при этом load average 0.7-0.8. Там также чтение файла с диска.

Ожидал что-то вроде 2-3к rps на моем конфиге, для полного счастья. Тут даже базы никакой нету. Просто берем файл, парсим его, втыкаем переменные в него, отдаем клиенту. Все.

Может проблема в виртуализации, я пробовал уже отключать synced_folders, говорят они замедляют работу, но на мой пример это никак не повлияло. Все равно долго как-то читает с диска. Буду либо в рам писать, либо искать причину такого поведения.

T
На сайте с 09.12.2011
Offline
55
tls
#5
danforth:
Там также чтение файла с диска.

Только для первого запроса, скорее всего.

danforth:
Все равно долго как-то читает с диска.

Может производительность дисковой померить/сравнить?

danforth
На сайте с 18.12.2015
Offline
153
#6
tls:
Только для первого запроса, скорее всего.

Если я не ошибаюсь, то buff/cache в top как раз и показывает размер прокешированных файлов, к которым чаще всего обращаются. Почему тогда мой файл не кешируется на уровне ядра?

tls:
Может производительность дисковой померить/сравнить?

Запись

Домашний ПК + Vagrant

ubuntu@ubuntu-xenial:~$ dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output
10240+0 records in
10240+0 records out
83886080 bytes (84 MB, 80 MiB) copied, 0.0588646 s, 1.4 GB/s

VPS ihor

danforth@danforth:~$ sudo dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output
10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 0.0980482 s, 856 MB/s

Чтение

Домашний ПК

ubuntu@ubuntu-xenial:~$ sudo hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads: 26750 MB in 2.00 seconds = 13391.54 MB/sec
Timing buffered disk reads: 1190 MB in 3.00 seconds = 396.12 MB/sec

На домашнем почти в два раза выше скорость записи, чтение на VPS проверить не удалось.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#7

Have you tried to run siege on different machine?

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
danforth
На сайте с 18.12.2015
Offline
153
#8
Оптимизайка:
Have you tried to run siege on different machine?

Нет, но, кстати, вполне возможно что проблема в этом, так как ранее fsockopen ошибка была у siege. Попробую долбануть по VPSке чуть позже, посмотрим что покажет.

---------- Добавлено 28.11.2016 в 18:08 ----------

Короче говоря, протестил на VPS, долбил с домашнего ПК, при максимально возможном concurrency установленным в 1000, получил следующее:

top - 10:48:59 up 9 days, 22:50,  1 user,  load average: 0.43, 0.20, 0.07
KiB Mem: 1048576 total, 333532 used, 715044 free, 0 buffers
KiB Swap: 0 total, 0 used, 0 free. 269852 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20597 root 20 0 35080 21392 3108 R 37.6 2.0 1:21.13 main
1 root 20 0 35440 4812 1432 S 0.0 0.5 0:03.38 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/11+
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/1101
200 root 20 0 49212 1192 720 S 0.0 0.1 0:00.00 systemd-ude+
312 syslog 20 0 168088 18912 896 S 0.0 1.8 0:12.15 rsyslogd

А в siege получил следующее:

** SIEGE 3.0.8
** Preparing 1000 concurrent users for battle.
The server is now under siege...
Lifting the server siege... done.

Transactions: 100464 hits
Availability: 100.00 %
Elapsed time: 166.97 secs
Data transferred: 36.31 MB
Response time: 1.15 secs
Transaction rate: 601.69 trans/sec
Throughput: 0.22 MB/sec
Concurrency: 692.43
Successful transactions: 100466
Failed transactions: 0
Longest transaction: 32.33
Shortest transaction: 0.05

При этом Longest transaction чрезмерно высокий, хоть доступность и 100%. Изменил nofile до 40000 (на сервере он тоже был 1024). Увеличил trans/sec до 710 и Longest Transaction упало до 9~ секунд, при этом load average не поднялось выше 0.5, что для меня является приемлемым вариантом (никак не 200+ load average на четырех-то ядрах!) для VPS за 300 рублей. Всем спасибо. Думаю, что проблема решена, но если есть ещё предложения/догадки как ускорить - пишите.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий