Hai quy tắc: không quá 50% RAM của máy và không quá ~31 GB.
Vượt 50% RAM là lấy mất phần OS page cache — mà Lucene đọc segment từ file, nên page cache đóng vai trò quyết định với tốc độ search. Cluster nhiều heap mà ít page cache thường chậm hơn cấu hình ngược lại.
Ngưỡng 31 GB là do JVM: quá mốc đó, compressed oops bị tắt và con trỏ chuyển sang 64-bit, nên 32 GB heap thực tế chứa được ít object hơn 31 GB.
# jvm.options
-Xms30g
-Xmx30g # min = max, tranh resize luc chayMáy 128 GB RAM thì không cấp 64 GB heap cho một node — cách làm phổ biến là chạy nhiều node trên một máy, mỗi node ~30 GB heap.
Dấu hiệu heap thiếu: GC chạy liên tục, GET /_nodes/stats/jvm cho thấy heap sau full GC vẫn cao, và bắt đầu thấy circuit_breaking_exception. Nguyên nhân gốc thường là quá nhiều shard, fielddata bật nhầm, hoặc aggregation quá nặng chứ không phải máy thiếu RAM.