Назад | Перейти на главную страницу

Ошибка «Невозможно выделить память» для psycopg2 и libgcrypt.so в Debian 6, 64-разрядная версия

У меня странная производственная ошибка, связанная с драйвером 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-битных системах адресное пространство может быть в два раза больше.