Django OperationalError:无法创建新的连接进程

Posted

技术标签:

【中文标题】Django OperationalError:无法创建新的连接进程【英文标题】:Django OperationalError: could not fork new process for connection 【发布时间】:2012-12-10 10:48:32 【问题描述】:

今天早上我开始在生产环境中遇到这个错误,在昨天让 Django-storages、Boto 和 Django-compressor 工作以将静态文件放在 S3 上之后,虽然我不知道这是否相关.. .

OperationalError: could not fork new process for connection: Cannot allocate memory

could not fork new process for connection: Cannot allocate memory
could not fork new process for connection: Cannot allocate memory


Stacktrace (most recent call last):

  File "django/core/handlers/base.py", line 89, in get_response
    response = middleware_method(request)
  File "reversion/middleware.py", line 17, in process_request
    if hasattr(request, "user") and request.user.is_authenticated():
  File "django/utils/functional.py", line 184, in inner
    self._setup()
  File "django/utils/functional.py", line 248, in _setup
    self._wrapped = self._setupfunc()
  File "django/contrib/auth/middleware.py", line 16, in <lambda>
    request.user = SimpleLazyObject(lambda: get_user(request))
  File "django/contrib/auth/middleware.py", line 8, in get_user
    request._cached_user = auth.get_user(request)
  File "django/contrib/auth/__init__.py", line 98, in get_user
    user_id = request.session[SESSION_KEY]
  File "django/contrib/sessions/backends/base.py", line 39, in __getitem__
    return self._session[key]
  File "django/contrib/sessions/backends/base.py", line 165, in _get_session
    self._session_cache = self.load()
  File "django/contrib/sessions/backends/db.py", line 19, in load
    expire_date__gt=timezone.now()
  File "django/db/models/manager.py", line 131, in get
    return self.get_query_set().get(*args, **kwargs)
  File "django/db/models/query.py", line 361, in get
    num = len(clone)
  File "django/db/models/query.py", line 85, in __len__
    self._result_cache = list(self.iterator())
  File "django/db/models/query.py", line 291, in iterator
    for row in compiler.results_iter():
  File "django/db/models/sql/compiler.py", line 763, in results_iter
    for rows in self.execute_sql(MULTI):
  File "django/db/models/sql/compiler.py", line 817, in execute_sql
    cursor = self.connection.cursor()
  File "django/db/backends/__init__.py", line 308, in cursor
    cursor = util.CursorWrapper(self._cursor(), self)
  File "django/db/backends/postgresql_psycopg2/base.py", line 177, in _cursor
    self.connection = Database.connect(**conn_params)
  File "psycopg2/__init__.py", line 178, in connect
    return _connect(dsn, connection_factory=connection_factory, async=async)

我正在 Heroku 上部署网站。我重新启动应用程序后它会工作一段时间,但几分钟后会再次停止工作。

关于可能导致此问题的任何想法?

【问题讨论】:

您有数据库连接问题 (obl)。谷歌给我这个链接postgresql.org/message-id/opsbfuzdnnuo8gh7@developer3所以如果你联系 Heroku 技术支持会更好。 @b1 啊,谢谢,我前段时间不知怎么解决了,但忘了更新答案,不记得我是怎么解决的了! 【参考方案1】:

我在尝试使用 heroku 上的 postgresql 数据库设置一个简单的 django Web 应用程序时遇到了同样的问题,并设法解决了它。

我不完全理解这个错误,但修复相当简单:当您将查询创建的 python 列表传递给您的数据库时,您需要限制列表的大小

例如,如果您将以下列表作为上下文传递:

set_list = userSetTable.objects.all()

return render(request, 'fc/user.html', 'set_list': set_list,)

这将导致错误,因为 set_list 可能非常大。您需要指定最大尺寸:

set_list = userSetTable.objects.all()[0:20]

因此,在实际应用程序中,您可能希望将列表显示为页面结果或其他...您明白了。

【讨论】:

以上是关于Django OperationalError:无法创建新的连接进程的主要内容,如果未能解决你的问题,请参考以下文章

django.db.utils.OperationalError: (1046, '未选择数据库')

OperationalError:没有这样的表:django_content_type 和 django_session

django.db.utils.OperationalError:(1052,“字段列表中的列'名称'不明确”)

django:sqlite3.OperationalError:没有这样的表

django.db.utils.OperationalError:(1426,“精度太大 1000

关于Django创建模型时,django.db.utils.OperationalError错误