自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 问答 (1)
  • 收藏
  • 关注

原创 一次内存溢出的排查经历

排查经过在春节影院APP出现保障,出现接口偶发性的超时,一段时间正常,一段时间超时非常严重,最高达到了200s并且越来越严重cpu出现飙高,由于当时运维立刻重启没有保留现场,所以没有定性问题的依据,但当时通过观察Zabix 上下文切换数和中断数趋势出现不一致的情况(中断数陡增)另外CPU飙高,网络流量没有明显增加,重启后恢复,基于以上几点怀疑是内存泄露。但由于没有数据支持,只能等待再次复现果然过了2天CPU再次上升到了50%的告警,并出现了响应超时的情况,立刻上去拉了栈dump和堆dump,

2021-09-04 12:39:08 1330 2

原创 G1(Garbage First)垃圾收集器

G1(Garbage First)垃圾收集器G1目前是主流的垃圾收集器,虽然未来可能会有ZGC转正,来替代G1,但是目前来看,其仍是未来一段时间的主力垃圾收集器,所以这一段落较长。随着复杂且庞大的场景越来越多,硬件水平大幅度提高,并行的、跨新生代、老年代的G1随之推出。G1的设计发展思路是:在延迟可控的情况下,获得尽可能高的吞吐量。可以说G1是一款面向服务端应用的垃圾收集器,主要针对的是多核心CPU以及大容量的内存的服务器设备。G1把堆内存分割为很多不相关的区域(region),物理上可以是不连续的,

2021-08-21 13:38:23 578

原创 JAVA 并发编程快速通关指南

