24
Git in Sky, 2013 Применение DTrace для оптимизации производительности в web и не только

Применение DTrace для оптимизации производительности на примере двух больших веб приложений на Ruby on

  • Upload
    sqalab

  • View
    516

  • Download
    8

Embed Size (px)

DESCRIPTION

Доклад Александра Чистякова на конференции Application Developer Days-4. г.Минск 13 декабря 2013

Citation preview

Git in Sky, 2013

Применение DTrace для оптимизации производительности

в web и не только

Git in Sky, 2013

Кто я?

● Инженер● Главный инженер, компания Git in Sky● 15 лет в индустрии● Занимаюсь эксплуатацией веб-сайтов● Оптимизирую производительность

Git in Sky, 2013

Кто вы?

● Работаете в сервисной компании?● Работаете в продуктовой компании?● Разрабатываете веб-сайты?● PHP, Ruby, Java, Perl, Node.JS?● Оптимизируете производительность?

Git in Sky, 2013

Постановка задачи

● Любое приложение на любом языке работает неоптимально● Иногда с этим можно мириться● Иногда с этим нужно бороться● Возможные результаты борьбы:● Приложение работает быстрее● Приложение использует меньше ресурсов

Git in Sky, 2013

Как это работало в идеальном мире?

● В идеальном мире проблемы всегда с БД● Средства профилирования БД:● Лог долгих запросов● Команда EXPLAIN● Книга Дэна Тоу

Git in Sky, 2013

Как это работает в реальном мире?

Git in Sky, 2013

Пример №1

● Сайт на Ruby on Rails● С базой данных все более-менее нормально● Слишком много процессора расходуется серверами приложений● ^ Что, вообще-то, не является большой проблемой, пока серверов приложений меньше, чем N, где N определяется жадностью клиента и другими параметрами

Git in Sky, 2013

Как быть?

● Заплатить NewRelic за Pro версию● Использовать http://poormansprofiler.org/● Расставить собственные метрики в коде и собирать их в StatsD/Graphite● Использовать DTrace!

Git in Sky, 2013

DTrace? Нет, не слышал!

● Была такая компания Sun Microsystems...● Была такая операционная система OpenSolaris...● DTrace — динамический фреймворк профайлинга приложений, созданный под OpenSolaris

Git in Sky, 2013

В наше время

● Компании Sun больше нет, но● DTrace есть во всех Illumos-based дистрибутивах● ^ мы используем SmartOS● DTrace есть в Mac OS X● DTrace есть во FreeBSD

Git in Sky, 2013

Динамический...

● «Probes» - датчики● Инструментировано все подряд, начиная от ядра системы● Профайлинг можно включать на продакшн-системе● Это не должно сильно расходовать ресурсы*

Git in Sky, 2013

Что сделали

● Развернули сайт на SmartOS● Написали DTrace скрипты● Записали тестовый сценарий в Tsung● Запустили его, создали нагрузку● Собрали статистику● Проанализировали● Собрали статистику● Проанализировали● Собрали статистику...

Git in Sky, 2013

Что нашли

● Медленно работает рендеринг некоторых страниц (partials)● Впрочем, эта проблема разработчикам Ruby была известна (диалог как в «Ghost Dog»):● - Чувак, паршэлы тормозят!● - Походу, чувак, паршэлы тормозят!

Git in Sky, 2013

С чем столкнулись

● Стандартный PostgreSQL собран без Hstore● Разработчики не хотят ничего оптимизировать● ^ Большой проект не такой большой!

Git in Sky, 2013

Зачем все это было?

● Не расходитесь, кроме больших веб-проектов в жизни есть и другие дела● Кроме того, платить за NewRelic и не знать, как собрать его самому из подручных бесплатных средств — это не инженерный подход, а какая-то ситуация из 90-х

Git in Sky, 2013

Пример №2

vs

Git in Sky, 2013

В углах ринга

● MySQL 5.6 из репозитория pkgsrc для SmartOS, собранный не нами● MariaDB 10.0.6 Beta, собранная нами● ^ Нечестно, нужно было взять более новый MySQL!● ^^ Хехе, дождитесь результатов!

Git in Sky, 2013

Правила соревнования

● Идентичные настройки в конфиге● Идентичная sakiladb с официального сайта● (почти) Простейший запрос из официальной документации же● Клиент делает его по сети в один поток с другой машины просто из шелл-программы в бесконечном цикле

Git in Sky, 2013

DTrace скрипт, часть 1

#!/usr/sbin/dtrace -s#pragma D option quiet dtrace:::BEGIN{ secs = 600;} profile:::profile-4001/pid == mysql_pid/{ @stacks[pid, tid, execname, ustack(5)] = count();} profile:::tick-1sec{ secs--;}

Git in Sky, 2013

DTrace скрипт, часть 2

profile:::tick-1sec/secs == 0/{ exit(0);} END{ trunc(@stacks, 40); printa(@stacks);}

Git in Sky, 2013

Что нашли

● Секретный технический текст: http://goo.gl/HFsFKv

● Если вкратце:● Парсер SQL отлично виден на радаре● MySQL — 430 из 16359 фреймов связаны с парсингом

● MariaDB — 698 из 12002 фреймов связаны с парсингом

● Похоже, у нас есть победитель! (MariaDB парсит дольше)

Git in Sky, 2013

С чем столкнулись

● MariaDB под Solaris давно никто не собирал● Чтобы использовать DTrace с MariaDB, нужно выкинуть DTrace инструментирование из MariaDB!● Почему 4001hz профайлер собирает так мало сэмплов?● ^ Я не знаю!

Git in Sky, 2013

Выводы

● Работа для инженера найдется всегда● Существуют отличные средства для анализа производительности● Они бесплатны, их можно использовать● Используйте их!

Git in Sky, 2013

Вопросы?

● Спасибо! С вами был● Александр Чистяков, главный инженер● [email protected]● Компания Git in Sky● Кстати, нас можно нанять!● [email protected]