LINUX.ORG.RU

freetds, memory leak


0

1

Использую freetds для заливки данных. Столкнулся с такой проблемой, что постепенно растет количество потребляемой памяти. valgrind на предмет утечек ничего не показал. Когда я комментирую вызовы freetds api программа работает, память стоит на одном числе.

Вызовы freetds идут так: 1) bcp_init 2) bcp_bind для каждого столбца 3) bcp_sendrow для каждой строки 4) bcp_done.

У тебя просто фрагментируется память. Добавь после bcp_done такой код, и покажи что он напечатает.

struct mallinfo mi;

mi = mallinfo();
fprintf(stderr, "arena=%d, ordblks=%d, smblks=%d, hblks=%d, hblkhd=%d, usmblks=%d, fsmblks=%d, uordblks=%d, fordblks=%d, keepcost=%d",
        mi.arena, mi.ordblks, mi.smblks, mi.hblks, mi.hblkhd, mi.usmblks, mi.fsmblks, mi.uordblks, mi.fordblks, mi.keepcost);

p.s. — я предполагаю что это GNU libc

catap ★★★★★ ()
Ответ на: комментарий от catap

Ну он потом так разрастается, что его прибивают потом из-за того что нет больше swap.

placement_new ★★ ()
Ответ на: комментарий от catap

Да я не думаю, что это фрагментация. Возможно, я как то freetds не верно юзаю. Поэтому, если кто ей пользовался, может какие-нибудь секреты есть.

placement_new ★★ ()
Ответ на: комментарий от placement_new

У каждого алгоритма аллокации есть свои особенности. Запросто может быть что ты им пользуешься не так и все плохо. Я хорошо знаю openbsd'шный аллокатор и проблемы применения его в linux. gnu libc и uclibc. freebsd я даже не готов сказать что там. Если jemalloc или аналоги, то можно подумать что это может быть. Но я не знаю что происходит за syscall в freebsd и не всегда смогу корректно помогать.

catap ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.