У меня странная производственная ошибка, связанная с драйвером Python psycopg2 postgresql и модулем libgcrypt.
Я использовал 32-битный Debian 6 для размещения моего приложения с uWSGI и Nginx. Я решил перейти на 64-битную версию с новой установкой. Все выглядело нормально, за исключением того, что я получаю ниже трассировку Python для каждого запроса в uwsgi.log:
File ".../python2.7/site-packages/django/core/handlers/wsgi.py", line 272, in __call__
response = self.get_response(request)
File ".../python2.7/site-packages/django/core/handlers/base.py", line 169, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File ".../python2.7/site-packages/django/core/handlers/base.py", line 203, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File ".../python2.7/site-packages/django/views/debug.py", line 59, in technical_500_response
html = reporter.get_traceback_html()
and so on...
Итак, я перешел к строке 166 django / core / handlers / base.py (Django версии 1.3.1), которая кажется последним обработчиком исключений, который содержит все действительно исключительные. Я заменил его на:
except Exception, why:
и напишите «почему» в текстовый файл. Исключение как раз то:
Error loading psycopg2 module: libgcrypt.so.11: failed to map segment from shared object: Cannot allocate memory
Я прочитал почти все похожие ошибки / проблемы / сообщения в блоге и смог найти только ту, которая считает не совсем ту же проблему, но очень похожую: http://www.johngirvin.com/archives/dovecot-error-127-after-upgrading-to-debian-squeeze.html
Я пробовал:
также перезагрузился, что не дало результата. У меня в системе установлены postgresql-8.4, libgcrypt11 и libgcrypt11-dev. В PostgreSQL нет модели, кроме свежей ./manage.py syncdb с Django по умолчанию. Там больше половины памяти просто пусто.
И ... Я также попытался запустить ./manage.py runserver на продакшене, который отлично работает. VPS находится на Linode, поэтому я не думаю, что есть проблемы с оборудованием.
Любая помощь будет оценена по достоинству.
[РЕДАКТИРОВАТЬ] Что ж, спустя несколько недель проблема все еще остается. Я переместил сервер на другую машину на случай, если это была проблема с оборудованием. Я также обновил psycopg2 до версии 2.4.4. Сообщение об ошибке было изменено на
Ошибка загрузки модуля psycopg2: libgnutls.so.26: не удалось отобразить сегмент из общего объекта: невозможно выделить память
libgnutls-dev установлен. Не знаю, что делать, вообще не могу использовать postgresql ..
Возможно, речь идет не о Python, Django, PostgreSQL, psycopg2 или libsomething.so.
Проверьте, есть ли у вас вариант вроде --limit-as в вашей конфигурации uWSGI. В 64-битных системах адресное пространство может быть в два раза больше.