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

Grafana Tomcat插件(Telegraf):将JVM内存查询结果转为百分比

问题解答

一、将空闲内存数值转换为百分比显示

1. 修改InfluxDB查询语句

要把空闲内存(free)转换为占总内存(total)的百分比,调整查询为:

SELECT mean("free") / mean("total") * 100 AS "free_memory_percent" 
FROM "tomcat_jvm_memory" 
WHERE ("host" = '$host') AND $timeFilter 
GROUP BY time($__interval) fill(null)

如果需要显示内存使用率(已用内存占比),则用:

SELECT (mean("total") - mean("free")) / mean("total") * 100 AS "used_memory_percent" 
FROM "tomcat_jvm_memory" 
WHERE ("host" = '$host') AND $timeFilter 
GROUP BY time($__interval) fill(null)

2. Grafana面板设置

编辑对应面板,在「显示选项」中:

  • 单位选择「百分比(0-100)」,数值会自动带上%符号
  • 可添加阈值(比如空闲内存<20%时标红),直观展示告警状态

二、基于给定Tomcat指标构建优质Grafana仪表板

按JVM内存、连接器性能两大核心模块拆分,搭配合适的面板类型:

模块1:JVM内存监控

1. 整体内存概览(折线/面积图)

  • 同时展示:空闲内存百分比、总内存(total)、最大内存(max)
    查询示例(总内存):
    SELECT mean("total") FROM "tomcat_jvm_memory" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval) fill(null)
    
  • 作用:快速判断内存分配是否合理,是否接近最大限制

2. 内存池详情(堆叠柱状图)

  • 监控各内存池(如新生代、老年代)的used、committed、max指标
    查询示例:
    SELECT mean("used") FROM "tomcat_jvm_memorypool" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval), "pool" fill(null)
    
  • 作用:定位内存泄漏、GC频繁的具体内存池

模块2:Tomcat连接器性能监控

1. 流量监控(折线图)

  • 计算每秒收发流量,避免原始累计值无法直观判断趋势:
    -- 每秒接收流量
    SELECT non_negative_derivative(mean("bytes_received"), 1s) AS "recv_bytes_per_sec" 
    FROM "tomcat_connector" 
    WHERE ("host" = '$host') AND $timeFilter 
    GROUP BY time($__interval) fill(null)
    
    同理替换bytes_sent得到每秒发送流量,单位设置为「字节/秒」或自动转换为KB/MB

2. 线程状态监控(柱状图)

  • 展示current_thread_busy(繁忙线程数)、current_thread_count(总线程数)、max_threads(最大线程数)
  • 作用:判断线程池是否饱和,若繁忙线程接近最大线程数,需调整Tomcat线程池配置

3. 请求与错误统计

  • 每秒请求数:用导数计算累计请求的实时速率
    SELECT non_negative_derivative(mean("request_count"), 1s) AS "requests_per_sec" 
    FROM "tomcat_connector" 
    WHERE ("host" = '$host') AND $timeFilter 
    GROUP BY time($__interval) fill(null)
    
  • 错误率:计算错误请求占总请求的比例,用单值面板展示并设置阈值(如>1%告警)
    SELECT 
      (non_negative_derivative(mean("error_count"), 1s) / non_negative_derivative(mean("request_count"), 1s)) * 100 AS "error_rate" 
    FROM "tomcat_connector" 
    WHERE ("host" = '$host') AND $timeFilter 
    GROUP BY time($__interval) fill(null)
    
  • 请求耗时:展示processing_time(平均处理时间)和max_time(最大处理时间),定位慢请求

仪表板优化建议

  • 添加变量:除现有$host外,新增$pool变量关联tomcat_jvm_memorypool的pool标签,支持多内存池快速切换
  • 配置告警:针对内存使用率>90%、线程繁忙率>80%、错误率>1%等关键指标设置告警规则
  • 布局分组:将JVM内存、连接器性能模块分区排列,保持时间范围、变量同步,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:55:21