前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TSF微服务无法查看JVM监控问题

TSF微服务无法查看JVM监控问题

原创
作者头像
邓愉悦
修改2020-10-22 21:46:46
1.2K0
修改2020-10-22 21:46:46
举报

问题背景

我们在利用TSF开发微服务的时候,特别是在Spring Cloud框架下,为了使更好应用服务在各种条件之下能够稳定持久的运行,需要对运行服务程序的底层相关资源、JVM虚拟机的堆栈信息进行监控。TSF提供了JVM监控相关组件,可以查看服务运行实例的CPU使用率、堆内存使用量,火焰图等信息。但是有时候会遇到配置了JVM监控但是无法具体监控图,显示空白等问题,JVM相关日志也无法查看,这个时间我们就需要对相关配置以及相关配置进行排查。

原因分析

1、tsf-agent 版本过低。

使用 JVM 监控功能时,实例的 tsf-agent 需为 1.21.0 或以上版本。如果 agent 版本过低,JVM 监控功能无法使用您需要对 agent 进行升级。

2、GC 日志配置被覆盖。

JVM 日志的采集依赖于 TSF 的 GC 日志配置。如果您自定义了 GC 日志配置,将会覆盖 TSF 的 GC 日志配置,这将导致无法在界面中查看 JVM 日志。

解决方案

1、JVM 如何升级 tsf-agent?

首先我们需要对tsf-agent进行升级操作:

  • VM 场景:您需要把实例移出集群后,再重新移入集群,重新部署服务实例。
  • 容器场景:您需重新编写 dockerfile,生成新的镜像后重新部署服务实例。

这里我们先介绍下如何制作容器镜像。

Spring Cloud 应用构建材料:

我们需要在 Dockerfile 中增加 JVM 监控组件TencentCloudJvmMonitor然后在 CMD 命令中启动该组件。

注意:将 Spring Cloud 应用 JAR 包和 JVM 监控组件放在同级目录下,并在该目录下编写 Dockerfile。

代码语言:javascript
复制
FROM centos:7
RUN echo "ip_resolve=4" >> /etc/yum.conf
RUN yum update -y && yum install -y java-1.8.0-openjdk
# 设置时区。这对于日志、调用链等功能能否在 TSF 控制台被检索到非常重要。
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
ENV workdir /app/

# 下面的 jar 包可替换为您的 Spring Cloud 应用 jar 包,注意这个 jar 包要和您的 dockerfile 位于同一级目录
ENV jar provider-demo-0.0.1-SNAPSHOT.jar
COPY ${jar} ${workdir}
WORKDIR ${workdir}

# JVM 监控组件要和您的 Dockerfile 位于同一级目录,并创建 JVM 监控数据采集目录 
ENV agentjar TencentCloudJvmMonitor-1.0-RELEASE.jar
COPY ${agentjar} ${workdir}

RUN mkdir -p /data/tsf_apm/monitor/jvm-metrics/

# JAVA_OPTS 环境变量的值为部署组的 JVM 启动参数,在运行时 bash 替换。使用 exec 以使 Java 程序可以接收 SIGTERM 信号。
# 使用 JVM监控功能需要加上 gclog 和 javaagent 的配置, 否则将无法提供 jvm 监控能力
CMD ["sh", "-ec", "exec java -Xloggc:/data/tsf_apm/monitor/jvm-metrics/gclog.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -verbose:gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=8 -XX:GCLogFileSize=50M -javaagent:${workdir}/${agentjar}=hascontroller=true ${JAVA_OPTS} -jar ${jar}"]

这里我们需要注意的是:

JVM 监控功能依赖 javaagent,jdk1.5 以后才引入了 javaagent 技术,所以您需使用 jdk1.6 及以上版本,建议您使用 jdk1.8。

2、火焰图采集失败如何处理?

火焰图适用于在 CPU 利用率持续较高的情况下进行热点函数分析。 在如下场景下,火焰图采集可能失败:

  • 数据量过大:目前火焰图的数据量上限为2MB,超出时会采集失败;此时,请缩短所选择的采集时间后,重新进行采集。
  • 当前无热点函数:进程处于低 CPU 消耗状态,即当前无热点函数时,火焰图采集可能失败(无法采集到热点函数);此时,可尝试延长采集时间后重新采集,或待服务请求量较大时再重新采集。
  • 无法和进程建立连接:发生无法和实例连接等异常情况时,采集任务会执行超时;此时,请您检查实例的连接状态,确认状态正常后再重新采集。

3、为何无法查看 JVM 日志?

JVM 日志的采集依赖于 TSF 的 GC 日志配置。如果自定义了 GC 日志配置,将会覆盖 TSF 的 GC 日志配置,这将导致无法在界面中查看 JVM 日志。

以上就是解决在使用TSF遇到JVM相关监控无法看到、以及JVM日志无法查看相关问题的一些解决办法,供大家参考下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 原因分析
    • 1、tsf-agent 版本过低。
      • 2、GC 日志配置被覆盖。
      • 解决方案
        • 1、JVM 如何升级 tsf-agent?
          • 2、火焰图采集失败如何处理?
            • 3、为何无法查看 JVM 日志?
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档