自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王伟王胖胖的博客

对技术有点追求而已

  • 博客(433)
  • 收藏
  • 关注

原创 Netty相关总结

Netty相关总结Netty初始化总结Netty组件总结Netty内存管理总结Netty初始化总结一些初始化的知识点。Netty组件总结一些常用组件,不过还有好多处理器,编解码器没说,这个可以看我的源码。Netty内存管理总结很多细节都没怎么写,还是得看源码,很多结构和流程图我的源码文章都有,有兴趣的可以看看。好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的...

2020-05-06 18:09:42 1936 7

原创 DefNewGeneration收集器流程粗略解析二

DefNewGeneration收集器流程粗略解析二各种软,弱,虚等引用处理最后处理无晋升失败的情况有晋升失败的情况GC日志顺序GC前后的堆内存统计日志**GC**的原因以及信息处理引用耗时信息动态调整年龄阈值日志各种软,弱,虚等引用处理可以看到里面会处理这些引用,具体代码比较负复杂不看下去了:最后处理无晋升失败的情况如果前面的晋升,复制没有问题的话,也就是说把非垃圾的标记好了,复制到to区了,或者是晋升到老年代了,剩下的就是把eden和from清理掉,然后把from和to交换下,最后再动态计

2022-03-22 19:28:32 365

原创 DefNewGeneration收集器流程粗略解析一

DefNewGeneration收集器流程粗略解析一目的判断是否可以进行收集(collection_attempt_is_safe)处理GCROOT对象(GenCollectedHeap::gen_process_strong_roots)扫描GCROOT引用对象FastScanClosure::do_oop拷贝到幸存区处理DefNewGeneration::copy_to_survivor_space递归处理引用链递归标记引用FastEvacuateFollowersClosure::do_void目的

2022-03-22 19:27:51 422

原创 GC问题排查实战五-G1日志分析以及动态年龄调整机制

GC问题排查实战五-G1日志分析以及动态年龄调整机制G1分析参数跑完后数据gc日志数据safepoint相关数据动态年龄调整机制(ParNew做例子)hotspot相关源码jdk1.8-b26哪些收集器会用到这个机制这个机制在哪个阶段被使用年龄阈值在哪个阶段被使用总结G1分析这次我们用G1试试。参数-Xms8192M -Xmx8192M -Xmn4096M -Xss1M -XX:+UseG1GC -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -

2022-03-19 20:39:40 1297

原创 GC问题排查实战四-cms日志分析

GC问题排查实战四cms分析参数跑完后的数据gc日志数据safepoint相关数据总结cms分析接着上篇,我们同样的例子,用cms试试。参数-Xms8192M -Xmx8192M -Xmn4096M -Xss1M -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintReferenceGC -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:Me

2022-03-19 20:38:52 404

原创 GC问题排查实战三-Parallel Scavenge和Parallel Old日志分析

GC问题排查实战三年轻代GC的耗时问题Parallel Scavenge和Parallel Old参数跑完后数据gc日志数据safepoint相关数据晋升问题年轻代GC的耗时问题本篇开始一些比较细节的东西,想看看年轻代垃圾收集到底耗时耗在哪里,以便于出现问题的时候有解决思路,本次会用相同的例子压测,然后分别用Parallel Scavenge和Parallel Old,CMS,G1来进行垃圾回收,分析年轻代的一些耗时问题。Parallel Scavenge和Parallel Old参数-Xms8

2022-03-19 20:37:36 521

原创 GC问题排查实战二

GC问题排查实战二JDK低版本的bug(GCLocker Initiated GC)的问题CMS的最终标记触发young gc的问题年轻代GC信息分析老年代GC情况分析年轻代分配和晋升情况分析CMS回收阶段统计分析垃圾生成分析内存泄露分析GC的原因总结JDK低版本的bug(GCLocker Initiated GC)的问题接着上篇,这个就很奇怪,前面刚经过一次young gc,怎么又来,而且年轻代没满,收集了一点点,于是只能百度了,然后发现这个bug,是低版本的,刚好我们用的是1.8.0_162,所以应

2022-03-06 15:41:20 1663

原创 GC问题排查实战一

GC问题排查实战一前言GC信息参数配置信息gceasy分析内存使用GC时间指标交互图信息GC之后的堆情况分析GC过程的持续时间分析GC暂停时间分析缺失的数据问题回收的容量分析前言最近在进行GC的相关调优和问题排查,进行了一个全用例的场景压测,可以抽象为5W用户连接,500QPS并发,然后持续大致24个小时。随后进行一些分析,并找出其中可能存在的问题,以及可以优化的方向。GC信息参数配置信息-Xms12G -Xmx12G -Xmn4G -XX:MetaspaceSize=300M -XX:Surv

