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

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

我正在运行Debian 6,32位主机我的应用程序与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行,这似乎是最后一个exception处理程序,它包含了一切非常特殊的东西。 我把它换成了:

 except Exception, why: 

并将“为什么”写入文本文件。 唯一的例外是:

 Error loading psycopg2 module: libgcrypt.so.11: failed to map segment from shared object: Cannot allocate memory 

我读了几乎所有类似的bug / issue / blogpost,只能find一个不完全相同的问题,但十分相似的问题: 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。 除了使用Django默认的./manage.py syncdb外,PostgreSQL没有其他的模型。 有一半以上的内存是空的。

而且…我也尝试在生产上运行./manage.py runserver,这很好地工作。 VPS在Linode,所以我不认为有任何硬件问题。

任何帮助将不胜感激。

[编辑]好吧,过了几个星期的问题依然存在。 如果是硬件问题,我已经将服务器移到了另一台机器上。我也将psycopg2升级到版本2.4.4。 错误消息已被更改为

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

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

这可能不是关于Python,Django,PostgreSQL,psycopg2和libsomething.so。

检查你是否有像-limit这样的选项,就像在你的uWSGIconfiguration中一样。 在64位系统上,地址空间可以是两倍大。