SlideShare a Scribd company logo
1 of 24
Download to read offline
Применение 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
Вопросы?
Спасибо! С вами был
● Александр Чистяков, главный инженер
● alex@gitinsky.com
● Компания Git in Sky
● Кстати, нас можно нанять!
● info@gitinsky.com
●

Git in Sky, 2013

More Related Content

What's hot

специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)Ontico
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterpriseAlex Chistyakov
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015Alex Chistyakov
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodNikita Baksalyar
 
Sama5d3: how to run linux on it
Sama5d3: how to run linux on itSama5d3: how to run linux on it
Sama5d3: how to run linux on itPavel Kurochkin
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...Mail.ru Group
 
Gdg создание telegram бота с использованием google сервисов без денег
Gdg создание telegram бота  с использованием google сервисов без денегGdg создание telegram бота  с использованием google сервисов без денег
Gdg создание telegram бота с использованием google сервисов без денегАлександр Вишняков
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose HadoopSerguei Gitinsky
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovdrupalconf
 
Денис Трифонов
Денис ТрифоновДенис Трифонов
Денис ТрифоновCodeFest
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterAleksandr Tarasov
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Mail.ru Group
 

What's hot (19)

специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterprise
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Build your own multistack JS startup
Build your own multistack JS startupBuild your own multistack JS startup
Build your own multistack JS startup
 
On Docker
On DockerOn Docker
On Docker
 
Dapper + QueryObject
Dapper + QueryObjectDapper + QueryObject
Dapper + QueryObject
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
 
Sama5d3: how to run linux on it
Sama5d3: how to run linux on itSama5d3: how to run linux on it
Sama5d3: how to run linux on it
 
Yacovlev
YacovlevYacovlev
Yacovlev
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
 
Gdg создание telegram бота с использованием google сервисов без денег
Gdg создание telegram бота  с использованием google сервисов без денегGdg создание telegram бота  с использованием google сервисов без денег
Gdg создание telegram бота с использованием google сервисов без денег
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose Hadoop
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosov
 
Денис Трифонов
Денис ТрифоновДенис Трифонов
Денис Трифонов
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
 

Viewers also liked

Audienceexperience
AudienceexperienceAudienceexperience
Audienceexperiencesparkly
 
Camp Feasibility Study Results, 5-20-10
Camp Feasibility Study Results, 5-20-10Camp Feasibility Study Results, 5-20-10
Camp Feasibility Study Results, 5-20-10Elizabeth Keserauskis
 
Edwardsville-Glen Carbon Chamber Presentation, 4-27-10
Edwardsville-Glen Carbon Chamber Presentation, 4-27-10Edwardsville-Glen Carbon Chamber Presentation, 4-27-10
Edwardsville-Glen Carbon Chamber Presentation, 4-27-10Elizabeth Keserauskis
 
Новые инструменты в арсенале программиста .NET 4.0 : F# и динамические языки
Новые инструменты в арсенале программиста .NET 4.0 : F# и динамические языкиНовые инструменты в арсенале программиста .NET 4.0 : F# и динамические языки
Новые инструменты в арсенале программиста .NET 4.0 : F# и динамические языкиSQALab
 
10 Gebote
10 Gebote10 Gebote
10 Gebotekathif
 
2011.04.25 Brosura Young Professionals Academy
2011.04.25 Brosura Young Professionals Academy2011.04.25 Brosura Young Professionals Academy
2011.04.25 Brosura Young Professionals AcademyPFA Breda Olivian-Claudiu
 
Essay #1 (personal narrive)
Essay #1 (personal narrive)Essay #1 (personal narrive)
Essay #1 (personal narrive)Kurt Reynolds
 

Viewers also liked (8)

Audienceexperience
AudienceexperienceAudienceexperience
Audienceexperience
 
Camp Feasibility Study Results, 5-20-10
Camp Feasibility Study Results, 5-20-10Camp Feasibility Study Results, 5-20-10
Camp Feasibility Study Results, 5-20-10
 
