В Linux, как я могу отследить утечку памяти в готовом программном обеспечении? - PullRequest
0 голосов
/ 21 июня 2010

У меня новый Ubuntu Linux Server 64bit 10.04 LTS.

По умолчанию при установке Mysql с включенной репликацией происходит утечка памяти. Тем не менее, мы попытались вернуться к более ранней версии, и память все еще течет, но я не могу сказать, где.

Какие инструменты / методы я могу использовать, чтобы точно определить, где происходит утечка памяти, чтобы я мог устранить проблему?

Ответы [ 4 ]

3 голосов
/ 21 июня 2010

Valgrind, http://valgrind.org/, может быть очень полезен в этих ситуациях.Он работает на неизмененных исполняемых файлах, но очень помогает, если вы можете установить символы отладки.Обязательно используйте флаг --show-reachable = yes, поскольку утечка памяти все еще может быть достигнута каким-то образом, но только не так, как вы этого хотите.Также --trace-children в случае вилки.Скорее всего, вам придется отследить в скрипте запуска, где вызывается исполняемый файл, а затем добавить что-то вроде следующего:

 valgrind --show-reachable=yes --trace-children=yes --log-file=/path/to/log SQL-cmdline sqlargs

Страница man содержит множество других потенциально полезных опций.

Вы пробовали список рассылки MySQL?Что-то вроде этого, безусловно, будет им интересно, если вы сможете воспроизвести это простым способом.

2 голосов
/ 21 июня 2010

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

Обычно у вас может не быть ресурсов, и вам приходится прибегать к его отслеживанию с помощью стеков вызовов и итеративного тестирования, но у вас есть исходный код для MySQL (включая исходный код для точной установки пакета по умолчанию), поэтому вы можете использовать более сложные такие инструменты, как MemoryScape (или хотя бы сборка с символами, чтобы предоставить Valgrind больше пищи для размышлений).

1 голос
/ 21 июня 2010

Попробуйте использовать valgrind.

0 голосов
/ 21 июня 2010

Очень хороший и мощный инструмент, который установлен / доступен для большинства дистрибутивов: Valgrind .

Он имеет множество различных опций и довольно много (насколько я понимаю)я видел) профилировщик по умолчанию в системах Linux.

...