2015-04-30 2 views
0

Я пытаюсь настроить ReviewBoard, и у меня возникает проблема, когда mod_wsgi, похоже, сбой. Я получаю сообщение об ошибке, как это:Apache mod_wsgi crashing

AH00052: child pid 44359 exit signal Segmentation fault (11) 

Я пытался отладки с помощью GDB, как указано здесь: https://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Debugging_Crashes_With_GDB. Мне не повезло. Когда я придаю GDB и нажмите URL, что происходит сбой, только информацию я получаю это:

Program received signal SIGSEGV, Segmentation fault. 
[Switching to Thread 0x7f170ab51700 (LWP 45017)] 
0x00007f17159f957f in __strlen_sse42() from /lib64/libc.so.6 
Missing separate debuginfos, use: debuginfo-install expat-2.0.1-11.el6_2.x86_64 keyutils-libs-1.4-5.el6.x86_64 krb5-libs-1.10.3-37.el6_6.x86_64 libcom_err-1.42.8-1.0.2.el6.x86_64 libffi-3.0.5-3.2.el6.x86_64 libgcc-4.4.7-11.el6.x86_64 libselinux-2.0.94-5.8.el6.x86_64 libstdc++-4.4.7-11.el6.x86_64 libuuid-2.17.2-12.18.0.1.el6.x86_64 openssl-1.0.1e-30.el6_6.8.x86_64 zlib-1.2.3-29.el6.x86_64 
(gdb) 

Я бегу Apache 2.4.12, 4.4.11 и mod_wsgi Python 2.6.6 на Oracle Enterprise Linux 6. Я довольно застрял здесь, потому что это больше, чем я должен был делать раньше.

EDIT: Получается немного больше информации:

Thread 2 (Thread 0x7fc77b65a700 (LWP 46498)): 
#0 __strlen_sse42() at ../sysdeps/x86_64/multiarch/strlen-sse4.S:32 
No locals. 
#1 0x00007fc78302ce4b in PyString_FromString (str=0x0) at Objects/stringobject.c:116 
     size = <value optimized out> 
     op = <value optimized out> 
#2 0x00007fc783090811 in PyModule_AddStringConstant (m=<module at remote 0x7fc7759b56a8>, name=0x7fc76af55ec5 "XML_ERROR_UNDECLARING_PREFIX", value=<value optimized out>) at Python/modsupport.c:636 
     o = <value optimized out> 
#3 0x00007fc76af5508d in initpyexpat() at /usr/src/debug/Python-2.6.6/Modules/pyexpat.c:2041 
     m = <module at remote 0x7fc7759a6fd8> 
     d = <value optimized out> 
     errmod_name = <value optimized out> 
     errors_module = <module at remote 0x7fc7759b56a8> 
     modelmod_name = <value optimized out> 
     model_module = <module at remote 0x7fc7759b5718> 
     sys_modules = <value optimized out> 
     capi = {magic = 0x0, size = 0, MAJOR_VERSION = 0, MINOR_VERSION = 0, MICRO_VERSION = 0, ErrorString = 0, GetErrorCode = 0, GetErrorColumnNumber = 0, GetErrorLineNumber = 0, Parse = 0, ParserCreate_MM = 0, ParserFree = 0, 
      SetCharacterDataHandler = 0, SetCommentHandler = 0, SetDefaultHandlerExpand = 0, SetElementHandler = 0, SetNamespaceDeclHandler = 0, SetProcessingInstructionHandler = 0, SetUnknownEncodingHandler = 0, SetUserData = 0} 
     capi_object = <value optimized out> 
#4 0x00007fc78308d865 in _PyImport_LoadDynamicModule (name=0x7fc77b631500 "pyexpat", pathname=0x7fc77b630430 "/usr/lib64/python2.6/lib-dynload/pyexpat.so", fp=<value optimized out>) at Python/importdl.c:53 
     m = <value optimized out> 
     lastdot = <value optimized out> 
     shortname = <value optimized out> 
     packagecontext = 0x0 
     oldcontext = 0x0 
     p = 0x7fc76af54ad0 <initpyexpat> 
