Dimka

Рейтинг
240
Регистрация
07.11.2000
Sijaw:
на них порог блокировки при атаке выше

а какой порог блокировки на выделенном сервере?

netwind:
Хорошо, что вам удалось подергать за ручки и что-то изменилось. Но это как-то неосознанно происходит.

Все верно. Причем я не уверен, что эти опции не вылезут где-то другим боком.

netwind:
Поэтому, я бы все-таки начал с ionice и rsync --bwlimit чтобы неприоритетные задачи сделать незаметными

Вы имеете ввиду всем задачам, выполняемым по крону, поставить ionice -с3 или другое?

rsync --bwlimit - "ограничивает пропускную способность в КБ/c"

У меня пока не машине нет бакапов. Или где-то еще используется?

Еще, я так понимаю, может подвисать и из-за зеркального рейда.

atop - нагрузка "только запись логов":

  PID      RDDSK          WRDSK      WCANCL           DSK        CMD       
1473 12K 78184K 0K 18% flush-9:2
28907 80K 66728K 0K 16% nginx
28908 44K 66572K 0K 16% nginx
28905 140K 65696K 0K 16% nginx
28906 236K 65560K 0K 16% nginx
473 0K 51396K 0K 12% jbd2/md2-8



---------- Добавлено 14.03.2016 в 17:13 ----------

Погуглил - проблема не только у мнея. Судя по всему блокирование nginx из-за бага в ядре 12309: bugzilla.kernel.org/show_bug.cgi?id=12309

Победил следующим путем.

Было:

# cat /proc/sys/vm/swappiness
10
# cat /proc/sys/vm/dirty_ratio
40
# cat /proc/sys/vm/dirty_background_ratio
2
# cat /proc/sys/vm/vfs_cache_pressure
1000
# cat /sys/block/sda/queue/nr_requests
128
# cat /sys/block/sdb/queue/nr_requests
128
# sysctl vm.vfs_cache_pressure
vm.vfs_cache_pressure = 1000
# cat /proc/sys/vm/swappiness
10

При:

# echo 4096 > /sys/block/sda/queue/nr_requests
# echo 4096 > /sys/block/sdb/queue/nr_requests
# echo 99 > /proc/sys/vm/dirty_ratio
# sysctl vm.vfs_cache_pressure=10
# sysctl vm.swappiness=100

Особо ничего не изменилось.

dd if=/dev/zero of=/gbfile bs=1M count=6000&

лог доступности сайта, ms:

[2016-03-14 19:26:27] 179: 0 0 44 44 89 
[2016-03-14 19:26:40] 10192: 0 0 40 8040 89 (таймаут)
[2016-03-14 19:26:49] 7192: 0 0 7057 44 89
[2016-03-14 19:26:53] 178: 0 0 44 44 89

Оставил и добавил:

sysctl vm.dirty_background_ratio=0
sysctl vm.dirty_ratio=0

Это помогло. Файл стал создаваться существенно дольше:

9437184000 bytes (9.4 GB) copied, 68.1214 s, 139 MB/s

Но, система почти не подвисает.

при проверке доступности сайта каждые 2 секунды:

dd if=/dev/zero of=/gbfile bs=1M count=6000& -- вообще без тормозов

dd if=/dev/zero of=/gbfile bs=1M count=9000& -- одна проверка с задержкой 1.267s

dd if=/dev/zero of=/gbfile bs=1M count=15000& -- одна проверка с задержкой 3.366s

[2016-03-14 19:41:56] 178: 0 0 44 44 88
[2016-03-14 19:42:02] 3366: 0 0 43 3233 88
[2016-03-14 19:42:04] 180: 0 0 45 44 89


---------- Добавлено 14.03.2016 в 17:27 ----------

Только во время создания 15Гбайт файла вырос disk latency до 4 сек (до этого он был максимум 0.1)

Огромное спасибо за советы.

Еще обнаружил проблему.

При более менее активных дисковых операциях, начинает подвисать nginx. Мне кажется, что процесс nginx блокируется при записи лога (лог нужен).

