You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If we run out of memory mappings, Go throws a fatal error which can't be caught like a regular panic. It crashes the whole node. We need to prevent this from happening and fail more gracefully.
We have some observability on open file descriptors and memory mappings. Note: This doesn't have to come from Weaviate itself if there are other ways to extract this (e.g. from Kuberenets metrics). The important thing is that we see both the limit and current usage on our dashboards for both settings
Any operation that leads to more file descriptors and memory mappings (mainly creating or activating tenants) first checks if we still have enough room for both open file descriptors and memory mappings. If not, the request is denied.
Note: This is non-trivial on a replicated setup because the coordinator node would be the one doing the validation, but other nodes could be out of file descriptors/mappings as well. Maybe a good compromise here would be to just use the coordinator for now to decide for all replicas and in the future we could make sure that every node knows about the capacity of every other node (similar to how we currently do it with free disk space)
If the cluster is already in a state where more tenants are marked active per node than the node can handle, it will eventually crash when lazy shard loading loads all shards in the background. Rather than keep going, lazy shard loading should also abort before it comes to that.
The text was updated successfully, but these errors were encountered:
First PR adds a basis but doesn't completely resolve this issue: #4667
With the PR, you can:
set a memory mapping limit for weaviate. You need to figure of yourself what a good number is. The guardrails work with shard lazy loading => point 3 should be covered
it does NOT take any multi-node into account
it does NOT add observability - I think this should be done outside of weaviate
If we run out of memory mappings, Go throws a
fatal error
which can't be caught like a regular panic. It crashes the whole node. We need to prevent this from happening and fail more gracefully.Note that the error message is a bit misleading, it sounds like OOM, but it's not. It's actually the
vm.max_map_count
setting/limit.Relates to #4501
Acceptance Criteria
The text was updated successfully, but these errors were encountered: