3 yinbucheng

尚未进行身份认证

暂无相关描述

等级
博文 684
排名 3k+

一次k8s容器云上某个服务cpu使用异常问题定位

问题简介我们项目运行在k8s集群中,在运行期间出现存在一个服务的cpu使用比较异常相对其他服务的cpu使用要远远要高问题定位及分析通过容器外部执行top-Hppid命令查看异常服务进程的线程使用情况上面为找到明显的性能消耗线程,但是却总有10左右的线程消耗cpu比较多,跟踪其中占用为11.8的系统调用情况如下上面执行大量重复的唤醒和阻塞操作...

2019-07-11 14:22:18

ReentranLock源码分析

在上一章我们知道AQS中存在大量模板方法,让其子类实现。ReentranLock中的成员变量Sync有两中NofairSync,FairSync为AQS的实现类并且是ReentranLock的嵌套类我们以ReentranLock中的非公平锁中的lock和unlock方法进行源码分析上面为ReentranLock中的加锁代码很简单其调用成员变量上面的lock也就非公平锁上的lock...

2019-06-03 14:11:02

AQS源码分析讲解

首先来一幅AQS整体数据结构源码AQS中有很多重要的成员变量其中包括上面图中的Head,Tail。它们永远保存当前被阻塞住的线程按照顺序依次排列下去上面Node中的成员变量Thread就是存放阻塞的线程变量有了上面大概的信息我们开始进入源码分析,1.AQS是如何让线程阻塞的了?上面acquier方法中tryAcquire是一个抽象方法。AQS采用模板方法设计模...

2019-06-03 11:36:13

netty中添加处理器讲解

