Skip to main content
Итак, оно тормозит…
Всеволод Поляков
Всеволод Поляков
Консультант по DevOps,
инфраструктуре, архитектуре,
мониторингу, культуре и всему
остальному. 

Slack.ukrops.club

dvps.blog
Итак, к вам приходит пользователь и говорит…
программист
менеджер
джа
Перевести стрелки на dev
O(n), алгоритмы, всё хорошо
BenchmarkFib1 1000000000 2.84 ns/op
BenchmarkFib2 500000000 7.92 ns/op
BenchmarkFib3 100000000 13.0 ns/op
BenchmarkFib10 5000000 447 ns/op
BenchmarkFib20 50000 55668 ns/op
BenchmarkFib40 2 942888676 ns/op
И вообще это сеть тормозит
Или балансеры
Найти кто тормозит
Балансеры это центр
Балансеры
• Логи
• Метрики
Балансеры → логи
• Время сессии
• Время ответа бэкендов
• Статус
• Сортировка по уникальной странице
• Исключить вебсокеты
• Количество запросов (соотношение к UID)
Балансеры → метрики
• Время сессии (перцентили)
• Время ответа бэкенда (перцентили)
• Сортировка по статусу
• Сортировка по уникальной странице
• Исключить вебсокеты
• Количество запросов (соотношение к UID)
Nginx → логи
• $upstream_response_time
• $request_time
• $status
• $upstream_connect_time
• $upstream_header_time
• $uri ($args)
Nginx → логи
• map → status (20*, 50*) → запись
• Обрабатывать таймауты на JS
• Lua, nginScript → только длинные запросы
Nginx → метрики
• stub
• Из логов (logstashnginxwatchetc)
• Плагинами
Nginx → метрики
• https://github.com/mailru/graphite-nginx-module
• https://github.com/zebrafishlabs/nginx-statsd
• https://github.com/lonelyplanet/openresty-statsd
• https://github.com/eleme/nginx-udp
Допустим, тормозит приложение…
Приложение
• Логи
• Метрики
• Системные метрики
• Профилирование
Помогите dev настроить мониторинг
Приложение → логи
• Время ответа и статус
• Включаемый сквозной UID (для отдельного юзера)
• UID в ошибках
• Время выполнения основных методов
Приложение → метрики
• Время ответа и статус (перцентили)
• Время выполнения методов (перцентили)
• Группируйте по типу запроса
• Успешные и неудачные — разные метрики
Приложение → ОС
• CPU
• RAM
• Network
• Syscalls
Приложение → ОС → CPU
• tophtop, LA?
• mpstat -P ALL 1 – информация по нагрузке на ядра
• pidstat 1 — информация по пидам
• perf stat -p <PID>
Приложение → ОС → RAM
• tophtop, LA?
• vmstat 1
• free -m
• bcc/memleak
Приложение → ОС → Сеть
• sysdig -c topprocs_net
• bcc/tcptop
• bcc/tcpaccept, bcc/tcpconnect, bcc/tcpconnlat
• bcc/solisten
• ss,netstat
Приложение → ОС → others
• perf record -F 99 -p <PID>
• perf top
• sysdig -c topscalls_time
• sysdig -i bottlenecks
• bcc/syscount
• bcc/softirqs
• systemtap
Приложение → Профилирование
• Профилировщики ЯП
• Флеймграфы
• Средства ОС
Приложение → Профилирование →
Флеймграфы
Профилирование → Средства ОС
• bcc/ucalls
• bcc/uflow
• bcc/ugc
• bcc/ustat
• bcc/uthreads
• флеймграфы (perf, systemtap)
• sysdig
Взаимодействие с другими приложениями
• Время запроса
• Сквозной UID
• Перцентили
• Разные графики для успешных и неудачных
• Группировка запросов
Работа с диском
• Перцентили
• Распределения (0-10мс, 10-50мс и т.п.)
• bcc/biolatency, biotop, biosnoop, bitesize
• iostat -x 1, iotop
• perf record -e 'ext4:*' -o /tmp/perf.data -a
• sysdig -c topfiles_time
• sysdig -c topprocs_file
• sysdig -c fileslower 1
• sysdig -c topfiles_bytes
Работа с базой
• bcc/dbslower, dbstat
• https://github.com/mysql/mysql-sys и аналоги
• Сгруппированные запросы с приложения
Итог
• Логи и метрики это наше всё
• Если их нет:
• sysdig
• perf
• bcc
• Флеймграфы помогают
Вот и всё!
• Vsevolod Poliakov

• GitHub.com/ctrlok

• Telegram: ctrlok

• http://slack.ukrops.club

• http://dvps.blog