自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TransactionEventListener使用

需要在事务提交成功后执行其他操作。

2024-04-14 23:44:11 158

原创 mysql order by

MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。如果的,又有排序的需求,则会把数据放入sort_buffer排序后返回给客户端。如果sort_buffer太小,则会用到辅助排序。MySQL 将需要排序的数据分成 n份,每一份单独排序后存在这些临时文件中。然后把这 n个有序文件再合并成一个有序的大文件。

2024-03-26 08:50:44 193

原创 G1垃圾收集器

如果不引入一个采用了STW的最终标记(Final Marking)的过程,那么。

2024-03-10 22:44:17 747

原创 CMS垃圾收集

需要暂停所有的其他线程,但这个阶段会很快完成。它的目的是,不会遍历对象关系,。

2024-03-08 00:12:57 1064

原创 三色标记过程

GC过程中需要对对象图遍历做可达性分析。使用了三色标记法进行分析。白色:尚未访问过。黑色:本对象已访问过,而且本对象 引用到 的其他对象 也全部访问过了。灰色:本对象已访问过,但是本对象 引用到 的其他对象 尚未全部访问完。全部访问后,会转换为黑色。1.初始时,所有对象都在 【白色集合】中;2.将GC Roots 直接引用到的对象 挪到 【灰色集合】中;3.从灰色集合中获取对象:3.1. 将本对象 引用到的 其他对象 全部挪到 【灰色集合】中;

2024-03-05 23:56:58 1167

原创 JVM垃圾回收算法

1.手动内存管理什么是手动内存管理?如果要存储共享数据, 必须显式地进行 内存分配(allocate)和内存释放(free)。如果忘记释放, 则对应的那块内存不能再次使用,即内存泄漏。如果程序很长,或者结构比较复杂, 很可能就会忘记释放内存。因此,业界迫切希望有一种更好的办法,来自动回收不再使用的内存,完全消除可能的人为错误。这种自动机制被称为垃圾收集。2.引用计数针对每个对象,只需要记录被引用的次数,当被引用次数变为0时就可以安全回收。如果有循环引用的情况,会导致对象无法回收。需要专门对循环引用的对象

2024-03-04 00:01:12 933

原创 15 ZGC和shenandoah

(4)让 GC 与业务线程“并发”执行,例如增加并发标记,并发清除等阶段,从而把暂停时间控制在非常短的范围内(目前来说还是必须使用少量的 STW 暂停,比如根对象的扫描,最终标记等阶段);1.像 G1 和 ZGC 之类的现代 GC 算法,只要空闲的堆内存足够多,基本上不触发 FullGC。4.内存整理,也就是重定位的过程是并发执行的,用到了我们前面说到的“读屏障”。2.更小粒度的内存块划分,也就允许增量垃圾收集的实现,意味着暂停的时间更短。空闲18位,标识位4位,地址位42位,2^42即4TB。

2024-02-21 00:23:49 168

原创 34 join优化

对性能影响比较大的是SQL的扫描行数和与MYSQL交互次数。

2024-02-19 23:22:07 322

原创 redis 高可用

由于网络问题,哨兵认为主节点下线了,选了一个新的主节点,而客户端认为旧主节点是正常的,还在写数据,并且旧主节点和所有从节点网络也不通,无法同步数据到从节点;等到新主节点上线时,就只有新主节点能接收和处理客户端请求,此时,新写的数据会被直接写到新主节点中。而原主节点会被哨兵降为从节点,即使它的数据被清空了,也不会有新数据丢失。这两个配置项组合后的要求是,主节点连接的从节点中至少有 N 个从节点,「并且」主节点进行数据复制时的 ACK 消息延迟不能超过 T 秒,否则,主节点就不会再接收客户端的写请求了。

2024-01-29 08:47:06 903

原创 04 索引

索引是一种数据结构,作用是提高数据的查询效率。

2024-01-25 23:29:05 468

原创 CMS如何调优

原则是先止损,再排查。FGC的原因是对象晋升失败或者并发模式失败,原因都是了。1.可能是大对象导致的内存泄漏。:观察数据库网络IO是否和FGC时间点吻合,找到对应的SQL和代码。分析内存dump。可以使用jvisualvm查看,需要了解分析工具中指标的含义,。2.可能是内存泄漏。排查方法:(1)查看老年代内存使用情况,如果则可能是内存泄漏,代码有问题。(2)分析监控,是否的。分析内存堆栈。在Java中,如果发生内存泄漏,会导致GC回收不彻底,每次GC后,。

