您好 Ling Liu,
JVM 有接近 80% 的時間都花在 Garbage Collection 上,這通常表示 Cluster 正承受嚴重的 Memory Pressure。您目前對 Shard 數量、Shard 分佈以及 Fielddata 使用量的懷疑都是合理的調查方向。建議先檢查每個 Node 上的 Shard 數量,確認是否存在大量小型 Shard,因為過多的 Shard 會消耗大量 Heap Memory,並增加 GC 活動。
接下來建議仔細檢查 Fielddata 和 Query Pattern。載入到 text 欄位的 Fielddata 可能會大量佔用 Heap,因此需要確認是否有 Aggregation 或 Sorting 操作將大量 Fielddata 載入記憶體。可以監控 Fielddata Cache、Query Cache 和 Request Cache,判斷 Memory Consumption 主要來自 Indexing、Search 還是 Aggregation。
另外,也建議檢查 Cluster 中的 Shard Allocation Balance。如果部分 Node 上配置了明顯更多的 Shard,可能會造成這些 Node 承受更高的 Heap Pressure 並頻繁觸發 GC。重新平衡 Shard,以及檢視 Index Lifecycle Policies,通常可以降低 Memory Footprint 並改善 Search Performance。
在 Monitoring 方面,建議特別關注 JVM Heap Utilization、Old Generation GC Frequency、GC Pause Time、Fielddata Memory Usage、Query Cache Hit Rate、Segment Count 以及 每個 Node 的 Shard Count。這些 Metrics 通常可以比較清楚地反映 Memory 的主要消耗來源。同時,也建議確認哪些 Index 或 Query 與 Memory Spike 有關,因為少數效率不佳的 Workload 也可能對整個 Cluster 的 Health 造成較大的影響。
希望以上資訊能對您有所幫助。如果您認為這個回答有幫助,請點擊 「Accept Answer」,讓我知道這個回答已經解決您的疑問。
Jason