Я получаю ошибку Segmentation fault при попытке доступа к приложению пирамиды Hello World. Эта ошибка возникает только при работе с установкой CentOS 5.7, но не возникает никаких проблем при тестировании с OSX и Arch Linux. Может быть, это проблема CentOS?
[error] [client 10.211.55.2] Premature end of script headers: pyramid.wsgi
[notice] child pid 31212 exit signal Segmentation fault (11)
Я пытался следовать руководствам по устранению неполадок, размещенным здесь http://code.google.com/p/modwsgi/wiki/InstallationIssues что предполагает, что это могло быть вызвано отсутствием общей библиотеки. Быстрая проверка показывает, что проблема не в общей библиотеке.
[centos57@localhost modules]$ ldd mod_wsgi.so
linux-gate.so.1 => (0x00e6a000)
libpython2.7.so.1.0 => /home/python/lib/libpython2.7.so.1.0 (0x0024c000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00da8000)
libdl.so.2 => /lib/libdl.so.2 (0x00cd6000)
libutil.so.1 => /lib/libutil.so.1 (0x00110000)
libm.so.6 => /lib/libm.so.6 (0x0085c000)
libc.so.6 => /lib/libc.so.6 (0x00682000)
/lib/ld-linux.so.2 (0x0012b000)
Затем я нашел еще одну подсказку, которая могла бы решить мою проблему. К сожалению, libexpat не является источником проблемы. http://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary
[centos57@localhost bin]$ ldd ~/httpd/bin/httpd | grep expat
libexpat.so.1 => /usr/local/lib/libexpat.so.1 (0x00b00000)
[centos57@localhost bin]$ strings /usr/local/lib/libexpat.so.1 | grep expat
libexpat.so.1
expat_2.0.1
[centos57@localhost bin]$ python
Python 2.7.2 (default, Nov 26 2011, 08:08:44)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyexpat
>>> pyexpat.version_info
(2, 0, 0)
>>>
Я выдергивал волосы, пытаясь понять, чего мне не хватает в моей настройке. Почему проблема возникает только с CentOS?
Вот подробная настройка:
Apache 2.2.19
Python 2.7.2
mod_wsgi-3.3
/home/httpd/conf/extra/pyramid.wsgi
from pyramid.paster import get_app
application = get_app('/home/homecamera/hcadmin/root/production.ini', 'main')
/home/httpd/conf/extra/modwsgi.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /myapp /home/root/test.wsgi
<Directory /home/root>
WSGIProcessGroup pyramid
Order allow,deny
Allow from all
</Directory>
# Use only 1 Python sub-interpreter. Multiple sub-interpreters
# play badly with C extensions.
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
WSGIDaemonProcess pyramid user=daemon group=daemon processes=1 \
threads=4 \
python-path=/home/python/lib/python2.7/site-packages
WSGIScriptAlias /hello /home/httpd/conf/extra/pyramid.wsgi
<Directory /home/httpd/conf/extra>
WSGIProcessGroup pyramid
Order allow,deny
Allow from all
</Directory>
Опять же, такая же установка работает в OSX и Arch Linux, но не в CentOS 5.7. Может ли кто-нибудь указать мне правильное направление, прежде чем у меня кончатся волосы.
================================================== ==================================
Когда apache запускался с gdb, я получил пару предупреждений
Reading symbols from /home/httpd/bin/httpd...done.
Attaching to program: /home/httpd/bin/httpd, process 1821
warning: .dynamic section for "/lib/libcrypt.so.1" is not at the expected address
warning: difference appears to be caused by prelink, adjusting expectations
warning: .dynamic section for "/lib/libutil.so.1" is not at the expected address
warning: difference appears to be caused by prelink, adjusting expectations
вывод gdb. После нажатия кнопки обновления, чтобы загрузить пирамиду.
(gdb) cont
Continuing.
warning: .dynamic section for "/usr/lib/libgssapi_krb5.so.2" is not at the expected address
warning: difference appears to be caused by prelink, adjusting expectations
warning: .dynamic section for "/usr/lib/libkrb5.so.3" is not at the expected address
warning: difference appears to be caused by prelink, adjusting expectations
warning: .dynamic section for "/lib/libresolv.so.2" is not at the expected address
warning: difference appears to be caused by prelink, adjusting expectations
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x8edbb90 (LWP 1824)]
0x0814c120 in EVP_PKEY_CTX_dup ()
apache_error_log
[info] mod_wsgi (pid=1821): Starting process 'pyramid' with threads=1.
[info] mod_wsgi (pid=1821): Initializing Python.
[info] mod_wsgi (pid=1821): Attach interpreter ''.
[info] mod_wsgi (pid=1821): Create interpreter 'web.domain.com:20000|/hcadmin'.
[info] [client 10.211.55.2] mod_wsgi (pid=1821, process='pyramid', application='web.domain.com:20000|/hcadmin'): Loading WSGI script '/home/httpd/conf/extra/pyramid.wsgi'.
[error] hello 1
Поскольку вы используете режим демона, присоедините gdb к процессу демона и запустите запрос и посмотрите, какую трассировку стека вы получите от gdb.
http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Debugging_Crashes_With_GDB