2024-01-23 23:38:06 454

原创 03 | 事务隔离

1.什么是事务?事务就是要保证一组数据库操作要么全部成功,要么全部失败。MYSQL中,事务的支持是的,InnoDB引擎是支持事务的,MYSQL原生的MyISAM引擎不支持事务。

2024-01-20 23:51:06 1055

原创 02 SQL更新语句是如何执行的

7.2PC的过程如果binlog写完后Mysql故障重启了,binlog和redolog是否就不一致了,会导致用binlog恢复的数据库数据和当前数据库不同?在系统不忙的时候,将数据从磁盘读取到内存(如果要刷盘的数据页不在内存),然后用redolog里的记录更新内存,然后写入到磁盘。异常重启后,MyISAM是放着不管的,下次使用数据的时候提示“表损坏,需要恢复”,不能恢复的原因见第15篇。使用WAL,事务commit直接写数据到磁盘比写日志的顺序IO成本高,WAL顺序IO性能高一些。

2024-01-07 20:19:50 388

原创 38 调优kafka

swappiness的值是个参考值,是否会发生swap跟当前是哪种page reclaim及系统当前状态都有关系,所以设置了swappiness=0并不代表一定没有swap发生,同时设为0也确实会可能发生OOM。swappniness的值范围是0-100,数值越低,操作系统越倾向于在物理内存中保存进程数据;3.swap空间设置,将swappniness设置成很小的一个值比如1~10,防止linux OOM Killer 开启随意杀掉进程。在linux操作系统中用于限制进程能够打开的文件描述符的最大数目。

2024-01-04 00:13:08 840

原创 策略模式学习

一个方法有很多的实现方式,并且需要使用if else等分支逻辑选择使用哪种实现方式。

2023-12-14 00:08:03 228

原创 27高水位和leader epoch

kafka leader epoch

2023-12-11 09:04:26 65

原创 24 请求是如何被处理的

当然这里所说的顺序性是指同一个producer发送消息的顺序性,多个producer同时发送消息,本来也无法确定哪个producer发送的消息在前,哪个producer发送的消息在后。3.当 IO 线程处理完请求后,会将生成的响应发送到网络线程池的响应队列中,然后由对应的网络线程负责将 Response 返还给客户端。将网络处理的线程数和IO处理的线程数解耦,达到高性能和资源少占用的目的。因为Kafka会记录请求是被哪个网络线程接收的,因此发送response时还会发往那个网络线程。9.保证分区的顺序性。

2023-12-06 00:28:26 57

原创 29 kafka动态配置

线上运行的kafka broker修改配置需要重启的话,影响比较大。需要一个不需要重启就能使参数生效的功能。

2023-12-03 23:48:40 273

原创 28 主题管理

因为多个broker都冗余有broker分区的数据,减少分区需要将该分区的数据迁移到其他分区。如果是按key hash选的分区,就不知道要迁移到哪里了。7.怎么优雅停止集群中的broker,一个broker可能是controller,也可能是几个分区的leader,可以考虑减少这台broker的职责。6.新增分区后,如果之前是按key保证消息的有序性,新增后会导致指定key被分配到其他分区。执行kafka-topics脚本,删除操作是异步的,执行完脚本只是把主题标记为已删除。什么是controller?

2023-11-30 00:25:19 71

原创 25 kafka消费者组重平衡

1.位置主题&写调整复习 (TODO)2.重平衡是通过心跳线程的心跳请求来通知的,需要重平衡则请求响应REBALANCE_IN_PROGRESS。0.10.1.0版本后心跳线程和消息消费线程分离,避免了消息消费时间长影响心跳。heartbeat.interval.ms参数控制心跳请求频率也控制重平衡频率。

2023-11-13 00:26:59 574

原创 如何判断一个类是线程安全的

一个类或者程序提供的接口,多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是。或者说一段代码可能会被多个线程同时执行,如果每次运行的结果和单线程执行的结果是一样的,并且其他变量的值也和预期的值是一样的,就是线程安全的。参考:https://www.cnblogs.com/ysw6/p/6013653.html。

