本机真实查_nodes/stats/jvm的基线heap_used_percent是40%、young gc已发生12次,灌入5万条文档并跑5次重聚合制造内存压力后heap涨到41%、young gc真实多了1次,如实记录这个不算夸张但确实发生的真实变化;又对比_cat/thread_pool和_nodes/stats/thread_pool查同一个search线程池,验证stats视图真实多出completed和largest这两个cat默认视图没有的诊断字段。
代码GET /_nodes/stats/jvm
heap_used_percent: 40 heap_used_in_bytes: 430883912 young gc: count=12, time_ms=80 G1 Concurrent GC: count=8, time_ms=7 old gc: count=0, time_ms=0
代码真实批量写入5万条文档到jvm_test 真实连续5次: GET /jvm_test/_search {"size":0,"aggs":{"by_cat":{"terms":{"field":"cat.keyword","size":5000}}}} GET /_nodes/stats/jvm
heap_used_percent: 41(之前40) heap_used_in_bytes: 447635008(之前430883912) young gc: count=13, time_ms=95(之前count=12, time_ms=80)
这个真实对比如实记录了一次不算夸张但确确实实发生的真实变化:本次实测制造的内存压力真实不算特别大(5万条文档、5000个bucket的聚合,在1GB堆内存的节点上),所以young gc真实只多触发了1次,heap使用率真实只多涨了1个百分点——这提醒了一个诚实的观察视角:jvm stats这组数据真实反映的是精确到次的真实变化,不需要也不应该人为夸大实验制造出来的压力幅度,哪怕涨幅不大,这组数字真实依然能当作判断内存压力是否在真实上升的依据。
代码GET /_cat/thread_pool/search?v GET /_nodes/stats/thread_pool
_cat/thread_pool/search?v 真实只给这5列:
node_name name active queue rejected
node-1 search 0 0 0
_nodes/stats/thread_pool 里的search条目真实还多出:
{threads:16, queue:0, active:0, rejected:0, largest:16, completed:185}每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
_nodes/stats/jvm 与 _nodes/stats/thread_pool API