自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Java GC日志分析工具集锦

(或等效选项)时生成的垃圾回收(GC)日志文件。GC 日志文件分析是识别 JVM 在垃圾回收方面具体行为的最有效技术,同时也提供了用于优化垃圾回收的最有价值数据。老版本地址:https://github.com/HubSpot/gc_log_visualizer?原文链接:https://fasterj.com/tools/gcloganalysers.shtml。这些工具可帮助您分析 JVM 在使用。gceasy已经没有免费版可以用了。

2025-01-07 16:21:19 381

原创 Finalize的性能问题

​ 在Java中,finalize方法自语言早期以来就是其组成部分,提供了一种机制,在对象被垃圾回收之前执行清理活动。然而,由于几个与性能相关的问题,使用finalizers已经受到了质疑。从Java 9开始,finalize方法已经被弃用,强烈不推荐使用它。

2024-03-02 16:42:21 1052

原创 jdk反射原理和性能

1. 前言  之前写过一篇java反射的文章《Java反射及性能》,但是感觉不是很完整,所以想把这块内容好好再梳理记录一下。2. 简单的demo本案例针对JDK1.8常规的自定义反射使用,测试代码:【TestRef.java】public class TestRef { public static void main(String[] args) { try { ...

2024-01-12 00:00:00 470

原创 直接内存监控不准确,netty玩了什么花?

  是挺久没有“宠爱”我们netty小婊贝了,最近又开始搞事了。于是,趁机探究了下MXBean关于direct memory的监控原理。一、问题  通过arthas dashboard中的direct,visualvm的MBeans以及jmx获取的grafana监控都无法看到直接内存有大量占用,但实际上应用已经在OOM的边缘。······那难道拿这个“小可爱”没法了吗?只能祭出终极绝招:添加jvm...

2023-12-27 00:00:00 407

原创 Redis开发注意项

一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idugc:video:1(2)【建议】:简洁性保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:user:{uid}:friends:messages:{mid}简化为u:{uid}:fr:m:{mid}(3)【强制】:不要包含...

2023-02-17 17:02:03 187

原创 feign调用把CPU吃满了?这个锅HttpMessageConverters来背

一、网友记录原文链接:https://mp.weixin.qq.com/s/Ru...SpringEncoder / SpringDecoder 在每次编码 / 解码时都会调用 ObjectFactory<HttpMessageConverters>.getObject()).getConverters() 获取 HttpMessageConverters。自定义的 DefaultFe...

2022-12-12 00:00:00 1543

原创 Jackson ObjectMapper复用的根本原因

概要分析主要每个ObjectMapper实例对象会维护一个序列化器缓存,即_rootDeserializers成员变量,这是一个ConcurrentHashMap。在readValues()的时候,会调用_findRootDeserializer()查找json序列化器。如果_rootDeserializers中没有获取到,会调用com.fasterxml.jackson.databind.des...

2022-12-06 00:00:00 629

原创 ShardingSphere高CPU消耗的问题

ShardingSphere官方文档https://shardingsphere.apache...一、老版本TreeMap问题在5.0.0之前的ShardingResultSet中使用的TreeMap设置的不分大小写导致的,会强制进行大小写转换,这个源码中写死的。1.1 标志性热点二、5.0.0版本之后去掉了TreeMap在5.0.0版本之后,源码中用了新的结果集类ShardingSphereR...

2022-10-01 00:00:00 329

原创 一个诡异的Kafka消息OOM问题,趁机扒一扒StringBuilder

1. 前言  起源是某个客户线上环境的一次OOM,据说这种诡异的OOM已经第二次了。首先描述一下OOM的相关信息:堆内存13G;使用G1垃圾收集器;OOM后自动生成的dump文件7G;应用大致功能是消费kafka数据,经过一些业务处理然后再次发回kafka【单条消息据说32M左右】客户的疑点:堆内存13G,dump文件7G,明明内存是够的,怎么就OOM了?由于线上环境问题,不能随意复盘调试,只有一...

2022-07-21 00:00:00 855

原创 从HotSpot源码理解DirectByteBuffer

1. 前言  自从java在1.4版本后有了NIO,direct memory就变得如此的常见。在NIO中,direct memory充当缓冲区,使用的是本机内存而不是堆内存。这种方式减少了数据在java堆和本机堆之间的复制操作,一定程度上提高了数据流转的效率。但是direct memory的分配和回收性能不高,不建议频繁的分配direct memory。  通常我们都是通过allocateDir...

2022-07-04 00:00:00 152

原创 Java开源性能分析工具集锦

1. 前言  我的开源分析工具小笔记。2. JDK原生的工具2.1 jinfoJDK提供的一个可以实时查看Java虚拟机各种配置参数和系统属性的命令行工具。常见使用场景:查看JVM默认配置参数;查看修改的配置参数是否生效;其他;用法:jinfo [参数] <pid>参数作用示例-flag <name>打印指定名称对应的配置参数jinfo -flag PrintGC 123 ...

2022-06-10 00:00:00 422

原创 logback配置不当导致频繁类加载

一、前沿  这个问题也是在客户的应用系统中遇到的。实话撂了,就喜欢给客户看问题,忒别涨姿势!!  简单描述下问题:logback在打印error信息的时候疯狂类加载,同时还抛ClassNotFound的error。方法调用栈如下:二、stackoverflow的相似问题  本着尽快解决问题的原则,先搜下是否有现成的答案。在stackoverflow上发现了个十分相似的问题《java.lang.Cl...

2022-05-24 00:00:00 852

原创 各种Buffer傻傻分不清,今天终于有点悟了

一、关于java的DirectBuffer参考知乎问答 Java NIO中,关于DirectBuffer,HeapBuffer的疑问?DirectBuffer本身这个对象是在堆中,但是引用了一块非堆的native memory,这块内存实际上还是属于java进程的内存中,这个角度说的话,DirectBuffer是在用户空间相关内存中。DirectBuffer的好处是减少了一次从jvm heap到n...

2022-05-22 00:00:00 342 1

原创 CGLIB动态代理底层实现原理

一、前言 最近在探究Spring AOP的性能,发现最后是绕不开JDK动态代理和CGLIB动态代理这两个点。笔者心里大致有这么个概念:对于动态代理来说,CGLIB性能要好于JDK。也知道CGLIB是利用ASM技术基于继承子类实现动态代理,JDK是基于实现接口实现动态代理,但是对于底层实现还是比较模糊。今天就彻底整明白CGLIB动态代理的底层实现。二、前置准备(一)测试代码CGLIB核心的几个概念...

2022-03-28 00:00:00 752

原创 dubbo线程模型及参数优化【持续更新】

一、Dubbo整体架构图二、线程模型官网地址:https://dubbo.apache.org/zh/d...三、本地dubbo测试记录(一)踩坑  使用SpringBoot构建dubbo服务的时候,既使用了注解配置,又忘记关闭xml文件配置,导致应用启动失败。(二)消费者端配置dubbo.consumer.timeout=3000,控制消费者等待服务端返回消息的最大时间,默认1秒;【默认配置下,...

2022-03-05 00:00:00 498

原创 druid连接池引起的线程blocked

一、前言  最近在捣鼓演示应用的时候发现一个druid连接池引起的线程blocked问题。先声明下,这个问题是druid 1.1.23版本之前的一个bug,并不是说druid存在明显的性能问题。  github上其实已经有相关的issue:https://github.com/alibaba/dr...;也可以关注下druid各版本的release信息:https://github.com/ali...

2022-03-05 00:00:00 1111

原创 Java性能优化之影响性能的那些细节(三)

ArrayList到HashSet的一次优化一、前言  最近同事分享了一次遍历List判断元素是否存在的优化技巧,亲自实验的一波,还是很nb。(一)本地实验结果1. 环境信息jdk1.8测试工具:JMH 1.22测试机器:mbp 16C32G2. 测试结果  在同样10000个元素数量的情况下进行包含判断,HashSet比ArrayList快了约7660多倍。虽然实验之前知道HashSet肯定比A...

2022-02-20 00:00:00 85

原创 Lettuce源码分析-1【同步操作】

一、前言官方文档地址:https://lettuce.io/core/5.3.7...  最近因为工作需求,需要了解lettuce的一些实现原理。从官方文档的目录可以看到,lettuce实现了非常丰富的各项业务功能,支持同步阻塞,异步(Future)以及Reactive三种执行模式,支持依赖第三方连接池组件common-pool2使用连接池技术,但是官方并不推荐使用连接池。底层通信是基于netty...

2022-02-11 00:00:00 998

原创 性能测试理论体系框架

一、性能测试理论体系1. 性能的两个方面1. 时间及时性(软件运行速度快慢情况)2. 资源经济性(资源消耗情况(CPU、内存))2. 软件性能概述1. 性能指标2. 软件性能生命周期3. 性能影响因素4. 性能模型3. 性能测试概念4. 性能测试解决方案【性能测试常用方法】1. 负载测试2. 压力测试3. 失效恢复测试4. 配置测试5. 并发测试6. 可靠性测试(稳定性测试/疲劳...

2022-01-18 00:00:00 175

原创 Spring AOP源码学习(AOP的入口)

前言  开启AOP功能后,AOP的逻辑是如何开始进行的。一、Bean的生命周期  要讲AOP就必须了解Spring Bean的生命周期,AOP的逻辑是在Bean初始化后这个阶段开始的。Spring Bean的生命周期简单上图:二、AOP(一)@EnableAspectJAutoProxy  Spring中使用该注解开启AOP功能。该注解会注册一个AutoProxyCreator【Annotatio...

2022-01-05 00:00:00 223

原创 docker容器高性能之文件句柄

一、前言  前段时间同事遇到了一个容器内文件句柄泄漏的问题,容器内部偶发性出现Too many open files报错。当时的文件句柄配置如下:问题是不是来了,主机的文件句柄和容器的文件句柄数有关系吗?是什么关系呢?这就是以下要探究讨论的问题。  中间记录了实验的过程,导致篇幅有点长,心急的小伙伴们可以直接跳转至四章节《结论分析》。二、docker容器启动流程  docker是典型的client...

2021-12-12 00:00:00 1496

原创 Java性能优化之影响性能的那些细节(二)

一、前言  Java性能优化之影响性能的那些细节 - 续来了。打算把这个标题整个系列文章,后面慢慢积累慢慢写。这是第一篇入口。这次内容主要来源于《Java程序性能优化实战》这本书,算是一份读书笔记,感兴趣的小伙伴可以阅读下这本书。二、List接口  先来看下这几个List的类图:ArrayListVectorLinkedList  ArrayList、Vector以及LinkedList3种Lis...

2021-12-08 00:00:00 141

原创 macos平台上编译jdk源码

一、前言  对于java来说,很多工作都被jvm包揽了,比如内存分配和回收、其他系统级别调用。这其实就把操作系统底层的一些东西给屏蔽了,对于javaer来说,方便的同时也带来一些困惑(我还不是一个纯javaer),很多细节性概念始终不是很通透,特别是当涉及底层交互的时候。特别是学NIO那块东西的时候(epoll&poll?、zero-copy?、userbuffer?、kernel buf...

2021-12-06 00:00:00 427

原创 学习Disruptor时的一些联想和总结

一、前言  前两天整log4j2的时候不是碰到Disruptor了嘛,想着能不能从这个吹爆了的并发框架里汲取些性能优化的思路呢。稍微学习下源码,还真是有收获的。对Disruptor感兴趣的小伙伴可以看看哈希大佬的博客,对于Disruptor有系列文章,算是网上比较细的https://blog.youkuaiyun.com/zhxdick...二、RingBuffer  大致看了下,好像所有的点都和RingBu...

2021-11-28 00:00:00 129

原创 Log4j2基于Disruptor异步日志优化(部分源码学习)

一、前言  最近遇到了个log4j2写日志导致线程阻塞的问题(多亏了开发小哥日志打的多,不然就没有下面这一系列骚操作)。大致描述下当时的情况(内网限制,没法把现场东西拿出来,只能口述了):log4j2配置情况: 同时配置了3个RollingRandomAccessFile,分别针对SQL语句、INFO日志、ERROR日志,大致的配置如下:<RollingRandomAccessFile na...

2021-11-26 00:00:00 2173

原创 Java性能优化之影响性能的那些细节(一)

  CRUD麻木了吗?被xxx吐槽系统慢吗?你真的了解你的代码吗?今天聊聊一些关于java性能的细节。部分内容来自这个网站:http://java-performance.com,英文比较好的小伙伴可以直接看原文,我今天的内容是自己总结和部分翻译的结合物。正篇一、java中正则表达式相关优化使用Matcher和Pattern进行预编译,替换String.matches, split, replac...

2021-11-11 00:00:00 97

原创 redis常用连接池组件配置

一、前言  之前数据库连接池那篇就提到redis连接池正在准备中,今天就把它贴上。主要包含的redis连接池有jedisPool,redisson,至于之前有吐槽过的那位--lettuce先生,今天就没邀请他,原因是:“被拒绝了”。我们看下官方文档的描述:简单翻译一下重点:lettuce是设计成线程安全的,所以一个连接可以在多个线程间共享,并且在默认情况下,lettuce会进行断线重连。虽然在大多...

2021-10-20 00:00:00 1061

原创 这次调优横跨java和Groovy(SimpleTemplateEngine)

一、前言  最近给客户调优过程中,频繁遇到java调用groovy的情况,在排查过程中也发现了一些相关的性能瓶颈。其中比较突出的是调用groovy api时导致的频繁类加载问题,就这个问题在本地模拟了客户相关的代码实现,进行分析解决。二、问题现象(一)高CPU消耗1. 加载groovy jar时的路经检查2. 读取jar包时的解压缩操作(二)类加载耗时  最直观是压测过程中,相关的单接口响应时间很...

2021-10-17 00:00:00 271

原创 java数据库连接池都有哪些配置参数?都在这里了!

在工作中经常要和各种连接池组件打交道,各种参数眼花撩乱,再也不想因为连接池配置光顾度娘了。今天总结的主要是几大常用的数据库连接池配置,redis连接池准备ing。内容主要来自各官方文档。Druid官方文档:https://github.com/alibaba/dr...连接池类:com.alibaba.druid.pool.DruidDataSource配置缺省值说明性能优化备注namenull配...

2021-10-13 00:00:00 406

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除