Перейти к содержимому
13 / 15

Диагностика высокой задержки в Go-сервисе: порядок действий

Разбор задержки эффективен, только если идти сверху вниз и не перескакивать. Шаг первый — понять, где именно: смотреть надо перцентили, а не среднее, и разложить их по эндпоинтам; часто «сервис тормозит» означает «один маршрут из двадцати». Шаг второй — своё или чужое: трассировка сразу показывает, ушло ли время в базу, во внешний вызов или осталось внутри процесса. Если чужое, разбор переезжает туда, и дальше идти незачем. Шаг третий — если своё, отделить процессор от ожидания: профиль отвечает на вопрос, тратилось ли время на вычисления; если да — ищем горячий путь, если нет — время уходит в блокировки, и нужен go tool trace. Шаг четвёртый — исключить рантайм: доля процессорного времени на сборку и число горутин отвечают, не в сборщике ли дело. И только потом гипотезы. Самая частая настоящая причина в Go-сервисах не в коде: насыщение пула соединений к базе, троттлинг процессора в контейнере и блокировка на общем мьютексе.

Диагностика высокой задержки в Go-сервисе: порядок действий | JScriptiser