LINUX.ORG.RU

100% процессора в маллоке, Или как убить кучу при написании модуля Apache


0

0

Здраствуйте! Система -- Linux ASP. GCC.

Обьект -- модуль для Apache, который я написал. Модуль получает информацию и обрабатывает её, как и все модулии, выдавай результат. Как отдельная программа он работает, но как модуль, на непонянтном моменте виснет, а вернее кушает 60%-99% чайл httpd.

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2180 apache 21 0 23492 7568 15m R 63.3 5.0 29:40.41 httpd

И не могу понять почему. Все new имеют свои delete. Нигде не удалял два раза переменную, всё что выделяется потом освобождается.

запускаю GDB. И вот что вижу:

===================================================== (gdb)attach 2180 .... 0xf6cd3031 in _int_malloc () from /lib/tls/libc.so.6 (gdb) bt #0 0xf6cd3031 in _int_malloc () from /lib/tls/libc.so.6 #1 0xf6cd239d in malloc () from /lib/tls/libc.so.6 #2 0xf6cf4638 in opendir () from /lib/tls/libc.so.6 #3 0xf6e2ea6f in apr_dir_open (new=0xfeec832c, dirname=0xf8a19cd0 "/home/evgen/server/www/", pool=0xf8a1ed40) at dir.c:87 #4 0xf69cbe65 in ?? () from /etc/httpd/modules/mod_negotiation.so #5 0xfeec832c in ?? () #6 0xf8a19cd0 in ?? () #7 0xf8a1ed40 in ?? () #8 0xf7000cd0 in ?? () from /usr/sbin/httpd #9 0x00000000 in ?? () (gdb) frame 1 #1 0xf6cd239d in malloc () from /lib/tls/libc.so.6 (gdb) up 1 #2 0xf6cf4638 in opendir () from /lib/tls/libc.so.6 (gdb) up 1 #3 0xf6e2ea6f in apr_dir_open (new=0xfeec832c, dirname=0xf8a19cd0 "/home/evgen/server/www/", pool=0xf8a1ed40) at dir.c:87 87 (*new)->dirstruct = opendir(dirname); (gdb) up 1 #4 0xf69cbe65 in ?? () from /etc/httpd/modules/mod_negotiation.so (gdb) up 1 #5 0xfeec832c in ?? () (gdb) up 1 #6 0xf8a19cd0 in ?? () (gdb) up 1 #7 0xf8a1ed40 in ?? () (gdb) up 1 #8 0xf7000cd0 in ?? () from /usr/sbin/httpd (gdb) up 1 #9 0x00000000 in ?? () (gdb) info line *0x63ff No line number information available for address 0x63ff ===========================================================

тоесь висит на _int_malloc (). Вызывается модулем mod_negotiation.so. Всё. Больше я что-либо сделать бессилен. Нуждаюсь в ваших советах.

anonymous

Вариантов вагон, но таки скорее всего ты где-то выскачил за границу массива или сделал еще чего. Заодно попробуй поиграться с _MALLOC_CHECK=1 или 2 и апачем в однозадапросном дебаговском режиме, и всякими valgrind и electric fence.

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