- 博客(142)
- 资源 (1)
- 收藏
- 关注
原创 精准到 Trace!用 Woody attach 式 Profiling OpenTelemetry 与 Skywalking 请求
skywalking和opentelemetry请求trace精准profiling,分析每次请求的性能问题及瓶颈代码
2025-11-04 08:57:47
1061
原创 从“偶发超时”到“精准定位”:Woody如何让Java接口性能问题无所遁形?
Java应用偶发超时问题难排查?Woody工具1小时定位Redis锁主从切换隐患。传统工具因性能数据与业务脱节而失效,Woody通过三大创新解法:1)用ig命令将traceId与业务订单绑定,实现性能数据业务标识;2)pr命令精准选择支付接口采样,CPU占用仅0.5%;3)生成单请求火焰图,直指RedisLock.acquire()方法耗时占比82%。相比传统方案,Woody实现业务技术数据强关联、生产环境常驻低耗、无需代码改造三大优势,将性能排查从"大海捞针"变为"精准狙击&
2025-09-26 16:15:02
872
原创 Woody:开源Java应用性能诊断分析工具
Woody是一款专注于Java应用性能诊断的命令行工具,支持JDK1.8+及Linux/macOS系统。它通过集成async-profiler,可分析GC、CPU、耗时、锁竞争等性能问题,并生成火焰图。主要特性包括:支持SpringMVC/Dubbo等5种中间件、业务请求与样本精确关联、极低性能损耗。提供pr/pe/pf/ts四类命令,可灵活选择业务入口、事件类型,并支持traceId定位请求。适用于生产环境,已开源在GitHub。
2025-08-29 14:28:14
1134
原创 一站式搞定 Go 服务可观测性:OpenTelemetry 全中间件埋点实践
本文介绍了一个基于OpenTelemetry(OTel)的Go语言微服务可观测性实战项目。该项目提供了Gin、GORM、gRPC、Kafka等8种常用Go中间件的OTel埋点实现,支持全链路追踪、指标采集和日志记录,能帮助开发者快速构建具备云原生可观测性的服务。特点包括:标准化实现OTel规范、低侵入设计仅需一行配置、多维度数据采集、灵活适配不同环境需求。项目兼容主流可观测性后端如Jaeger、Prometheus等,并通过中间件/拦截器模式实现自动上下文传递,无需修改业务代码即可获得完整的调用链路追踪能力
2025-11-18 14:43:56
443
原创 用 Go 快速解析 DataDog 采集数据:从代码到直观理解
本文介绍了如何用Go语言快速搭建一个DataDog数据解析工具,帮助开发者直观理解DataDog采集的监控数据格式。工具主要解决两个问题:解析二进制格式的追踪数据为可读JSON,以及实时捕获UDP传输的指标数据。通过定义DataDog数据结构、编写HTTP接口接收追踪数据并解析为JSON格式,同时创建UDP服务监听指标端口,开发者可以轻松查看监控数据的详细内容,无需复杂配置即可运行。该工具使用Gin框架和MsgPack库,实现简单高效的数据解析和展示功能。
2025-10-14 10:06:53
861
原创 Java Agent 中 Tag 存储结构的优化实践与业界方案对比
本文分析了分布式追踪系统中采集Agent的Tag存储结构设计,对比了OpenTelemetry、SkyWalking和DataDog三大主流方案。OpenTelemetry采用synchronized+HashMap,DataDog使用分层存储与批量同步,而SkyWalking通过规避并发使用ArrayList。文章提出自研Agent的优化方案:基于数组与枚举的存储结构,在中间件监控场景下实现60%以上的性能提升。核心结论是Tag存储设计需匹配业务场景,在性能、安全与灵活性间取得平衡。
2025-10-11 10:11:25
569
原创 K8s环境下Java-Agent自动注入方案详解
本文介绍了在Kubernetes中实现Java-Agent自动注入的技术方案,基于Admission Webhook机制实现无侵入式集成。主要内容包括:1)开启MutatingAdmissionWebhook功能;2)构建Java-Agent基础镜像;3)开发Webhook应用拦截资源请求;4)部署Webhook并注册配置;5)通过标签控制注入规则。该方案无需修改应用代码,具有灵活性和扩展性优势,是K8s环境下实现分布式追踪、性能监控等可观测性场景的最佳实践。
2025-10-09 13:55:11
753
原创 如何学习 OpenTelemetry-Java-Agent(一):自定义 OTLP-HTTP-Collector 实现数据接收与格式化输出
本文介绍了如何从零开发一个OpenTelemetry自定义Collector,用于接收和解析Java Agent上报的OTLP格式数据。文章首先解释了OTLP协议和Collector的核心作用,随后详细说明了项目技术栈(Java+Spring Boot)和实现方案,包括数据接收、解析和格式化输出功能。通过这个极简Collector,开发者可以直观理解OTLP数据流转过程,为后续深入学习OpenTelemetry打下基础。项目代码已开源,支持Trace、Log和Metrics三种数据的接收和JSON格式化输出
2025-09-29 19:24:31
1115
原创 Async-profiler 内存采样机制解析:从原理到实现
在 Java 性能调优的工具箱中,async-profiler 是一款备受青睐的低开销采样分析器。它不仅能分析 CPU 热点,还能精确追踪内存分配情况。本文将深入探讨 async-profiler 实现内存采样的多种机制,结合代码示例解析其工作原理。
2025-06-04 09:58:13
1507
原创 Java APM如何Profiling:使用Instrumentation技术构建热点代码大盘
使用Instrumentation(字节码编辑技术)做Profiling,构建热点代码大盘
2025-02-28 14:44:39
1143
原创 Java APM如何Profiling:使用火焰图多维度分析应用性能瓶颈
Profiling实现了实时分析应用的cpu,内存,请求耗时,锁 四种资源,可通过火焰图形式多维度的分析应用的性能瓶颈
2025-02-22 20:12:16
1249
原创 IPV4离线地址库Java版(极致性能,无内存分配)
5年前写的一个关于IP离线查询的地址库,用阿里云的IP地址信息封装成一个离线产品售卖,当时卖的还是很好的,但后来阿里云那边去爬IPIP.NET的IP数据被抓了,被告失败后产品不能对外售卖了:,产品分好IPV4和IPV6多种语言,但都是以java版本为模板开发的,我当时负责了java版本和go版本,毕竟已经过去5年了,而且该产品也不能对外售卖了,就贴出来给大家观摩观摩。
2025-01-07 09:08:05
450
原创 深入源码分析 Elasticsearch Filter 机制
Filter的cache细节,比如为什么只有filter能cache,cache数据是什么,缓存的数据结构是什么,什么类型的query能被缓存等等
2020-11-09 16:42:32
1075
原创 详解 Elasticsearch refresh 机制
refresh 的定义refresh 做了什么refresh的执行逻辑search idle 的含义
2020-11-04 11:07:50
10566
1
原创 详解 Elasticsearch Index Sorting 原理
Elasticsearch Index Sorting 原理,以及在Elasticsearch,Lucene层面的源码的简析
2020-10-07 10:06:25
5282
原创 多功能高度定制化的Mybatis逆向工程
集成很多额外功能的Mybatis逆向工程框架源码,额外功能包括生成Service,Controller,抽象Mapper接口等等
2020-09-19 15:16:37
407
原创 Elasticsearch(Lucene)文件组织结构以及检索数据流程简析
Elasticsearch(Lucene)数据在磁盘的目录结构,以及在检索是的简要流程
2020-09-19 14:33:24
1219
原创 《深入计算机组成原理》对Java开发的启发
1. 浮点数的表示和运算2. CPU多级流水线,多条流水线,指令预读,乱序执行3. volatile关键字的原理,MESI协议4. 主内存,CPU缓存的读写时间5. CPU分支预测机制6. CPU Cache Line 机制,内存边界对齐,Java对象要求8字节的整数倍7. Java直接内存机制...
2020-05-18 22:58:28
1039
原创 漫谈Java基本数据类型的自动装拆箱机制
Java的自动拆装箱机制的理解,原始类型和装箱类型使用上的区别,什么时候会装箱,什么时候回拆箱,有什么作用。
2020-03-28 23:11:57
443
1
原创 IntelliJ IDEA插件Easy Code 生成配置
Easy Code 是IDEA的一个插件,封装了Mybatis 逆向工程的功能,同时提供了一些自定义的拓展。使用者可对插件的脚本做自定义拓展,比如定义生成的Entity以DO结尾,使用Lombok风格,标识@Data注解,抽象公共的Mapper接口,自定义Service,Controller公共方法 等等。我就是对脚本做了一些自定义,实现上述功能。IDEA安装了Easy Code插件后,配置选项...
2020-03-16 19:36:42
1716
转载 Redis内存模型
前言Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。我们使用Redis时,会接触Redis的5种对象类型(字符串、哈希、列表、集合、有序集合),丰富的类型是Redis相对于Memcached等的一大优势。在了解Redis的5种对象类型的用法和特点的基础上,进一步了解Redis的内存模型,对Redis的使用有很大...
2020-03-12 22:49:06
408
原创 Mybatis逆向工程自定义拓展
对Mybatis Generator做拓展,支持所有的Mappper接口统一抽象父接口,统一注释,可对生成的Model统一添加父类,使用Lombok的@Data替代Getter和Setter方法,可对所有的Model追加DO后缀,比如user_info表,生成UserInfoDO实体类,将Table的Column注释追加到Model的Field上,可自定义类型映射,比如TinyInt >> Integer, TinyInt (2) >> Boolean
2019-12-30 22:28:46
685
原创 Lucene倒排索引在内存中的构建过程(基于7.3.1)
本篇文章只讲倒排索引在内存中的构建过程,数据flush到磁盘的过程没有关联,一个Field的倒排索引在内存中公用一个字节数组,但flush到磁盘后,会根据数据类型写入不同的数据文件。本篇博客只讲构建,不讲刷盘。Lucene根据Field自定的 IndexOptions(索引构建选项)级别记忆是否支持Payload会存储不同的数据信息:public enum IndexOptions { ...
2019-06-03 21:23:55
1366
原创 Mysql多表连接查询的执行细节(二)
本篇博客会说明一下问题:1. 筛选条件放置在where和on上的不同;2. 外连接时外表是否一定为驱动表;3. 是否应该使用join连接查询
2019-02-28 09:47:10
2184
6
原创 Mysql多表连接查询的执行细节(一)
本篇博客会说明一下问题:1. 驱动表如何选择;2. 两表关联查询的内在逻辑是怎样的3. *多表连接如何执行?是先两表连接的结果集然后关联第三张表,还是一条记录贯穿全局
2019-02-26 20:54:39
36241
32
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