netty中我们会添加一些处理器,如果对其添加流程及内部结构不清楚经常会出现各种问题,我先给出一幅处理器整体排版图addFist添加Handler是将Handler放在Head后面addLast添加Handler是将Handler放在Tail的前面消息接收时是从Head开始向Tail流动直到某个handler没有将事件传递下去,或者tail结束(事件未传递是对应handler未调用...

2019-05-31 10:57:04

netty如何判断数据包是否结束

上一篇中分析netty会缓存不完整的数据包,那如何判断数据包是否结束了?本章主要分析netty中常用判断tcp中数据包是否上传完毕。这里我还是用LengthFieldBasedFrameDecoder进行分析其解析数据可以分为两个部分,head表示头用来记录数据长度body表示存放的数据部分我们以head存放body长度(不包括自身长度)对应LengthFieldBased...

2019-05-30 19:35:16

tcp中非阻塞编程为啥出现粘包问题及netty如何解决

在网络编程中我们调用send方法只是将数据存放到sendbuf中由底层tcp进行发送包,这里发送包底层会进行一些优化,尽可能一次发送多的数据,但是数据大小不能太大如果太大会拆分多次进行发送。所有在这个过程中就会出现一次发送包含大量数据包或者一次无法发送完整的数据包。这就是我们说的粘包问题。在阻塞编程中我们获取连接管道后不停去读取数据判断是否满足指定标记来结束一个包,而非阻塞编程中由于select模...

2019-05-30 16:35:35

CMS垃圾回收分析及优化

总体垃圾回收器搭配使用如下我们项目中常见搭配是年轻代采用ParNew老年代CMS+SerialOld其分代收集实现如下minorgc为ParNew垃圾收集器为多线程收集器majorgc为CMS垃圾收集器多线程最低停顿垃圾收集器fullgc为serial垃圾收集器为单线程垃圾收集器Serial是jvm中fgc的默认行为jvm采用CMS合理配置//...

2019-05-30 14:33:55

springboot执行中事务失效问题排查

背景:在执行springboot事务时发现表中数据未能正常回滚掉猜想:1.springboot中事务未能成功开启,可能没有引入aop导致2.springboot中方法抛出的异常不能被事务框架正常捕获问题定位:代码如下@ServicepublicclassTestServiceImplimplementsTestService{@Autowi...

2019-05-30 10:45:58

springboot代码中如何减少锁等待时间

springboot中如何减少锁等待时间在并发编程中经常听到一句话是减少锁的访问,我们进行数据库操作是也可以利用上面思想优化自己代码。记得我曾经说过mysql中的加锁时机是访问是才加锁所有有如下优化点1.如果service方法中不需要保证执行ACID可以不使用事务,让其执行完一条sql就释放锁2.如果service中需要ACID保证,可以将更新,删除语句放在最后面。比如service...

2019-05-09 08:49:13

mysql可重复读隔离级别加锁分析

问题myql可重复读隔离级别下可能会导致插入阻塞,问题复现如下表中有3列都是int类型其索引情况如下:id为主索引,c,d为普通索引现在开始制作问题:在这里我分别开启两个事务:第一个事务中执行一个update语句更新一个不存在的数据,这里没有执行commit也就事务未结束,根据二阶段锁协议,锁的释放是在事务结束后。现在另一个窗口中执行insert操作,这里它...

2019-05-08 08:56:21

mysql测试环境问题定位

问题:mysql测试环境出现insert阻塞很长时间猜想:出现insert很长主要有两个方面1.插入被其他锁阻塞了(这里能导致阻塞的只有在可重复读隔离级别下的间隙锁导致的)2.mysql在某一段时间内进行刷脏页验证:因为锁阻塞需要业务人去优化自己的代码比如更新使用索引防止伪锁表,这里我采用将隔离级别修改为读提交,在读提交下面是没有间隙锁的,所有一般不好出现阻...

2019-05-07 09:21:06

spring boot 中 aop是如何进行管理

spring-boot的aop是如何进行管理的从上面几章分析等着spring-aop的核心就是要加载AnnotationAwareAspectJAutoProxyCreator类AopAutoConfiguration我们看下它的内容:@Configuration//这里判断何时使用这个类@ConditionalOnClass({EnableAspectJAutoProx...

2018-07-25 17:13:08

spring aop 中的AnnotationAwareAspectJAutoProxyCreator 创建过程

springaop中的AnnotationAwareAspectJAutoProxyCreator创建过程 我们在EnableAspectJAutoProxy注解中看到如下语句@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(AspectJAutoProxyReg...

2018-07-24 21:42:10

spring中aop源码分析(五)

spring中源码分析(五)我们接着JdkDynamicAopProxy下面的invoke方法下面进行分析//Weneedtocreateamethodinvocation...invocation=newReflectiveMethodInvocation(proxy,target,method,args,targetClass,chai...

2018-07-17 21:13:57

spring中aop源码分析(四)

spring中aop源码分析(四)我们直接看JdkDynamicAopProxy的invoke方法由于JdkDynamicAopProxy实现了InvocationHandlerpublicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{MethodInvocationi...

2018-07-17 21:03:32

spring中aop的源码解析(三)

spring中aop的源码解析(三)我们继续查看AbstractAspectJAutoProxyCreator中的wrapIfNecessary方法Object[]specificInterceptors=getAdvicesAndAdvisorsForBean(bean.getClass(),beanName,null);这里是获取通知protectedObjec...

2018-07-17 15:17:36

spring中aop源码解析(二)

Spring中aop源码解析(二)我们上一章讲到判断对象是否需要被代理if(isInfrastructureClass(bean.getClass())||shouldSkip(bean.getClass(),beanName)){this.advisedBeans.put(cacheKey,Boolean.FALSE);returnbean;}上面有...

2018-07-17 14:33:27

spring中aop源码理解(一)

Spring中aop源码理解(一)spring中aop涉及的类我们冲AnnotationAwareAspectJAutoProxyCreator我们看下它的继承结构由于它实现了BeanPostProcessor接口所有在获取bean时可以进行一定的处理,aop正是利用这个特性来做的,publicObjectpostProcessAfterInitialization...

2018-07-17 13:43:36

spring获取bean实例(七)

Spring中获取bean对象实例(七)今天进行下面重要分析,从上一章我们可以得知,getSingleton最终的获取对象还是调用createBean方法sharedInstance=getSingleton(beanName,()->{try{returncreateBean(beanName,mbd,args);}catc...

2018-07-17 10:47:37

spring获取bean对象(六)

下面我们接着AbstractBeanFactory的doGetBean中方法,如果未从缓存中获取到实例对象就会进入到下面方法if(mbd.isSingleton()){sharedInstance=getSingleton(beanName,()->{try{returncreateBean(beanName,mbd,ar...

2018-07-16 21:27:45
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。