Я прошел через устранение неполадок mod_wsgi, но не могу найти ответа на свой случай ошибки сегментации. Я получаю следующий дамп ядра, когда модуль mod_wsgi
интегрирован в мой httpd-сервер Apache. Сервер без mod_wsgi
работает хорошо.
Есть идеи, что вызывает coredump? Есть ли что-то или обходной путь, который я мог бы попробовать?
Дамп ядра:
Program terminated with signal 11, Segmentation fault.
#0 0x00007fe06c39d206 in wsgi_python_init () from /remote/projects1/pdrtke/install/httpd-2.2.22/modules/mod_wsgi.so
#1 0x00007fe06c3aadb5 in wsgi_hook_child_init () from /remote/projects1/pdrtke/install/httpd-2.2.22/modules/mod_wsgi.so
#2 0x00000000004424db in ap_run_child_init ()
#3 0x000000000047ea35 in child_main ()
#4 0x000000000047ef26 in make_child ()
#5 0x000000000047f198 in perform_idle_server_maintenance ()
#6 0x000000000047f67b in ap_mpm_run ()
#7 0x0000000000429361 in main ()
В httpd
бинарный, скомпилированный из исходников. (Я побежал configure --prefix=...
, вот и все)
> file httpd
httpd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped
> ldd httpd
linux-vdso.so.1 => (0x00007fffdc5ff000)
libm.so.6 => /lib64/libm.so.6 (0x00007f33ef7fe000)
libaprutil-1.so.0 => /remote/projects1/pdrtke/install/httpd-2.2.22/lib/libaprutil-1.so.0 (0x00007f33ef5d4000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f33ef3aa000)
libapr-1.so.0 => /remote/projects1/pdrtke/install/httpd-2.2.22/lib/libapr-1.so.0 (0x00007f33ef172000)
librt.so.1 => /lib64/librt.so.1 (0x00007f33eef69000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f33eed2e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f33eeb11000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f33ee90d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f33ee5af000)
/lib64/ld-linux-x86-64.so.2 (0x00007f33efa54000)
Модуль WSGI:
> file mod_wsgi.so
mod_wsgi.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
> ldd mod_wsgi.so
linux-vdso.so.1 => (0x00007fffb8f0e000)
libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00007f4c6dd87000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4c6db69000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4c6d965000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f4c6d762000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4c6d50b000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4c6d1ad000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4c6e37b000)
Исполняемый файл Python:
> file python
python: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped
> ldd python
linux-vdso.so.1 => (0x00007fff6a1ff000)
libpython2.6.so.1.0 => /softntools/opt/Python-2.6/bin/../lib/libpython2.6.so.1.0 (0x00007f14730fc000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1472edf000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f1472cdb000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f1472ad8000)
libm.so.6 => /lib64/libm.so.6 (0x00007f1472882000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1472524000)
/lib64/ld-linux-x86-64.so.2 (0x00007f14733b0000)
Фактически, мы обнаружили проблему, это была проблема зависимости:
mod_wsgi.so
использовал конкретную версию libpython2.6.so.1.0
ldd mod_wsgi.so libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00007f4c6dd87000)
против другого libpython2.6.so.1.0
используется самим двоичным файлом python.
> ldd python
libpython2.6.so.1.0 => /softntools/opt/Python-2.6/bin/../lib/libpython2.6.so.1.0 (0x00007f14730fc000)
Несмотря на то, что это были одинаковые имена файлов, эти файлы не имели одинакового размера
> ls -l /softntools/opt/Python-2.6/bin/../lib/libpython2.6.so.1.0
дал 3710590 байт
> ls -l /usr/lib64/libpython2.6.so.1.0 3:33PM
-rw-r--r-- 1 root root 1594904 May 5 2010 /usr/lib64/libpython2.6.so.1.0
Чтобы решить эту проблему, я перекомпилировал mod_wsgi, изменив переменную LD_RUN_PATH так, чтобы она указывала на /softntools/opt/Python-2.6/lib/
и теперь это работает.
Перестройте все с помощью отладочных символов и получите лучшую трассировку. Очевидно, где-то есть ошибка, но без надлежащего отслеживания событий у вас действительно нет надежды найти ее или даже заставить кого-то еще исправить ее за вас (если вам действительно не повезло, и кто-то, у кого недавно была точно такая же проблема, не произойдет быть доступным для ответа).