2022-03-06 15:40:13 904

原创 kafka知识点总结

kafka知识点总结Kafka基本架构图基本概念以及作用副本同步概念如何保证副本数据一致性kafka存储机制Partition 文件存储方式如何找到消息Kafka基本架构图基本概念以及作用Producer: 消息生产者,向 Kafka 集群发消息的客户端。Consumer: 消息消费者,从 Kafka 集群啦取消息的客户端。Consumer Group: 消费者组(CG),消费者组内每个消费者负责消费不同分区的数据,提高消费能力。一个分区只能由组内一个消费者消费,消费者组之间互不影响。所有的消

2022-02-15 21:55:51 835

原创 分布式压测系统详细介绍八:akka actor模型基本介绍

分布式压测系统详细介绍八:actor模型介绍actor模型优点存在的问题actor模型先上一张图,网上弄来的:一看好像是发送邮件,可以把这个模型看成发送邮件,而且有信箱,好像就是多人通信,一个actor就是一个人,actor之间相互通信,用的是邮件。平时都用过邮件的吧,邮件的特点是什么呢,就是异步非阻塞的优点,发送者可以不关心接受者什么时候收到,是否已经处理,他只管发送到他的邮箱咯,当然接受者也是,他不关心谁给他发的,他想处理邮件就从邮箱中拿出来处理,根据具体邮件内容来进行处理。优点异步非阻塞

2022-02-12 19:32:39 899

原创 分布式压测系统详细介绍七:play framework介绍

分布式压测系统详细介绍六:play framework介绍play framework介绍小试牛刀特点play framework介绍压测系统的后端是用这个框架来做的,先看看这个是什么吧,直接看官网。构建web应用框架,可以是用java和scala,看到这里猜想为什么作者要用这个了,有scala的,gatling就是scala写的。然后看下他的特性,是不是跟springmvc有点像啊:具体有兴趣可以慢慢看他的文档了解下。小试牛刀idea中也有这个的,就是选scala的时候:scala版

2022-02-09 20:50:33 993

原创 分布式压测系统详细介绍六:idea中启动

分布式压测系统详细介绍六:idea中启动idea配置idea配置前面说的都是命令行启动的,今天说下idea怎么配置,首先下载项目,本地安装好环境,然后idea的setting里有个sbt的设置,可以指定用哪里的sbt,以及一些参数:比如设置一些参数,指定用哪个仓库配置文件,以及相关的缓存存在哪里:-Dsbt.repository.config=D:/sbt/conf/repositories-Dsbt.boot.directory=D:/sbt/boot-Dsbt.ivy.home=D:/sb

2022-02-09 20:48:53 1467

原创 分布式压测系统详细介绍五:分布式演示

分布式压测系统详细介绍五分布式演示分布式演示前面的例子只演示了一台施压机,现在模拟分布式2台,其实也就是再开个进程,我们可以把项目复制到另一个目录,然后单独启动play,不启动ui,这个前面文章有说过了,怎么设置,命令:sbt "run -Dhttp.port=20010 -DPORT=20010 -DADDRESS=127.0.0.1 -DZK_IP=127.0.0.1 -DHOST=test20010 -DARTHAS_URL=http://127.0.0.1:40000/?port=40001"

2022-02-09 13:52:18 1610

原创 分布式压测系统详细介绍四:压测例子后台服务

分布式压测系统详细介绍四压测例子后台例子dubbo例子运行grpc例子运行http例子运行压测例子后台前面有说有些压测例子需要有后台,只有BaseHttp不需要,所以这回把其他4个例子补齐了。例子例子里面有3种协议,HTTP,DUBBO,GRPC,只是做了最简单的测试接口,具体就不多说了,直接上github地址https://github.com/wang860770/loadtest_example记得要把zookeeper启动,起来,因为dubbo要用直接可以用idea打开的,然后直接运行:

2022-02-08 23:52:35 285

原创 分布式压测系统详细介绍三:单独启动

启动ui检查下环境是否好了之后,此时可以去项目的ui文件夹下启动下,比如这个命令:ng serve --port 4300 --open --proxy-config src/proxy.conf.js --host 0.0.0.0 --disableHostCheck当然第一次可能遇到这个问题,就是依赖没装呢:用npm install或者直接yarn install安装依赖:此时应该会自动跳转到页面:看到下面的红色的报错是对,因为后台服务器没开呢:...

2022-02-08 22:27:16 512

原创 分布式压测系统详细介绍二:体验功能

