You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取Apache Ignite集群指标遇问题:无法获取缓存存储占用

Apache Ignite 厚客户端获取服务器指标问题解答

1. 为什么内存占用显示为0?

你在厚客户端直接获取缓存内存占用得到0是正常的——厚客户端本身不存储缓存数据,哪怕是复制模式的缓存,数据实际存储在Ignite服务器节点上,厚客户端仅持有缓存的逻辑引用,本地没有实际数据,所以本地内存占用自然为0。你的现有方法仅拿到了缓存元数据(名称、条目数),但未从服务器节点拉取真实的内存和持久化指标。

2. 正确获取服务器缓存内存占用的方法

要获取服务器节点上的缓存内存使用情况,需通过Ignite分布式指标API从服务器节点拉取数据:

  • 获取单节点缓存明细指标:遍历所有服务器节点,逐个获取节点上的缓存内存数据
    Ignite ignite = Ignition.start();
    // 筛选所有服务器节点
    Collection<ClusterNode> serverNodes = ignite.cluster().forServers().nodes();
    
    for (ClusterNode node : serverNodes) {
        // 获取当前节点的所有缓存指标
        Map<String, CacheMetrics> cacheMetricsMap = ignite.cluster().metrics(node).getCacheMetrics();
        
        for (Map.Entry<String, CacheMetrics> entry : cacheMetricsMap.entrySet()) {
            String cacheName = entry.getKey();
            CacheMetrics metrics = entry.getValue();
            
            // 缓存堆内存占用(字节)
            long heapMemoryUsed = metrics.getHeapMemoryUsed();
            // 缓存非堆内存占用(字节)
            long offHeapMemoryUsed = metrics.getOffHeapMemoryUsed();
            
            System.out.printf("节点[%s] 缓存[%s] 堆内存占用: %d bytes, 非堆内存占用: %d bytes%n",
                node.id(), cacheName, heapMemoryUsed, offHeapMemoryUsed);
        }
    }
    
  • 获取缓存聚合指标:直接获取某缓存在所有服务器节点上的内存使用总和
    IgniteCache<?, ?> cache = ignite.cache("your-target-cache");
    CacheMetrics aggregateMetrics = cache.metrics();
    
    long totalHeapUsed = aggregateMetrics.getHeapMemoryUsed();
    long totalOffHeapUsed = aggregateMetrics.getOffHeapMemoryUsed();
    
    System.out.printf("缓存[%s] 总堆内存占用: %d bytes, 总非堆内存占用: %d bytes%n",
        cache.getName(), totalHeapUsed, totalOffHeapUsed);
    

3. 获取持久化存储使用量的方法

仅当集群启用**原生持久化(Native Persistence)**时,以下方法有效:

  • 获取节点级持久化空间:查看单个服务器节点的持久化总使用/总分配空间
    for (ClusterNode node : serverNodes) {
        ClusterMetrics nodeMetrics = ignite.cluster().metrics(node);
        
        // 持久化已使用空间(字节)
        long persistenceUsed = nodeMetrics.getPersistenceUsedSpace();
        // 持久化总分配空间(字节)
        long persistenceTotal = nodeMetrics.getPersistenceTotalSpace();
        
        System.out.printf("节点[%s] 持久化已用: %d bytes, 总空间: %d bytes%n",
            node.id(), persistenceUsed, persistenceTotal);
    }
    
  • 获取缓存级持久化占用:查看单个缓存在节点上的持久化空间占用
    for (Map.Entry<String, CacheMetrics> entry : cacheMetricsMap.entrySet()) {
        long cachePersistenceSize = entry.getValue().getPersistenceSize();
        System.out.printf("缓存[%s] 持久化占用: %d bytes%n", entry.getKey(), cachePersistenceSize);
    }
    

关键注意事项

  • 确保厚客户端具备集群指标访问权限(默认配置开放权限,若开启安全认证需配置对应权限);
  • 复制模式缓存的数据会同步到所有服务器节点,单节点的缓存指标与其他节点基本一致,聚合指标为单节点数值乘以服务器节点数。

内容的提问来源于stack exchange,提问作者Dude Ramasamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:17:21