Debian 6, 64 位上 psycopg2 和 libgcrypt.so 出现“无法分配内存”错误

Debian 6, 64 位上 psycopg2 和 libgcrypt.so 出现“无法分配内存”错误

我遇到了与 Python psycopg2 postgresql 驱动程序和 libgcrypt 模块相关的奇怪的生产特定错误。

我运行的是 32 位 Debian 6,用 uWSGI 和 Nginx 托管我的应用程序。我决定切换到全新安装的 64 位。一切似乎都很好,除了我在 uwsgi.log 中为每个请求获取以下 Python 回溯:

  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...

因此,我转到 django/core/handlers/base.py(Django 版本 1.3.1)第 166 行,这似乎是最后一个异常处理程序,它保存了所有真正异常的情况。我将其替换为:

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

我确实尝试过:

  • Django==1.3.1
  • Django==1.3
  • psycopg2==2.4.2
  • psycopg2==2.4.1

也重新启动了,但没有结果。我在系统上安装了 postgresql-8.4、libgcrypt11 和 libgcrypt11-dev。除了新的 ./manage.py syncdb 和 Django 默认模型外,PostgreSQL 没有模型。超过一半的内存都是空的。

而且...我还尝试在生产环境中运行 ./manage.py runserver,运行正常。VPS 在 Linode 上,所以我认为不存在任何硬件问题。

任何帮助将不胜感激。

[编辑]好吧,几周后问题仍然存在。我已将服务器移至另一台机器,以防万一是硬件问题。我还将 psycopg2 升​​级到版本 2.4.4。错误消息已更改为

加载 psycopg2 模块时出错:libgnutls.so.26:无法从共享对象映射段:无法分配内存

libgnutls-dev 已安装。不知道该怎么办,根本无法使用 postgresql。

答案1

它可能与 Python、Django、PostgreSQL、psycopg2 或 libsomething.so 无关。

检查您是否有类似的选项--limit-as在你的 uWSGI 配置中。在 64 位系统上,地址空间可以是两倍大。

相关内容