分布式压测系统详细介绍二体验功能所有节点脚本编译在线编辑并同步节点开始压测实时数据压测报告arthas体验功能所有节点这里会去zookeeper获取所有注册的施压节点,点击所有节点,看到有即说明启动完成了,如果没出来,可以先等会儿,因为他是懒加载的。脚本编译这里就是进行脚本编译的,如果修改了压测相关脚本的话,都要进行编译,是在线的增量编译,很快的:编译完成后点上面的刷新按钮可以看到编译出来的场景脚本,第一个是访问外网的例子,可以直接跑,后面几个是需要自己的后台服务的,我也写好了例子,到时候上

2022-02-08 22:26:24 392

原创 分布式压测系统详细介绍一:环境搭建

分布式压测系统详细介绍一分布式压测系统大致架构项目安装启动安装node环境安装node安装Angular CLI安装zookeeper安装sbt启动项目安装arthas相关分布式压测系统大致架构我画了个大概的架构图:其实主要就是前后端,加上zookeeper做注册中心以及arthas做性能排查。前段用的是angularJS,后端是play framework,这个跟springmvc类似,也是个web框架,有兴趣可以看下官网。项目安装启动介绍完了基本的东西,应该先下来启动吧,眼见为实,当然需要一

2022-02-08 22:25:54 932

原创 性能优化与压测引擎五:增强版分布式压测系统

性能优化与压测引擎五:增强版分布式压测系统增强版分布式压测系统Enhanced Pea主要增强点脚本文件模拟场景脚本文件脚本相关文件arthas的web端github地址增强版分布式压测系统Enhanced Pea前面介绍了分布式压测系统pea,其实已经很强大了,不知道有没小伙伴拿下来玩过,挺不错的,不过可能因为环境什么的有些问题,我下载下来运行的时候也出现了一些问题,然后进行了修复,又增加了一些内容,比如增加了直接在线编辑脚本,虽然比较low,但是基本功能有了,还比如我把arthas的web嵌入进去了

2022-02-08 22:17:44 281

原创 性能优化与压测引擎四:gatling和arthas实战