引言问题一: 多线程一定快吗?答案是不一定,这是因为存在线程有创建和上下文切换的开销。我们可以通过命令vmstat来测试上下文切换的次数,下面是利用vmstat测试上下文切换的示例:CS(Content Switch)表示上下文切换的次数,从上面的测试结果中我们可以看到,上下文 每1秒切换1000多次。**问题二:如何减少上下文切换? **无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一 些办法来避免使用锁(如将数据的ID按照Hash算法取模分段,不同的线程

2021-08-05 11:41:21 610

原创 Redis 高性能、高可用机制

1. Redis 高性能Redis 的单线程Redis 单线程,主要指 Redis 的网络 I/O 线程,以及键值的 SET 和 GET 等读写操作都是由一个线程完成的。但 Redis 的持久化、集群同步等操作,则是由另外的线程来执行的。Redis 采用单线程为什么还这么快?一般来说,单线程的处理能力应该比多线程差,但 Redis 还能达到每秒数万级的处理能力有如下几个原因:Redis 的大部分操作都在内存中完成,并且采用了高效的数据结构,比如哈希表(ziplist)和跳表。单线

2021-08-05 11:23:51 555

原创 现网问题排查小记

现网问题排查小记排查过程在测试环境,有一个服务的消费速度非常慢。希望提高消费者的线程数,来消费提高性能,但发现没有起到作用,本地测试了一下,发现有一哥方法占用cpu时间非常高涉及的具体的代码如下:这边首先怀疑是不是replaceAll() 正则替换引起的,测试机的cpu在70%左右经过测试,将该方法的逻辑删除,返回改成固定的静态值,消费速度确实大幅提高。经过高人指点,决定使用火焰图进行性能分析,查看比较慢的方法:YoungGC频繁 10

2021-07-08 18:22:52 799 2

原创 MySQL 集群一致性问题

主从复制下图是主从复制的原理图。主从复制整体分为以下三个步骤:主库将数据库的变更操作记录到Binlog日志文件中从库读取主库中的Binlog日志文件信息写入到从库的Relay Log中继日志中从库读取中继日志信息在从库中进行Replay,更新从库数据信息在上述三个过程中,涉及了Master的BinlogDump Thread和Slave的I/O Thread、SQL Thread,它们的作用如下:Master服务器对数据库更改操作记录在Binlog中,BinlogDump

2021-06-29 15:21:31 2147 3

原创 连接池的实现细节

1.引子软件工程已经是一层轮子包一层轮子,层层堆叠的框架。每一层都留有配置供调整或能实现扩展。在工作中只依靠网上的配置说明根本无法使用好轮子,甚至还会出问题。1.1各种数据库配置:Tomcat:实际案例,不全,有不合理,有少配tomcat: poolProperties: initial-size: 5 max-wait: 2000 maxWaitMillis: 2000 max-total: 50

2021-06-24 18:02:33 309

原创 ConcurrentLinkedQueue 引发的现网问题

问题排查​ 在公司某次重大活动的保障中,某个组件突然收到了CPU过高的预警(超过80%),收到预警以后,立刻查看监控,发现现网一共10个节点,其中3个节点cpu超过80%,剩余节点cpu正常(cpu不超过60%),并且问题节点的cpu中断数,突然陡增。‘​ 疑点一:在同样级别的请求量下,只有3台服务器​ 疑点二:CPU中断数,在某个时间点突然陡增,但上下文切换没有明显变化 (如果上下文切换数,和中断数两个同时上升,很有可能是GC的原因导致的)​ ​ 这边首先怀疑是不是6个服务节点,收到的

2021-06-24 17:03:01 1113

原创 log4j2 你真的会用吗

大家一提到log4j2的优化,可能就会有人说,采用异步日志最近因为工作的原因最近在做压测,由于某个项目中的日志量特别的大,于是就在网上搜了很多文章,网上有许多讲log4j2配置调优配置,但实际验证下来,却有很大的出入(误人子弟)。没办法,只能自己亲自验证,分析。首先先抛出结论:开启异步日志以后,如果日志的生产速度,大于消费速度的话,那么异步的效率反而会比同步的低。在官网的一句描述中找到原因参考:https://logging.apache.org/log4j/2.x/manual/async.h

2021-06-10 21:41:04 2672 2

原创 程序员避坑指南

禁止使用MongoRepository操作mongodb(mysql也一样),所有操作只能使用MongoTemplate。(MongoRepository会自动帮你完成对象转换,复杂对象时会造成内存泄露)日志对象一定要使用private static final修饰定义成static final,logger变量不可变,读取速度快一些日志框架(log4j)会在打印日志的时候使用sychronized关键字,加上static以后没个类只会产生一个实例,这样在并发调用这个类的时候就不会因为抢不到..

2021-04-24 02:54:01 225

原创 Mysql数据库分库分表实践

​ 目前应用系统的最大瓶颈出现在数据库,主要是基于数据库的逻辑存储结构,和磁盘的物理特性决定了随机读取效率低下,无法靠简单磁盘阵列的扩展或者分布式文件系统,来提升性能。数据库的瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。IO瓶颈由于关系型数据库的存储结构,不适用于分布式文件系统,往往会出现磁盘读IO

2021-04-12 17:24:11 3216 4

原创 WebAsyncTask异步超时的原理

WebAsyncTask异步超时的原理概述最近接触了springMVC的异步模式,总结下来有两个优点:第一当然是节约tomcat容器的线程可以利用异步超时,起到一定的超时降级保护注意:在Controller中使用时,一定要注意做好接口的线程池隔离,让慢的接口使用固定数量的线程池, 否则从tomcat减少的线程会转移到应用里,导致拥塞,在部分接口下游异常的情况的情况下,会出现影响正常接口的服务springMVC默认使用的是一个线程池,建议根据接口指定不同的线程池原理[外链图片转存失败,

2021-02-19 15:38:37 2235 1

原创 手把手教你搭建Kubernetes集群

k8s 集群安装部署文档一:准备条件:使用Centos7.6以上的 操作系统集群服务器设定如下:主机IP主机名10.150.201.17k8s-master0110.150.201.2k8s-node0110.150.201.224k8s-node0210.150.201.231k8s-node03打通外网访问条件二:Kubernetes安装与配置2.1硬件安装要求:2.1.1 CPU 2核以上 内存 3g以上

2021-02-01 16:56:50 647

原创 OceanBase 的特性分析

OceanBase 的特性OceanBase的优势分布式事务OceanBase是通过对原有2PC的改良,来实现分布式事务2PC的问题单点问题。过度依赖协调者,一旦协调者出现问题,系统将无法正常运转,会有可能造成数据不一致参与者在等待其他参与者响应的同时,无法进行任何操作,处于阻塞状态,一旦参与者出现故障,协调者只能通过自己的超时机制发现效率比较低,用户感知到的提交时延是4次写日志耗时以及2次 RPC 的往返耗时OceanBase的改良OceanBase通过多副本(Multi-Paxos

2020-11-12 16:05:32 3608 4

原创 数据结构-跳表(基于JAVA的实现)

数据结构-跳表(基于JAVA的实现)跳表的原理与特点跳跃表应用场景分析跳跃表的JAVA应用使用样例源码分析ConcurrentSkipListMapConcurrentSkipListSet跳表的原理与特点跳表实质就是一种可以进行二分查找的有序链表,跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。解决了链表查询慢的问题,但会占有更多的内存,是一种以空间换内存的数据结构。查询...

2019-12-19 10:56:48 995

空空如也

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

TA关注的人

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