2023-10-29 23:59:44 203

原创 14 幂等生产者和事务生产者

2.如何保证消费者精确一次消费:kafka事务只保证Producer到Kafka Broker的消息不重复不丢失,Consumer端由于提交偏移量和消息处理的顺序有前有后,依然可能导致重复消费或者消息丢失,如果要实现消费者端精确一次消费,还需要额外的机制实现偏移量提交和消息消费的事务处理。一个幂等的Producer,保证单分区的幂等性,Producer消息会发给主题的多个分区,每个分区都保证幂等性,实际上就是实现了多分区的幂等性。1.只能保证单分区的幂等性,即只能保证某个主题的某个分区上不出现重复的消息。

2023-10-17 01:13:06 227

原创 MYSQL length函数

2.如果字段类型是varchar(10),插入字段为permissionp,则会被截断,插入值为permission。说明length函数计算结果的单位和varchar类型的长度单位是相同的。1.mysql length 函数计算的是有多少个字符,比如字段值是 permission 则length函数计算结果为10。mysql length函数计算结果的单位是啥,和varchar字段类型的单位是相同的吗?结论:mysql length函数计算结果的单位和varchar类型的单位是相同的。

2023-10-15 23:00:32 318

原创 13 Java生产者是如何管理TCP连接的

CLOSE_WAIT状态是在被动方的,即:主动方发起close请求(FIN),被动方回复ACK后,被动方将进入CLOSE_WAIT状态;之后,被动方才发起FIN请求,进行后续的关闭操作。直到看了下面的评论才明白,客户端有可能会hold住这个连接,比如不是使用完这个Producer实例发送完消息就进行关闭,而是一直持有,那么就可能会出现上面这种现象!设置connections.max.idle.ms,默认为9分钟没有使用连接,broker就会主动关闭连接,关闭会产生大量的CLOSE_WAIT连接。

2023-10-12 12:21:52 73

原创 Session和分布式Session

https://blog.csdn.net/qq_15096707/article/details/74012116

2023-10-12 00:33:33 155

原创 08 集群参数配置(下)

写入到页缓存即认为成功。如果在flush之前机器就宕机了,的确这条数据在broker上就算丢失了。如果是acks=1而恰恰是leader broker在flush前宕机,那么的确有可能消息就丢失了,而且producer端不会重发——因为它认为是成功了。kafka认为写入成功是指写入页缓存成功还是数据刷到磁盘成功算成功呢?还是上次刷盘宕机失败的问题,页缓存的数据如果刷盘失败,是不是就丢了?这个异常会不会响应给生产者让其重发呢?Kafka Broker不需要太大的堆内存?应该把内存留给页缓存使用?

2023-10-07 22:39:07 203

原创 11 无消息丢失配置

kakfa若干年broker成功收到一条消息并写入日志文件后,会告诉生产者程序这条消息已经成功提交。

2023-10-01 11:17:26 171

原创 06 Kafka线上集群部署方案

kafka部署在linux上,可以用到linux的零拷贝提升网络传输效率,提高kafka的吞吐量。利用零拷贝可以使数据不经过用户态直接通过网卡发送给接收方,同时通过DMA技术,使CPU得到解放,实现数据的高性能传输。

2023-09-03 17:58:04 669

原创 09 生产者分区机制

可以通过key-ording策略解决。kafka可以为每条消息定义消息键,也称为key,通常是带有业务属性的比如用户id之类的。有相同消息键的消息会被发到同一个分区。下面实现了这个策略,对hashcode进行取模来决定发到哪个分区。kafka默认的分区策略,如果key有值就使用key-ordering策略,如果没有值就使用轮训策略。

2023-08-29 08:45:32 360

原创 01 消息引擎系统

kafka最经常被提到的作用是是削峰填谷,即解决上下游TPS的错配以及瞬时峰值流量,如果没有消息引擎系统的保护,下游系统的崩溃可能会导致全链路的崩溃。还有一个好处是发送方和接收方的松耦合,一定程度上简化了应用的开发。

2023-08-26 23:25:02 468

原创 java内置锁synchronized是怎么实现的