性能优化与压测引擎四gatling和arthas结合实战例子springboot接口例子控制器日志模拟gatling压测脚本开启arthas开启压测后观察问题分析解决方案总结gatling和arthas结合实战例子准备一个简单的例子,说明下工作中的一个简单的找问题和优化例子,虽然简单,但是很实用。springboot接口例子控制器@RestControllerpublic class HelloController { @Autowired private Logger log

2022-02-04 22:28:49 973

原创 性能优化与压测引擎三:性能优化利器arthas

性能优化与压测引擎三性能优化利器arthas简单使用网页版Tunnel网页版性能优化利器arthas这个应该不陌生吧,阿里开源的,用于做性能优化和问题排查的,具体就不介绍了,可以看下这个学习文档很关键,基本所有问题都可用这个来解决,其实做性能检测的还有其他的一些工具,比如Jvisulvm,Jprofile,都是可视化的工具,可用看CPU,看GC,看堆内堆外等信息,特别是Jprofile的功能更强大,可用看mysql数据库没个链接的信息,以及每个sql的调用信息,有兴趣的可以学习下,Jprofile学习连

2022-02-03 16:18:25 901

原创 性能优化与压测引擎二:分布式压测引擎pea

性能优化与压测二分布式压测引擎pea分布式压测引擎pea前面介绍了gatling是铺垫,这个才厉害,这个作者把gatling框架封装了下,做了一个分布式的web压测系统,真的很不错,而且开源了,我也是在他的基础上加工的,所以还是要先介绍下这位大佬的这个引擎,github。...

2022-02-03 14:47:34 899

原创 性能优化与压测引擎一:压测框架gatling

性能优化与压测一压测框架gatling简单使用介绍压测框架gatling说到压测,我们最熟悉的可能就是ab命令和jmeter了,确实他们很方便,但是我最近都在用另外一个压测框架,叫gatling,为什么呢,因为他的报告很吸引我,而且写压测脚本很方便,功能也挺全的,他可以很好的去模拟一些场景,用的是scala语言,用到actor模型,很容易模拟大量并发的场景,并发真的很强,我觉得挺不错的,天生封装了http的协议,当然可以想办法实现GRPC或者DUBBO,网上其实有的,遗憾的可能就是需要用到scala,对

2022-02-03 14:25:27 2113

原创 sentinel 1.8之nacos持久化之授权与热点规则序列化问题

sentinel 1.8之nacos持久化之授权与热点规则序列化问题sentinel持久化之nacos原理授权与热点规则序列化问题AuthorityRuleNacosProvider的publish问题AuthorityRuleNacosProvider的getRules问题持久化配置的5种规则客户端debug推到的规则sentinel持久化之nacos原理上图就是官方的图,其实原理就是通过sentinel的管流后台去进行控制,然后将修改后的数据发送到各个数据源中,比如我们这里用的nacos,当然还可

2021-04-10 22:34:35 729 1

原创 seata源码分析之-AT模式写隔离

seata源码分析之-AT模式写隔离AT模式写隔离AT模式读隔离AT模式写隔离当我们看到上面的图的时候可能不太明白这个具体是怎么做的,所以今天就来源码看下。首先是获取全局锁,那这个到底是什么锁呢,我们来看TA模式的ConnectionProxy的processGlobalTransactionCommit方法:注册的时候会去注册锁,其实有点像分布式锁,谁先注册了谁就占着了,然后其他的就要重试:其实这把锁哪里来的,就是在准备回滚日志的时候生成的,表名_主键ID:如果发现注册有锁冲突,说明已

2021-02-14 17:08:49 835 1

原创 seata源码分析之-资源管理器详解2

seata源码分析之-资源管理器详解2事务消息处理器回滚消息处理器ResourceManagerXATCCResourceManager事务消息处理器上篇说了资源管理器有4种,那这些事务管理器是什么时候调用的,又是被什么事件驱动的呢,这次我们来看看事务消息处理器,也就是处理TC发来的事务消息,同样还是在RM初始化的时候创建的。貌似一样的套路:一样的SPI机制:对应的也是4种处理器,如果有TC的消息来了,就会调用DefaultRMHandler的handle去找出是哪种处理器,进行处理。

2021-02-13 22:21:51 389

原创 seata源码分析之-资源管理器详解1

seata源码分析之-资源管理器详解一资源管理器RMRMClient初始化资源管理器加载AT模式的DataSourceManagerXA模式的ResourceManagerXATCC模式的TCCResourceManagerSAGA模式的SagaResourceManager资源管理器RM前面将的大致的AT流程,但是一些细节的东西没讲,现在来说下比较重要的资源管理器,比如我们的AT,TCC,XA,SAGA模式下资源管理器具体是什么时候创建的,创建的是什么,又是怎么运作的。RMClient初始化资源管理

2021-02-13 22:21:26 324

原创 seata源码分析之-AT模式客户端分析4

seata源码分析之-AT模式客户端分析4ConnectionProxy之processGlobalTransactionCommitConnectionProxy之register注册分支事务ConnectionProxy之recognizeLockKeyConflictException处理锁冲突UndoLogManager之flushUndoLogs写入回滚日志ConnectionProxy之report报告事务状态ConnectionProxy之rollback异常回滚TC通知提交成功或者回滚Dat

2021-02-13 22:20:21 613

原创 seata源码分析之-AT模式客户端分析3

seata源码分析之-AT模式客户端分析3RM之StorageServiceDataSourceProxy数据源代理DataSourceProxy的一些方法处理RPC调用ExecuteTemplate的executeBaseTransactionalExecutor的executeLockRetryPolicy的execute镜像查询与回滚日志插入RM之StorageService前面我们分析了springcloud的例子中的TM的BusinessService的一些原理,接下来我们来找个RM说下,比如

2021-02-13 22:19:51 310

原创 seata源码分析之-AT模式客户端分析2

seata源码分析之-AT模式客户端分析2GlobalTransactionScanner的初始化initClient初始化TM和RM的客户端TmNettyRemotingClient初始化registerProcessor注册处理器init开启定时重连的任务和初始化netty组件TM进行GlobalTransactionalInterceptor进行方法拦截handleGlobalTransaction进行全局事务处理TransactionalTemplate的execute即TM要做的事Transact

2021-02-13 22:19:11 279

原创 seata源码分析之-AT模式客户端分析1

seata源码分析之-AT模式客户端分析1前言seata在springcloud下的客户端是怎么工作的寻找seata在springboot的自动配置官方的springcloud-eureka-seata例子前言放假了有时间详细的看下seata的相关原理,看官网的那些图和介绍可能并不是很明白相关的组件是怎么工作的,可能只是死记硬背,有什么TC,TM,RM,他们做了哪些工作的,可能对一些细节和为什么这么设计并不是很清楚,所以还是想去了解下,顺便看下大厂的代码和设计思路,最直接的方式就是结合官网的介绍,然后看

2021-02-13 22:18:43 365

原创 Mybatis Plus的BaseMapper的方法是如何注入的

Mybatis Plus的BaseMapper的方法是如何注入的Mybatis Plus的BaseMapper的方法Mybatis Plus的初始化方法MybatisPlusAutoConfiguration中的SqlSessionFactoryBaseMapper方法的注入的过程总结Mybatis Plus的BaseMapper的方法我们在用的时候经常就是生产自定义的Mapper继承自BaseMapper,然后我们就可以使用了,但是有没想过BaseMapper里的方法是怎么被注入到mybatis里的,

2020-11-18 13:42:59 17943 5

原创 kafka原理以及源码相关总结

kafka相关总结Kafka相关一.特点1.应用解耦2.异步处理2.1 串行方式大约30ms。2.2 并行方式大约20ms。3.数据限流4.消息通信二.结构0. 元数据(集群节点信息,分区信息,主题和分区关系等)1.生产者1.1相关重要配置1.1.1 acks确认机制:1.1.2 buffer-memory缓冲区大小1.1.3 batch-size发送批次大小1.1.4 linger.ms设置延迟多久要发送,类似于TCP的nagal算法1.1.5 retries重试次数和retries.backoff.ms

2020-10-26 14:07:14 595

原创 SpringBoot 2.2.6 相关知识点总结

SpringBoot 2.2.6 相关扩展点和注解总结扩展点注解扩展点一些常用的扩展点。注解一些常用注解,springcloud框架有很多自定义的其实也就是这些组合扩展出来的。先总结这些,后面慢慢补。好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。...

2020-05-03 21:41:38 1474 1

原创 Spring Cloud 2.2.2 源码之六十九nacos的raft选举原理解析四

Spring Cloud 2.2.2 源码之六十九nacos的raft选举原理解析四raft竞选基本流程集群结点请求同步数据RaftCore的receivedBeat获取信息RaftController的getraft竞选基本流程集群结点请求同步数据前面说了leader发送的心跳过去的时候会带有数据key的信息,其他结点可能会进行数据的同步。RaftCore的receivedBeat获取...

2020-04-30 11:58:07 634

原创 Spring Cloud 2.2.2 源码之六十八nacos的raft选举原理解析三

Spring Cloud 2.2.2 源码之六十八nacos的raft选举原理解析三raft竞选基本流程RaftController的beat处理心跳RaftCore的receivedBeatRaftPeerSet的makeLeaderRaftController的getPeer获取结点信息raft竞选基本流程RaftController的beat处理心跳RaftCore的receive...

2020-04-30 11:57:40 476

原创 Spring Cloud 2.2.2 源码之六十七nacos的raft选举原理解析二

Spring Cloud 2.2.2 源码之六十七nacos的raft选举原理解析二raft竞选基本流程RaftCore的HeartBeat心跳RaftCore的HeartBeat心跳RaftPeerSet的update更新结点信息raft竞选基本流程RaftCore的HeartBeat心跳我们可以看到,心跳也有超时时间,到了后重置然后发心跳。@Override publ...

2020-04-30 11:56:54 476

原创 Spring Cloud 2.2.2 源码之六十六nacos的raft选举原理解析一

Spring Cloud 2.2.2 源码之六十六nacos的raft选举原理解析一raft竞选基本流程MasterElectionsendVote拉票其他结点处理拉票请求RaftController的voteRaftCore的receivedVote接受投票后决定leaderRaftCore的decideLeaderraft竞选基本流程MasterElection前面说了选举测初始化,现...

2020-04-30 11:56:26 653

原创 Spring Cloud 2.2.2 源码之六十五nacos的raft选举初始化流程

Spring Cloud 2.2.2 源码之六十五nacos的raft选举原理nacos数据一致性服务执行流程nacos数据一致性服务执行流程

2020-04-30 11:55:57 758

原创 Spring Cloud 2.2.2 源码之六十四nacos数据一致性原理之永久结点数据同步二

Spring Cloud 2.2.2 源码之六十四nacos数据一致性原理之永久结点数据同步二nacos数据一致性服务执行流程RaftController的onPublish过半响应RaftConsistencyServiceImpl的onPut一些问题nacos数据一致性服务执行流程RaftController的onPublish过半响应最终响应还是调用了RaftConsistencyS...

2020-04-29 22:54:39 676

原创 Spring Cloud 2.2.2 源码之六十三nacos数据一致性原理之永久结点数据同步一

Spring Cloud 2.2.2 源码之六十三nacos数据一致性原理之永久结点数据同步一nacos数据一致性服务执行流程RaftConsistencyServiceImpl的put永久数据同步RaftCore的signalPublishRaftCore的isLeaderRaftPeerSet的isLeaderRaftCore的onPublishService的onChangenacos数据...

2020-04-29 22:54:12 1082 1

空空如也

空空如也

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

TA关注的人

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