Open
Conversation
araslanov-e
commented
Feb 9, 2025
- Оптимизировал программу для обработки больших данных потребляя менее 70 Мб
- Добавил тест производительности
- Описал этапы оптимизации
spajic
approved these changes
Feb 16, 2025
| Вот как я построил `feedback_loop`: Создавал файл с N строк, чтобы программа могла выполнятся 10-20 секунд. | ||
|
|
||
| ## Вникаем в детали системы, чтобы найти главные точки роста | ||
| Для того, чтобы найти "точки роста" для оптимизации я воспользовался memory_profiler, в котором смотрел какой код создает больше всего объектов, stackprof для большей детальности. Так же дополнительно был написан скрипт запускающий код в 2 потока, один из которых раз в секунду печатал потребление памяти. |
| ## Feedback-Loop | ||
| Для того, чтобы иметь возможность быстро проверять гипотезы я выстроил эффективный `feedback-loop`, который позволил мне получать обратную связь по эффективности сделанных изменений за за 10-20 секунд. | ||
|
|
||
| Вот как я построил `feedback_loop`: Создавал файл с N строк, чтобы программа могла выполнятся 10-20 секунд. |
|
|
||
| https://github.com/fastruby/fast-ruby?tab=readme-ov-file#date рекомендуют использовать Date.iso8601. | ||
| Потребление памяти не сильно изменилось, осталось 504 MB, `211530 (9.7%) Date.iso8601` | ||
| Попробовал Date.strftime, потребление памяти снизилось до `MEMORY USAGE: 356 MB`, `126921 (6.3%) Date.strptime`, оставил это решение. |
Collaborator
There was a problem hiding this comment.
с датой вообще ничего не надо делать, она сразу в нужном формате
| 296135 ( 40.3%) Object#parse_session | ||
| 46170 ( 6.3%) Object#parse_user | ||
| ``` | ||
| Изучив код, принял решение отказаться от использования в данном месте метода split, а определять принадлежность к сущности user/session по началу строки. |
Collaborator
There was a problem hiding this comment.
по первой букве кстати даже можно
| puts "Используемая память: #{memory_usage/1024} MB" | ||
|
|
||
| if memory_usage > memory_limit | ||
| puts "Превышен лимит памяти! Завершаем процесс..." |
| puts "MEMORY USAGE: %d MB" % (`ps -o rss= -p #{Process.pid}`.to_i / 1024) | ||
| memory = (`ps -o rss= -p #{Process.pid}`.to_i / 1024) | ||
| puts "MEMORY USAGE: #{memory} MB" | ||
| memory |
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.