Краткая версия:
- Система на несколько минут легла из-за
iowaitпри умеренной нагрузке - В этот момент не наблюдалось значительной дисковой активности
- DigitalOcean утверждает, что на гипервизоре не зафиксировано аномальной активности
Подробная версия:
В настоящее время используется дроплет на 8 ядер/16 ГБ от DigitalOcean, недавно обновлённый с конфигурации 4/8 в расчёте на краткосрочный рост трафика.
На момент инцидента параметр db_shared_buffers составлял 2 ГБ, а количество воркеров unicorn — 8. Позже я увеличил оба показателя.
В течение примерно двух часов во время прямого мероприятия происходило интенсивное создание постов в одной теме. Общее число пользователей за этот период составило около 200, при среднем значении около 70 одновременно (согласно данным аналитики).
Система работала стабильно более часа: средние значения нагрузки держались на уровне 4, загрузка CPU — около 30%, использование памяти — около 35%. Значительной дисковой активности не было, проблем с форумом не возникало.
Внезапно количество пользователей, согласно данным аналитики, удвоилось. Неизвестно, были ли это реальные пользователи или артефакт другой проблемы. Мы не крупное или известное сообщество. На нас никто не ссылается, и резкий приток новых пользователей был бы крайне необычен.
В тот же момент показатель iowait резко вырос, показывая устойчивые предупреждения выше 50%. Средние значения нагрузки за 1 минуту достигли 12, за 5 минут превысили 8. Вся система стала крайне неустойчивой: форум работал с огромными задержками, массово происходили временные разлогинивания из-за высокой нагрузки. При этом загрузка CPU никогда не превышала 40%.
Ситуация длилась 3–4 минуты, после чего в течение следующих 10 минут всё постепенно вернулось к норме. Согласно графикам DigitalOcean, дисковая активность всё время оставалась ниже 1 МБ/с, преимущественно записи.
Возможно ли, что проблема связана с форумом или его конфигурацией? Не обманывает ли DigitalOcean, и дело на самом деле в аппаратных неполадках? Если это первый вариант, есть ли предложения, как предотвратить повторение ситуации (это уже не первый раз)?
Вскоре ожидается ещё одно крупное мероприятие с высокой нагрузкой, которое крайне важно для сообщества. У меня нет возможности методом проб и ошибок выяснять, что работает. У меня есть только одна попытка сделать всё правильно (или ошибиться).