在这个示例中,increment方法被synchronized修饰,多线程并发进行调用时,每个线程在进入该方法时会获取该对象的监视器,如果该监视器没有被其他线程占用,则该线程会执行该方法,并持有该监视器;当一个线程要进入一个被synchronized修饰的方法或代码块时,首先会尝试获取对象的监视器,如果该监视器没有被其他线程占用,则该线程会获取到该监视器,并在对象的监视器上创建一个与该线程相应的锁计数器;如果该监视器已经被其他线程占用,则该线程会进入对象的等待队列,等待监视器的释放,并在该队列中等待唤醒。

2023-03-12 22:27:39 94

原创 sprignboot项目使用七牛云上传图片

https://juejin.cn/post/6996489078594076686

2021-11-14 00:32:13 239

原创 @Value找不到属性

@Value找不到属性@Value导入的包错了,要使用import org.springframework.beans.factory.annotation.Value;参考链接:https://www.jianshu.com/p/7597d964cd4c

2021-11-13 22:33:23 417

原创 Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin

果在linux系统下,要用 sudo chmod -R 777 文件名, 赋予文件夹下所有文件可读写权限(包括本地仓库的写入)。赋予权限以后就好了!参考评论

2021-10-15 01:00:41 164

原创 线程池

线程池四种线程池CachedThreadPoolFixedThreadPoolScheduledThreadPoolSingleThreadExecutor自定义线程池ThreadPoolExecutor拒绝策略AbortPolicyCallerRunsPolicyDiscardOldestPolicyDiscardPolicy自定义拒绝策略ThreadFactory线程池内的异常处理shutdown shutdownNow线程池状态允许核心线程销毁策略核心线程预启动策略线程池以及线程池切面移除线程池中的任

2021-03-03 20:37:28 119 1

原创 并发工具类(二)

并发工具类AQS源码类图ReentranLock原理AQS.ConditionObject锁的分类乐观锁/悲观锁公平锁/非公平锁独占锁和共享锁可重入锁自旋锁高并发随机数ThreadLocalRandom与Random分析例子高性能累加器例子累加器家族例子AQSjava.util.concurrent.locks.AbstractQueuedSynchronizerjava.util.concurrent.locks包基于AQS实现1、抽象队列同步器简称AQS,它同步器的基础组件,JUC种锁的底层实现

2021-02-28 21:53:06 177

原创 并发工具类(一)

并发工具类CountDownLatchCyclicBarrier例1例2Pasher源码分析例1例2注册与注销Semaphore例1Exchanger例子ReentrantLock例1例2例3公平/非公平ReentrantReadWriteLockStampedLock写锁writeLock例1悲观读锁例1LockSupport例1例2CountDownLatchCountDownLatch 是一个辅助工具类,它允许一个或多个线程等待一系列指定操作的 完成。CountDownLatch 以一个给定的数量

2021-02-27 17:26:20 179

原创 并发队列

并发队列ConcurrentLinkedQueueArrayBlockingQueue使用LinkedBlockingQueueSynchronousQueuePriorityBlockingQueue查看源码DelayQueue例子ConcurrentLinkedQueueConcurrentLinkedQueue并发无阻塞队列,BlockingQueue并发阻塞队列,均实现自Queue接口 ConcurrentLinkedQueue无阻塞、无锁、高性能、无界、线程安全,性能优于BlockingQ

2021-02-26 16:24:47 275

原创 同步类容器

同步类容器同步类容器例子VectorHashTable并发容器ConcurrentHashMap例子COW类容器COW容器的弱一致性CopyOnWriteArrayList例子同步类容器Vector、HashTable等古老的并发容器,都是使用Collections.synchronizedXXX等工厂方法创建的, 并发状态下只能有一个线程访问容器对象,性能很低(进行put或者get操作的时候之后一个线程能获取到锁)例子public class DemoThread26 { public st

2021-02-25 23:04:27 118

原创 变量与线程安全

变量与线程安全volatile关键字volatile关键字和static的区别Atomic类CAS原理ThreadLocal原理ThreadLocal源码解析例子InheritableThreadLocal源码Unsafe类Atomic类大量使用了Unsafe类Unsafe类安全限定例子Unsafe类的put和get方法Unsafe操作static和violatestaticviolateUnsafe操作Array类把数组作为整体字段考虑数组内元素操作内存操作线程调度Unsafe的内存屏障和类加载vola

2021-02-25 20:50:08 283

空空如也

空空如也

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

TA关注的人

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