有时我会从我的 CKAN 服务器收到超时错误。日志文件显示以下错误消息:
TimeoutError: QueuePool 大小为 5 的限制溢出 10。
知道是什么原因造成的以及如何解决吗?
PK
有时我会从我的 CKAN 服务器收到超时错误。日志文件显示以下错误消息:
TimeoutError: QueuePool 大小为 5 的限制溢出 10。
知道是什么原因造成的以及如何解决吗?
PK
我认为的 QueuePool 是指数据库连接限制。您是否没有关闭扩展中的连接或获得大量流量?
这是 CKAN 的 SQLAlchemy 与数据库的连接不足。当 apache 在一些负载下看到多个同时请求时,您会看到它。您可以使用“ab”之类的东西来复制它以提供同时加载。
SQLAlchemy 连接池在同一 CKAN 进程中的线程之间共享,但每个 CKAN 进程都有自己的池。
您可以增加池中的连接数,但请记住 postgres 默认限制为 100 个连接。因此,对于多个进程,您将很快达到限制。或者您可以限制 CKAN 进程的数量。我相信 Ian 几天前注意到了一个不是线程安全的 CKAN 依赖项,所以现在最好只使用进程。
如果使用 Apache,您可以在守护程序模式下运行 mod_wsgi 并指定进程/线程的限制。如果你使用的是 nginx/uwsgi 那么这自然是限制了进程数,这样比较好。
最好的解决方案是使用单独的应用程序来保存连接池。这具有跨 CKAN 线程工作的优势。PGPool 是一个选项,但我们选择了 pgbouncer,我相信它更快,我们对它非常满意。