解决常见错误

打开的文件过多 (操作系统错误 24)

每个集合段都需要打开一些文件。有时您可能会在服务器日志中遇到以下错误

Error: Too many files open (OS error 24)

在这种情况下,您可能需要增加打开文件的限制。例如,这可以在您启动 Docker 容器时完成

docker run --ulimit nofile=10000:10000 qdrant/qdrant:latest

上面的命令将软限制和硬限制都设置为 10000

如果您不使用 Docker,以下命令将更改当前用户会话的限制

ulimit -n 10000

请注意,此命令应在运行 Qdrant 服务器之前执行。

无法打开 Collections 元数据 WAL

在将 Qdrant 实例作为分布式部署的一部分启动时,您可能会遇到类似的错误消息

Can't open Collections meta Wal: Os { code: 11, kind: WouldBlock, message: "Resource temporarily unavailable" }

这意味着 Qdrant 无法启动,因为无法加载集合。其相关的 WAL 文件当前不可用,很可能是因为这些文件已被另一个 Qdrant 实例使用。

每个节点必须有自己独立的存储目录、卷或挂载点。

形成的集群将负责与每个节点共享所有数据,并将其全部放置在正确的位置。如果使用 Kubernetes,每个节点必须有自己的卷。如果使用 Docker,每个节点必须有自己的存储挂载点或卷。如果直接使用 Qdrant,每个节点必须有自己的存储目录。

在 Python gRPC 客户端中使用 multiprocessing

当在 Python gRPC 客户端中使用 multiprocessing 时,您可能会遇到类似这样的错误

<_InactiveRpcError of RPC that terminated with:
	status = StatusCode.UNAVAILABLE
	details = "sendmsg: Socket operation on non-socket (88)"
	debug_error_string = "UNKNOWN:Error received from peer  {grpc_message:"sendmsg: Socket operation on non-socket (88)", grpc_status:14, created_time:"....."}"

发生此错误是因为 multiprocessing 创建了 gRPC 通道的副本,这些通道共享同一个套接字。当父进程关闭通道时,会关闭套接字,子进程则尝试使用已关闭的套接字。

为了防止此错误,您可以使用 multiprocessingforkserverspawn 启动方法。

import multiprocessing

multiprocessing.set_start_method("forkserver")  # or "spawn"    

或者,您可以切换到 REST API、异步客户端,或使用 Python 客户端中内置的并行化功能 - 例如 qdrant.upload_points(...) 函数。

此页面是否有用?

感谢您的反馈!🙏

很抱歉听到您这样说。😔 您可以在 GitHub 上编辑此页面,或创建一个 GitHub 问题。