我们在利用TSF开发微服务的时候,特别是在Spring Cloud框架下,为了使更好应用服务在各种条件之下能够稳定持久的运行,需要对运行服务程序的底层相关资源、JVM虚拟机的堆栈信息进行监控。TSF提供了JVM监控相关组件,可以查看服务运行实例的CPU使用率、堆内存使用量,火焰图等信息。但是有时候会遇到配置了JVM监控但是无法具体监控图,显示空白等问题,JVM相关日志也无法查看,这个时间我们就需要对相关配置以及相关配置进行排查。
使用 JVM 监控功能时,实例的 tsf-agent 需为 1.21.0 或以上版本。如果 agent 版本过低,JVM 监控功能无法使用您需要对 agent 进行升级。
JVM 日志的采集依赖于 TSF 的 GC 日志配置。如果您自定义了 GC 日志配置,将会覆盖 TSF 的 GC 日志配置,这将导致无法在界面中查看 JVM 日志。
首先我们需要对tsf-agent进行升级操作:
这里我们先介绍下如何制作容器镜像。
Spring Cloud 应用构建材料:
我们需要在 Dockerfile 中增加 JVM 监控组件TencentCloudJvmMonitor
然后在 CMD 命令中启动该组件。
注意:将 Spring Cloud 应用 JAR 包和 JVM 监控组件放在同级目录下,并在该目录下编写 Dockerfile。
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。
火焰图适用于在 CPU 利用率持续较高的情况下进行热点函数分析。 在如下场景下,火焰图采集可能失败:
JVM 日志的采集依赖于 TSF 的 GC 日志配置。如果自定义了 GC 日志配置,将会覆盖 TSF 的 GC 日志配置,这将导致无法在界面中查看 JVM 日志。
以上就是解决在使用TSF遇到JVM相关监控无法看到、以及JVM日志无法查看相关问题的一些解决办法,供大家参考下。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。