我有一个奇怪的生产特定错误与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
我曾尝试过:
也重新启动,没有结果。 我在系统上安装了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位系统上,地址空间可以是两倍大。