Edwardsville-Glen Carbon Chamber Presentation, 4-27-10
Edwardsville-Glen Carbon Chamber Presentation, 4-27-10Edwardsville-Glen Carbon Chamber Presentation, 4-27-10
Edwardsville-Glen Carbon Chamber Presentation, 4-27-10
 
Новые инструменты в арсенале программиста .NET 4.0 : F# и динамические языки
Новые инструменты в арсенале программиста .NET 4.0 : F# и динамические языкиНовые инструменты в арсенале программиста .NET 4.0 : F# и динамические языки
Новые инструменты в арсенале программиста .NET 4.0 : F# и динамические языки
 
encuestas (informe)
encuestas (informe)encuestas (informe)
encuestas (informe)
 
10 Gebote
10 Gebote10 Gebote
10 Gebote
 
2011.04.25 Brosura Young Professionals Academy
2011.04.25 Brosura Young Professionals Academy2011.04.25 Brosura Young Professionals Academy
2011.04.25 Brosura Young Professionals Academy
 
Essay #1 (personal narrive)
Essay #1 (personal narrive)Essay #1 (personal narrive)
Essay #1 (personal narrive)
 

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

Xp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practicesXp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practicesAlexey Andreev
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg PresentationHighLoad2009
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Fwdays
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.DrupalForumZP2012
 
SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4Alex Chistyakov
 
Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаcorehard_by
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013Alex Chistyakov
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptFDConf
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаЭкосистемные Проекты Фрии
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...IT-Portfolio
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...e-Legion
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Fwdays
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)aragozin
 

Similar to Применение DTrace для оптимизации производительности на примере двух больших веб приложений на Ruby on Rails и PHP (20)

Xp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practicesXp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practices
 
Git in Sky services intro
Git in Sky services introGit in Sky services intro
Git in Sky services intro
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
 
SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4
 
Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кода
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 
Stairway to Heaven
Stairway to HeavenStairway to Heaven
Stairway to Heaven
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascript
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
 
HBase on Dev{Highload}
HBase on Dev{Highload}HBase on Dev{Highload}
HBase on Dev{Highload}
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
Kranonit s16 (python). sergey burma
Kranonit s16 (python). sergey burmaKranonit s16 (python). sergey burma
Kranonit s16 (python). sergey burma
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)
 

More from SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 

