JVM中的垃圾回收器 Serial与Serial Old收集器顾名思义,串行收集器单线程工作。数据比较老的垃圾收集器。单线程意味着只有一个线程去回收没有GCROOT指向的对象,并且暂停工作线程(STW),直至收集结束。回收算法:新生代复制(Serial),老年代标记整理(Serial Old)。特点:(1)新生代垃圾收集器。(2)复制算法(3)单线程应用场景:(1)目前只有hostSpot在Client模式下默认的收集器。设置参数:-XX:+UseSerialGC.
java GC根可达性分析和对象引用 后面几篇文章会围绕JVM相关知识进行学习与分享,本文主要阐述如何判断对象是否是垃圾对象以及判断垃圾对象的依据来展开分析。1.判断对象可以回收的依据?垃圾回收无非就是要对已经不再存活的对象视为垃圾进行回收,那么判断是否是垃圾对象主要有两种方式,分别为引用计数法和可达性分析法。引用计数法:顾名思义,对象有一个计数器,每当有新的引用则计数器加1,有引用失效则计数器减1,当该对象计数器值为0则说明对象不再被引用。(1)优点:实现简单,判断高效。(2)缺点:对象之间循环引用问题
eureka server启动源码分析 基于之前分析的eureka为什么保证ZP和zookeeper为什么保证CP的理解上,本文在分析eureka server端启动源码上去尝试去理清启动流程都做了那些事。1、基于自动装配的eureka配置类(EurekaServerAutoConfiguration)直接搜spring.factoris文件,找到spring-cloud-netflix-eureka-server 包中进入该类首先看到的依然是不可缺少的@import,@ConditionalOnBean2、启动事件下发.
为什么Eureka是AP,zookeeper是CP 随着微服务的盛行,spring cloud微服务架构被很多人引荐和使用,所以再次回顾下eureka于zk的区别并且从理论层面去更深层次的理解eureka如何保证AP的。首先再回顾下eureka高可用架构图在大致理解下这张图的含义服务提供者(applicatonService)向eurekaServer发起注册(register),心跳续约(renew),服务下线(cancel),客户端服务获取(get)。宕机情况:在zookeeper集群环境下如果有zk发生了宕机,那么zk会发起选举
Java8 Collectors.toMap Duplicate key 报错问题。 在使用java8 中Collectors.toMap的时候出现了异常,具体异常如下:Exception in thread "main" java.lang.IllegalStateException: Duplicate key该异常字面意思是有重复的key,但是使用Collectors.toMap 表示将数据集合转换为map,map的key如果出现hash冲突则会覆盖,不明所以写了一个main方法测试。 @Data public static class Stu..
【源码分析】开启hystrix 与不开启hystrix 源码分析开启hystrix 与不开启hystrix 对应ribbon 请求的区别发起一个feignClient请求hystrix 开启状态:HystrixInvocationHandler 会拦截请求 直接走hystrix command 线程池发起异步请求这里一定要注意hystrix 的超时时间一定要大于设置的feign的或者okhttp的超时时间,不然feign调用超时了 hystrix还没触发熔断。然后异步线程会调用SynchronousMethodHandle..
【源码分析】spring cloud feign 写死url超时时间是否还生效? 正常feign 的请求源码跟踪发起的feign 请求会先到ReflectiveFeign的invoke方法SynchronousMethodHandler的invoke 方法 执行executeAndDecode方法因为我没有使用 okHttp请求所以这里默认使用的feign的client然后进入LoadBalancerFeignClient 执行execute方法getClientConfig 方法会获取对应client的配置信息然后会最终走到DefaultClie
手写RPC框架(转载) 前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异步调用、熔断降级等技术,可以全方位的提升基本素质。虽然也有相关源码,但是只看源码容易眼高手低,动手写一个才是自己真正掌握这门技术的最优路径。一 什么是RPCRPC(Remote Procedure Call)远程过程调用,简言之就是像调用本地方法一样调用远程服务。目前外界使用较多的有gRPC、Dub
记一次生产高并发导致nginx频繁超时问题排查(历史) 提供给我的页面内网域名(inter.xxxx.xxxx)从1月1日中午开始陆陆续续有nginx 499 链接断开的告警,12月30日有过类似问题的发生,但是只出现了几次。 当时排查问题原因以为是机器内存过小导致,因为线上机器中只有一台机器是8G 而正好是告警的业务机器,就替换16G内存机器。这个错误的决定也导致了后面问题的再次发生,因为我们的JVM参数中配置的JVM大小是4G,机器内存8G。 现象: 1月1号11点左右nginx告警不断,由于新版...
记一次cloud netflix metrics导致生产环境频繁FULL GC问题 1.查看GC日志grep 'Full' /data/logs/gc_log/gc.log红框内 回收大小->回收后大小(总大小),耗费时间 secs。可以看到full gc 一分钟就执行了3次,STW每次接近20秒,已经严重影响业务。也可以使用命令 jstat -gc 1535 2000 10 查看jstat -gc 1535 2000 10意味每隔2000毫秒输出 jvm进程1535 的GC信息 打印10次。2.导出jvm 堆文件分析此时只能进行对堆文件进行分析.
Spring Boot WebMvcConfigurerAdapter 实现拦截器无配置 SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfigurerAdapter,该类可以省去我们之前的拦截XML配置文件,减少了对于XML文件的管理,这也是springBoot无配置的思想。Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。首先创建对应的拦截器 这里我创建class