Вальгринд работает медленно - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь выяснить, где утечка.Я решил использовать Valgrind.Но с его использованием производительность приложения упала почти в пять раз.Могу ли я ускорить работу приложения с помощью Valgrind?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Если вы ищете альтернативный инструмент, который вообще не замедляет процесс, но имеет ограничения, которые не дадут вам никаких следов стека, он должен быть запущен в Linux и поддерживает только libc malloc (каквместо jemalloc или tcmalloc или аналогичного) попробуйте бесплатное программное обеспечение с открытым исходным кодом https://github.com/vmware/chap

То, как вы его используете, примерно захватывает живое ядро ​​(используя gcore, или генерирует из gdb или чего-то подобного)Ваш необученный процесс после того, как процесс показал нежелательный рост памяти, затем из командной строки:

chap core-file-name

Из командной строки введите: счетчик утечек скажет вам, сколько существует утечек, список утечек перечислит утечек выделенных ресурсов, show leaked даст вам шестнадцатеричные дампы утечек выделенных ресурсов, описать утечку попытается описать утечку распределений или обобщить утечку даст вам сводку распределений по типу в той степени, в которойэтот парень может выяснить типы.

...

Если это случится так, что количество утечек говорит, что нет утечек или недостаточно для объяснения вашего процессарост, это означает, что вместо того, чтобы пропущенные объекты были фактически недоступны из стека или регистров или статической памяти (грубо говоря, определение утечки), они, вероятно, находятся в каком-то контейнере или контейнерах, таких как набор, карта или очередь.В этом случае глава также может помочь, потому что она дает вам возможность пройти по графику распределений, где узлы в таком графике сами являются распределениями, и если распределение A ссылается на распределение B, существуют ребра в обоих направлениях между A и B.Используя этот факт, вы, как правило, можете перемещать график из распределения, которое, по вашему мнению, больше не нужно, в контейнер, в котором он содержится.Учитывая, что вы используете C ++, очень полезная команда chap для начала в таком случае - суммировать выделено .

В качестве отказа от ответственности я написал большую часть этого инструмента и определенно продвигаюэто здесь, но OTOH это с открытым исходным кодом и ничего не стоит.Документация все еще находится в стадии разработки, но вы также можете получить помощь из командной строки инструмента.Кроме того, если вы задаете вопросы (либо относительно этого ответа, либо путем поднятия проблемы в репозитории github), я буду рад ответить на них.

0 голосов
/ 12 июня 2018

Инструмент memcheck замедляет работу приложения из-за всей виртуализации за кулисами.Вы можете изучить параметры командной строки , чтобы найти настройки, ускоряющие работу среды.В качестве альтернативы для gcc / clang, скомпилируйте и свяжите с -fsanitize=address.Это может обнаружить вашу утечку с меньшими ограничениями производительности.

...