#5 0x00007fc78308b8a5 in import_submodule (mod=None, subname=0x7fc77b631500 "pyexpat", fullname=0x7fc77b631500 "pyexpat") at Python/import.c:2592 
     buf = "/usr/lib64/python2.6/lib-dynload/pyexpat.so\000\000e.so\000-py2.6.egg/pyexpat.pyc\000e.so\000yc\000e.so\000y2.6.egg/pyexpat.pyc\000e.so\000.so\000\307\177\000\000om\376\202\307\177\000\000\020\005c{\307\177\000\000\020R1\203\307\177\000\000\001\000\000\000\000\000\000\000\251\262\r\203\307\177\000\000\251\262\r\203\307\177\000\000+x\376\202\307\177\000\000\220\026%\002\000\000\000\000\020R1\203\307\177\000\000\030\000\000\000\060\000\000\000\340\005c{\307\177\000\000$\000\000\000\307\177\000\000\t\000\000\000\000\000\000\000"... 
     fp = 0x7fc775a970e0 
     path = <value optimized out> 
     loader = 0x0 
     fdp = <value optimized out> 
     modules = 
    {'reviewboard.diffviewer.django': None, 'django.utils.deprecation': <module at remote 0x7fc774dddb08>, 'reviewboard.diffviewer.parser': <module at remote 0x7fc775496520>, 'pygments.filters': <module at remote 0x7fc775b5c050>, 'haystack.signals': <module at remote 0x7fc774f69948>, 'django.dispatch.threading': None, 'docutils.utils.warnings': None, 'pprint': <module at remote 0x7fc774600408>, 'django.middleware.gzip': <module at remote 0x7fc774ba8ad0>, 'django.dispatch.weakref': None, 'paramiko.proxy': <module at remote 0x7fc7756aa520>, 'django.utils.log': <module at remote 0x7fc774b2a750>, 'paramiko.select': None, 'reviewboard.admin.haystack': None, 'SocketServer': <module at remote 0x7fc774b9dcc8>, 'django.contrib.admin.decimal': None, 'xml.etree.sys': None, 'django.test.contextlib': None, 'shlex': <module at remote 0x7fc775550d00>, 'django.utils.http': <module at remote 0x7fc774a31948>, 'djblets.util.datetime': None, 'django.conf.urls.django': None, 'json.sre_constants': None, 'django.core.serializers': <mod...(truncated) 
     m = <value optimized out> 
#6 0x00007fc78308bb24 in load_next (mod=None, altmod=None, p_name=<value optimized out>, buf=0x7fc77b631500 "pyexpat", p_buflen=0x7fc77b6314f8) at Python/import.c:2412 
     name = 0x7fc775a52b64 "pyexpat" 
     dot = <value optimized out> 
     len = 7 
     p = 0x7fc77b631500 "pyexpat" 
     result = <value optimized out> 
#7 0x00007fc78308c17d in import_module_level (name=0x0, globals=<value optimized out>, locals=<value optimized out>, fromlist=['__doc__'], level=<value optimized out>) at Python/import.c:2133 
     buf = "pyexpat\000\004\000\000\000\000\000\000\000\340\315\301u\307\177\000\000\260\367\277u\307\177\000\000\017\000\000\000\000\000\000\000p\352\230u\307\177\000\000\260\001{\207\307\177\000\000\345,\001\203\307\177\000\000p#c{\307\177\000\000t\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\250\351\b\203\307\177\000\000ponent(\001\000\000\000t\t\000\000\000universali\002\000\000\000i\005\000\000\000(\001\000\000\000t\n\000\000\000__import__t\006\000\000\000Writerc\000\000\000\000\000\000\000\000\001\000\000\000B\000\000\000s_\000\000\000e\000\000Z\001\000d\000\000Z\002\000d\001\000Z\003\000d\002\000Z\004\000d\003\000\204\000\000Z\005\000d\b\000Z\a\000"... 

Это, кажется, связано с pyexpat, и я читал об этих вопросов здесь: https://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary. Тем не менее, я запускаю Python 2.6.6, и там говорится, что эти проблемы применимы только к версиям Python до 2.5.

+0

ли вы пытаетесь делать то, что он говорит в отладочный вывод? –

+0

Я думал, что это всего лишь предупреждение о некоторых библиотеках. Я предполагаю, что это на самом деле просит меня установить некоторые вещи, а? Я не использовал gdb, вероятно, 10 лет, поэтому я неуклюже пытаюсь понять это снова. – cloudwalker

+0

Хорошо, поэтому после установки этих я до сих пор не получаю много. Теперь я получаю следующее: Запрограммированный сигнал SIGSEGV, Ошибка сегментации. [Переключение в теме 0x7f4881ebb700 (LWP 45991)] __strlen_sse42() в ../sysdeps/x86_64/multiarch/strlen-sse4.S:32 \t \t pcmpeqb (% RDI),% XMM1 – cloudwalker

ответ

1

Вы уже сами определили ответ. Это та же проблема, что и у меня.

  • Использование Oracle Enterprise Linux 6, который имеет /lib64/libexpat.so.1.5.2
  • Использование Oracle 12c HTTP Server (в основном ребрендинг Apache), который имеет <install path>/ohs/lib/libexpat.so.0.5.0

Как и вы, я сделал трассировку в Apache HTTPD CoreDump , Apache разбился на __strlen_ss43 при вызове initpyexpat, как часть загрузки модуля Python pyexpat, который загружался, потому что ReviewBoard нуждался в нем.

Как вы связывали, it's a known issue caused by the Python pyexpat module being compiled for one version of libexpat, but an incompatible version is loaded.

В моей системе модуль pyexpat (установлен как зависимость от ReviewBoard) скомпилирован и связан с /lib64/libexpat.so.1.5.2 системы. Однако Apache настроен на загрузку libexpat.so.0.5.0.

Связанная статье говорят о том, что проблема решена в Python 2.6, но не в Python 2.6 в OEL 6:

$ ldd /usr/lib64/python2.6/lib-dynload/pyexpat.so 
    linux-vdso.so.1 => (0x00007fff0c7de000) 
    libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f0f27dc0000) 
    ... 

pyexpat модуля здесь не имя, начинающаяся как связана статья говорит, это просто используя общесистемный libexpat, поэтому все будет сделано.

Я обнаружил, что ничего не использую в настройке Apache, которая требует libexpat, за исключением ReviewBoard. Так что я оправдан в удалении/замене libexpat.so ссылки в Apache каталог установки с той, что pyexpat был составлен для:

# cd <install path>/ohs/lib 
# mkdir disabled 
# mv libexpat* disabled 
# ln -s /lib64/libexpat.so.1 libexpat.so.0 
Смежные вопросы