前言

image

在Spring Clould微服务架构中

1个客户端请求会先经过负载均衡(如Nginx)到达微服务网关。

微服务网关(SpringClould Gateway)从注册/配置中心(Nacos)拉取服务列表,通过本地负载均衡器(Ribbon)将请求路由到具体服务实例,期间可结合Sentinel进行流量控制和容错降级。

服务之间的远程调用则通过OpenFeign实现。

在分布式场景下,为保证跨服务调用的事务一致性,通常会引入Seata进行分布式事务管理。

此外,微服务架构还需解决分布式Session、消息队列、文件集群等一系列问题。

而对于多服务间调用链路的监控与排查,则可通过引入分布式链路追踪系统(如SkyWalking、Zipkin或Jaeger)来解决,它能为每1个请求生成全局唯一的Trace ID,串联起各服务节点的调用耗时与状态,从而实现全链路可视化观测。

一、链路追踪介绍

对于1个由几十个甚至几百个微服务构成的微服务架构系统,通常会遇到以下问题:

如何串联整个调用链路,快速定位问题?

如何梳理各个微服之间的依赖/调用关系?

如何进行各个微服务接口的性能分析?

如何跟踪整个业务流程的调用处理顺序?

二、SkyWalking

Apache SkyWalking是国产开源、Apache顶级项目一体化可观测平台(APM 应用性能监控)。

专门面向微服务、云原生、K8s容器、服务网格场景,一站式搞定链路追踪(Trace)、指标监控(Metrics)、日志(Logs)、性能剖析(Proflies)One platform for traces, metrics, logs and profiles)。

SkyWalking由以下核心组件组成,各司其职:

组件全称 / 角色核心职责
Java Agent 无侵入式探针 部署在应用侧,负责采集链路、指标、日志等数据,并上报给 OAP。
OAP Server Observability Analysis Platform (可观测性分析平台) 系统的大脑,负责接收分析聚合存储数据,并向 UI 提供查询接口,同时负责下发动态配置和 Profiling 任务。
存储介质 可插拔存储 持久化所有监控数据。最常用的是 Elasticsearch,也支持 MySQL、TiDB 等。
UI 层 展示 集中展示所有可观测性数据。

三、接入SkyWalking

Agent方式(推荐)

java -jar:JVM会去寻找JAR包中MANIFEST.MF文件里定义的Main-Class,并执行它的main() 方法。这是应用程序的起点。

java -javaagent:JVM会去加载指定的JAR包,寻找 MANIFEST.MF文件里定义的Premain-Class,并执行它的premain() 方法。这是JVM专门为监控/增强类库预留的入口。

探针接入的特点:零代码侵入,对业务代码无任何改动,覆盖绝大部分监控场景。

java -javaagent:/path/to/skywalking-agent.jar \
     -Dskywalking.agent.service_name=order-service \       # 指定服务名
     -Dskywalking.collector.backend_service=192.168.1.100:11800 \ # 指定OAP地址
     -jar your-app.jar

skyWalking探针记录的异常堆栈深度不足问题排查

skyWalking探针记录的异常堆栈深度不足问题排查

agent.cause_exception_depth配置决定skyWalking探针记录的异常堆栈深度。

#查看容器中主进程Pid
ps -ef

#根据Pod查看进程启动完整命令行
cat /proc/10/cmdline | tr '\\0' ' '

#根据完整启动命令中/monitor/skywalking/skywalking-agent.jar路径,锁定SkyWalking的配置文件路径
grep -i depth /monitor/skywalking/config/agent.config

#查看环境变量
echo $SW_AGENT_CAUSE_EXCEPTION_DEPTH  

#skyWalking加载配置优先级
1. JVM 启动 `-Dskywalking.xxx`(你这里缺失深度配置)
2. 容器系统环境变量 `SW_AGENT_*`(你这里为空)
3. agent.config 文件 `${变量:默认值}` 兜底(当前生效

SDK代码方式

通过SDK的方式可以扩展自定义Skywalking链路追踪信息,其缺陷是对代码有侵入。

Agent采集到的可观测数据,只能看到1次HTTP请求的URL和方法和消耗时间。

image-20260702103254252

通过apm-toolkit-trace第三方依赖jar包,和代码@Trace主机自定义链路追踪 还可以记录Java代码中方法,参数、返回值实现链路追踪,

四、性能剖析(SkyWalking Profiling)

性能剖析(Profiling)是SkyWalking里一种按需触发的诊断机制

用户在SkyWalking UI界面新建任务通过OAP Server向目标Agent主动下发任务并周期性抓取线程栈快照。

从而精准定位到方法级或代码行级的性能瓶颈,补全链路追踪(Tracing)无法深入代码内部的盲区。

image-20260702102149755

Skywaling的UI内置服务性能剖析功能,是定位代码级性能瓶颈(如 CPU 飙升、方法慢)的利器。

支持的剖析性能类型

剖析类型分析目标适用场景支持版本
CPU剖析 分析 CPU 热点方法 定位 CPU 使用率高的代码 全版本支持
内存分配剖析 (ALLOC) 分析高频内存分配的调用栈 定位频繁创建对象的代码,优化 GC 压力 SkyWalking 10.2.0+

对服务内存分配剖析需要升级SkyWalking至10.2.0+

工作流程

  • 你发起任务:你在 SkyWalking UI 上选择目标服务和实例,配置好参数(如持续时间、CPU或内存采样等),创建一个新的 Profiling 任务。

  • Agent 接收指令:运行中的 Java Agent 会持续与 OAP Server 保持通信。当新任务创建后,Agent 会从 OAP Server 获取到“开始执行剖析”的指令。

  • Agent 执行采样:Agent 收到指令后,会在你的 JVM 内启动 async-profiler 工具,按照你设定的参数(如CPU采样)开始采集数据。

  • 数据上传与分析:采样完成后,Agent 会将采集到的数据(如JFR格式文件)上传回 OAP Server。OAP Server 解析后,你就能在 UI 上看到可视化的分析结果了。

 

 

 

 

 

 

入门教程 

SkyWalking官网

posted on 2026-07-02 11:08  运维开发之路  阅读(13)  评论(0)    收藏  举报