Open
Conversation
spajic
approved these changes
Aug 24, 2022
|
|
||
| ## Профилирование | ||
|
|
||
| *Не получилось подключить `stackprof`, при запуске тестов возникает длинная ошибка, начинается всё с `[BUG] Segmentation fault at 0x0000000000000008` и далее огромный лог с бэктрейсами из Ruby, C и т.д. Так и не получилось исправить, поэтому пользуюсь пока только `ruby-prof`* |
Collaborator
There was a problem hiding this comment.
Я недавно тоже пытался воспользоваться stackprof, столкнулся с такой же проблемой и тоже пришлось свичнуться на ruby-prof
|
|
||
| **Полный набор тестов прошёл за 1220 сек.** | ||
|
|
||
| Я ускорил прохождение тестов на 31%, настроил отправку данных в InfluxDB и создал график, потестировал несколько профилировщиков и полезных инструментов для работы с тестами. |
Collaborator
There was a problem hiding this comment.
У нас кстати в 3commas давно сделана сборка времени прогона спеков в CI по такой схеме
Было занятно посмотреть график за полтора года
|
|
||
| Я ускорил прохождение тестов на 31%, настроил отправку данных в InfluxDB и создал график, потестировал несколько профилировщиков и полезных инструментов для работы с тестами. | ||
|
|
||
| Получилось оптимизировать пока не так много, как хотелось бы, так как test suite большой, но хорошо прошелся по самой медленной example group и есть понимание что оптимизировать в моём проекте и как. Разработал уже неплохой фидбэк луп, с помощью которого в будущем буду двигаться по всем остальным медленным тестам. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 и есть понимание что оптимизировать в моём проекте и как. Разработал уже неплохой фидбэк луп, с помощью которого в будущем буду двигаться по всем остальным медленным тестам.