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

时间:2011-11-09 18:03:13

标签: python memory-management debian 32bit-64bit psycopg2

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

我正在运行Debian 6,32bit以使用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:

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

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

我几乎阅读了所有类似的bug / issue / blogpost,但只能找到一个相信不完全相同但却相似的问题: 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上,所以我认为没有任何硬件问题。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

检查uWSGI配置中是否有--limit-as选项。在64位系统上,地址空间可以是两倍大。 512或1024应该完成这项工作,所以必要时提高它。