More from SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

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

  • 1. Применение DTrace для оптимизации производительности в web и не только Git in Sky, 2013
  • 2. Кто я? Инженер ● Главный инженер, компания Git in Sky ● 15 лет в индустрии ● Занимаюсь эксплуатацией веб-сайтов ● Оптимизирую производительность ● Git in Sky, 2013
  • 3. Кто вы? Работаете в сервисной компании? ● Работаете в продуктовой компании? ● Разрабатываете веб-сайты? ● PHP, Ruby, Java, Perl, Node.JS? ● Оптимизируете производительность? ● Git in Sky, 2013
  • 4. Постановка задачи Любое приложение на любом языке работает неоптимально ● Иногда с этим можно мириться ● Иногда с этим нужно бороться ● Возможные результаты борьбы: ● Приложение работает быстрее ● Приложение использует меньше ресурсов ● Git in Sky, 2013
  • 5. Как это работало в идеальном мире? В идеальном мире проблемы всегда с БД ● Средства профилирования БД: ● Лог долгих запросов ● Команда EXPLAIN ● Книга Дэна Тоу ● Git in Sky, 2013
  • 6. Как это работает в реальном мире? Git in Sky, 2013
  • 7. Пример №1 Сайт на Ruby on Rails ● С базой данных все более-менее нормально ● Слишком много процессора расходуется серверами приложений ● ^ Что, вообще-то, не является большой проблемой, пока серверов приложений меньше, чем N, где N определяется жадностью клиента и другими параметрами ● Git in Sky, 2013
  • 8. Как быть? Заплатить NewRelic за Pro версию ● Использовать http://poormansprofiler.org/ ● Расставить собственные метрики в коде и собирать их в StatsD/Graphite ● Использовать DTrace! ● Git in Sky, 2013
  • 9. DTrace? Нет, не слышал! Была такая компания Sun Microsystems... ● Была такая операционная система OpenSolaris... ● DTrace — динамический фреймворк профайлинга приложений, созданный под OpenSolaris ● Git in Sky, 2013
  • 10. В наше время Компании Sun больше нет, но ● DTrace есть во всех Illumos-based дистрибутивах ● ^ мы используем SmartOS ● DTrace есть в Mac OS X ● DTrace есть во FreeBSD ● Git in Sky, 2013
  • 11. Динамический... «Probes» - датчики ● Инструментировано все подряд, начиная от ядра системы ● Профайлинг можно включать на продакшнсистеме ● Это не должно сильно расходовать ресурсы* ● Git in Sky, 2013
  • 12. Что сделали Развернули сайт на SmartOS ● Написали DTrace скрипты ● Записали тестовый сценарий в Tsung ● Запустили его, создали нагрузку ● Собрали статистику ● Проанализировали ● Собрали статистику ● Проанализировали ● Собрали статистику... ● Git in Sky, 2013
  • 13. Что нашли Медленно работает рендеринг некоторых страниц (partials) ● Впрочем, эта проблема разработчикам Ruby была известна (диалог как в «Ghost Dog»): ● - Чувак, паршэлы тормозят! ● - Походу, чувак, паршэлы тормозят! ● Git in Sky, 2013
  • 14. С чем столкнулись Стандартный PostgreSQL собран без Hstore ● Разработчики не хотят ничего оптимизировать ● ^ Большой проект не такой большой! ● Git in Sky, 2013
  • 15. Зачем все это было? Не расходитесь, кроме больших веб-проектов в жизни есть и другие дела ● Кроме того, платить за NewRelic и не знать, как собрать его самому из подручных бесплатных средств — это не инженерный подход, а какая-то ситуация из 90-х ● Git in Sky, 2013
  • 17. В углах ринга MySQL 5.6 из репозитория pkgsrc для SmartOS, собранный не нами ● MariaDB 10.0.6 Beta, собранная нами ● ^ Нечестно, нужно было взять более новый MySQL! ● ^^ Хехе, дождитесь результатов! ● Git in Sky, 2013
  • 18. Правила соревнования Идентичные настройки в конфиге ● Идентичная sakiladb с официального сайта ● (почти) Простейший запрос из официальной документации же ● Клиент делает его по сети в один поток с другой машины просто из шелл-программы в бесконечном цикле ● Git in Sky, 2013
  • 19. 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
  • 20. DTrace скрипт, часть 2 profile:::tick-1sec /secs == 0/ { exit(0); } END { trunc(@stacks, 40); printa(@stacks); } Git in Sky, 2013
  • 21. Что нашли Секретный технический текст: http://goo.gl/HFsFKv ● Если вкратце: ● Парсер SQL отлично виден на радаре ● MySQL — 430 из 16359 фреймов связаны с парсингом ● MariaDB — 698 из 12002 фреймов связаны с парсингом ● Похоже, у нас есть победитель! (MariaDB парсит дольше) ● Git in Sky, 2013
  • 22. С чем столкнулись MariaDB под Solaris давно никто не собирал ● Чтобы использовать DTrace с MariaDB, нужно выкинуть DTrace инструментирование из MariaDB! ● Почему 4001hz профайлер собирает так мало сэмплов? ● ^ Я не знаю! ● Git in Sky, 2013
  • 23. Выводы Работа для инженера найдется всегда ● Существуют отличные средства для анализа производительности ● Они бесплатны, их можно использовать ● Используйте их! ● Git in Sky, 2013
  • 24. Вопросы? Спасибо! С вами был ● Александр Чистяков, главный инженер ● alex@gitinsky.com ● Компания Git in Sky ● Кстати, нас можно нанять! ● info@gitinsky.com ● Git in Sky, 2013