Логи достигают до 10-15 Гбайт в сутки (отключить не могу, но могу уменьшить на 30%).

Вот так выглядит лог проверки доступности сайта (числа - миллисекунды), если запустить на сервере копирование 10ГБ файла.

[time] All time: Dns Connect Send Wait Receive

[2016-03-13 03:09:18] 179: 0 0 44 45 89

[2016-03-13 03:09:20] 189: 0 0 47 44 96

[2016-03-13 03:09:34] 7252: 0 0 43 7007 200

[2016-03-13 03:09:37] 1970: 0 0 46 1831 91

[2016-03-13 03:09:41] 179: 0 0 44 44 89

[2016-03-13 03:09:51] 7770: 0 0 44 7007 718

[2016-03-13 03:09:54] 180: 0 0 45 44 89

[2016-03-13 03:09:56] 165: 0 0 41 41 81

Тоже копирование, но с ionice -c3

[2016-03-13 03:38:03] 178: 0 0 44 44 88

[2016-03-13 03:38:05] 178: 0 0 44 44 89

[2016-03-13 03:38:15] 4199: 0 0 44 4065 89

[2016-03-13 03:38:17] 178: 0 0 44 44 88

[2016-03-13 03:38:20] 177: 0 0 44 44 88

[2016-03-13 03:38:25] 1437: 0 0 40 1315 81

[2016-03-13 03:38:28] 162: 0 0 40 40 81

Я так понимаю, задержки когда каждый процесс nginx пытается записать лог.

Логи пишутся по 64Кб: access_log ... buffer=64k;

error_log без указания buffer

kovalkov:
Dimka, да, конечно, тариф BS-64-SSD https://fastvps.ru/dedicated#/cheapssd

Гарантированная скорость 1 Гбит/с?

В каком ДЦ будет?

kovalkov, у FastVPS можно арендовать этот сервер?

Intel® Core™ i7-6700 Quad-Core Skylake

Оперативная память: 64 ГБ DDR4

Жёсткие диски: 2 x 250 ГБ SATA 6 Гбит/с SSD

Подключение: 1 Гбит/с порт

Гарантировано: 1 Гбит/с
Место для резервных копий: 100 ГБ

http://ru.hetzner.com/hosting/produkte_rootserver/ex41sssd

netwind:
Раз правил нет - надо отключать.

получается, nf_nat, iptable_nat, а уже потом nf_conntrack_ipv4

nf_nat - получилось отключить, iptable_nat - не дает.

---------- Добавлено 11.03.2016 в 17:38 ----------

esetnod:
У вас nginx сам всё же ходит так интенсивно на бэкэнд

Все запросы (почти) статика, без бакэнда.

---------- Добавлено 11.03.2016 в 17:54 ----------

netwind, как мне кажется, очень верно указал причину - модуль conntrack.

При уменьшении в sysctl net.ipv4.netfilter.ip_conntrack_tcp_timeout****** стало легче.

Было net.netfilter.nf_conntrack_count = 312231, сейчас до 40.000

Забыл спросить.

После уменьшения таймаутов net.ipv4.netfilter.ip_conntrack_tcp_timeout_***** при выводе стат с ip_conntrack и было очень много с [UNREPLIED]:

2416 ESTABLISHED [UNREPLIED]

53289 SYN_SENT [UNREPLIED]

Это нормально?

Хочу сделать это во время минимального наплыва посетителей. А чем лучше тестить? Чем создавать нагрузку? Мне кажется, что ab не потянет.

Может быть проблема больше из-за того, что много уникальных IP коннектится к сайту (до 35-40К IP в минуту)? Или это не имеет значения, кто создает 40к коннектов в минуту: несколько IP или много?

Большое спасибо за ответы и советы.

netwind:
выгрузить последовательно модули, от которых зависит conntrack : получается, nf_nat, iptable_nat, а уже потом nf_conntrack_ipv4

1. ничего важного не теряю без этих модулей?

2. может ли вообще отвалиться сеть при попытке их выгрузки?

Всего: 764