-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
hw7 #37
base: master
Are you sure you want to change the base?
hw7 #37
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍✅
|
||
## Профилирование | ||
|
||
*Не получилось подключить `stackprof`, при запуске тестов возникает длинная ошибка, начинается всё с `[BUG] Segmentation fault at 0x0000000000000008` и далее огромный лог с бэктрейсами из Ruby, C и т.д. Так и не получилось исправить, поэтому пользуюсь пока только `ruby-prof`* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я недавно тоже пытался воспользоваться stackprof, столкнулся с такой же проблемой и тоже пришлось свичнуться на ruby-prof
|
||
**Полный набор тестов прошёл за 1220 сек.** | ||
|
||
Я ускорил прохождение тестов на 31%, настроил отправку данных в InfluxDB и создал график, потестировал несколько профилировщиков и полезных инструментов для работы с тестами. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У нас кстати в 3commas давно сделана сборка времени прогона спеков в CI по такой схеме
Было занятно посмотреть график за полтора года
|
||
Я ускорил прохождение тестов на 31%, настроил отправку данных в InfluxDB и создал график, потестировал несколько профилировщиков и полезных инструментов для работы с тестами. | ||
|
||
Получилось оптимизировать пока не так много, как хотелось бы, так как test suite большой, но хорошо прошелся по самой медленной example group и есть понимание что оптимизировать в моём проекте и как. Разработал уже неплохой фидбэк луп, с помощью которого в будущем буду двигаться по всем остальным медленным тестам. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
HW7
InfluxDB
Репозиторий TICK недоступен, ошибка 404. Походил немного по репозиториям InfluxDB, самое подходящее было sandbox, думаю это то же самое.
Установил, открылся хронограф и документация. Добавил influxer и все необходимые настройки, пробую запустить rake task с отправкой метрики. Данные пришли.
Первый прогон тестов занял 1760 сек (~29 минуты).
Профилирование
Не получилось подключить
stackprof
, при запуске тестов возникает длинная ошибка, начинается всё с[BUG] Segmentation fault at 0x0000000000000008
и далее огромный лог с бэктрейсами из Ruby, C и т.д. Так и не получилось исправить, поэтому пользуюсь пока толькоruby-prof
Оптимизация №1
Отключил логирование
config.logger = Logger.new(nil)
, тесты стали проходить за 1455 сек.Оптимизация №2
Выпилил
database_cleaner
, включилconfig.use_transactional_fixtures = true
. Тесты прошли за 1308 сек.Оптимизация №3
Далее я воспользовался профилировщиком
rspec --profile
, увидел топ-10 самых медленных экзамплов и групп.Сделал профилирование самой медленной экзампл группы, первая точка роста -
Ethon/Curl::easy_perform^
. По callers понял, что это запросыelasticsearch
.Также по отчету
rspec dissect
понял, чтоbefore
занимает 44 секунды из общих 58.Решил попробовать воспользоваться хелперами
before_all
иlet_it_be
.Возникли небольшие ошибки, пришлось переписать в некоторых экзамплах
let
на обновление записи внутриbefore
, но зато теперь группа тестов проходит в 3 раза быстрее, 19 сек!Оптимизация №4
Далее прошелся по этой же экзамп группе с
FPROF
.Total: 65
и я решил, что некоторые записи тут не нужны и можно как-нибудь исключить их создание.С помощью transient я передал в factory уже созданные до этого связи и тем самым внутри factory получилось избежать создания лишних записей, при этом не сломались тесты по всему проекту. Общее количество factories стало 56, а тесты прошли за 18 сек.
Также в before хуке выполнялось 3
create_list
по 5 записей, что мне показалось излишним и вполне достаточно создавать по 3 записи. Теперь всего создаётся 46 factories, а группа тестов проходит за 15 сек.Также нашел похожую группу тестов и сделал для них общий
shared_context
. В ней количество factories изменилось80 -> 21
, а время выполнения10 сек -> 4 сек
.Итог
Полный набор тестов прошёл за 1220 сек.
Я ускорил прохождение тестов на 31%, настроил отправку данных в InfluxDB и создал график, потестировал несколько профилировщиков и полезных инструментов для работы с тестами.
Получилось оптимизировать пока не так много, как хотелось бы, так как test suite большой, но хорошо прошелся по самой медленной example group и есть понимание что оптимизировать в моём проекте и как. Разработал уже неплохой фидбэк луп, с помощью которого в будущем буду двигаться по всем остальным медленным тестам.