TGViewer
Дратути Антон Дратути Антон @blog_toxa · 4.33K subscribers
Post #391 3.06K
Профилируем память

В одном из прошлых постов писал, что в питончике можно профилировать память через memray. Действительно, хорошая тулза, умеет разбивать приложеньку на потоки, следить за форками, и даже работать с аллокациями на уровне С/С++. С последним не так классно справляется, сложно отследить аллокации глубоко в библиотеках.

Это является проблемой, если у вас течёт крыша 🏥 память не в куче, а какая-нибудь резидентная. Т.е. вы профилируете питонячие стек и кучу, а у вас всё там хорошо, при этом почему-то от вашего приложения всё поступают просьбы в ОС, что нужно больше памяти. Одна из причин — это то, что ваш питонячий код может использовать пакет, который является биндингом для плюсовой либы. И тут проблемки, потому что эта либа уже не живёт в модели памяти Python 🤓.

Что делать? Существуют множество техник. Одна из них — использовать jemalloc и подставить его через LD_PRELOAD.

И тут нужно знать две важные штуки о том, как запускаются приложения:
— На самом старте оно подгружает различные системные и собственные библиотеки;
— В вашем приложении сотни функций. Определение (читайте код) этих функций берётся по первому найденному символу (названию) среди подгружаемых библиотек;

Так вот, LD_PRELOAD — это способ загрузить кастомные либы до стандартных 🌿. Благодаря этому можно подменять любые функции, например, выделение и освобождение памяти.

Почему именно jemalloc? Потому что он имеет встроенные инструменты профилировки. Т.е. вам нужно запустить вашу приложеньку, просто переопределив переменную окружения (при условии, что у вас установлен jemalloc). Потом можно построить различные визуализации и техрепорты с теми статистиками, которые вам нужны. Можно регулировать частоту семплинга и всё такое. Вот тут можно почитать подробнее.

А мораль? Её нет. Профилировать резидентную память — это искать иголку в стоге сена: реально, но очень сложно.

А как бы вы профилировали? Поставьте 🤯, если было полезно!
  • 🤯 28
  • 🔥 6
  • 👎 2
  • ❤‍🔥 1
  • 🤔 1
  • 🏆 1
  • 🍾 1
More from @blog_toxa
  1. Sep 19, 2026Post #580
  2. Sep 19, 2026Думал, хоть сегодня перестану следить за лимитами, а оно меня и здесь настигло 💀 Сегодня…
  3. Sep 18, 20264 года В рабочей суете совсем забыл, что недавно стукнуло 4 года, как я в Яндексе. А вспом…
  4. Sep 5, 2026photo post
  5. Sep 3, 2026MM Harness [1/x] Уже немало времени посвятил изучению мультимодальных харнесов. Если раньш…
  6. Aug 30, 2026Post #575
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →