- 博客(293)
- 资源 (6)
- 收藏
- 关注
原创 JVM对象在堆、栈、TLAP上的分配
一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB对象经过逃逸分析,有可能把对象分配到栈上。也就是说如果将对象分配到栈,需要使用逃逸分析手段。逃逸分析是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java HotSpot编译器能够分析出一个新对象引用的使用范围,从而决定是否要将这个对象分配到堆上。
2024-08-16 19:54:06
655
原创 ios解析系统符号表
下载完dyld源码后,解压,打开进入launch-cache打开dsc_extractor.cpp文件,将预处理指令从0改为1,执行该命令,会生成。需要通过之前准备的dsc_extractor来解压获取,使用方法。源码,我使用了dyld-519.2.2.tar.gz。使用其中的dsc_extractor工具,下载地址。该网址可以下载系统库beta系统库符号表。解压后可以双击打开dmg文件,在其中的。类似这样的文件,这些就是压缩的系统库。下载对应版本的固件。
2024-08-11 09:55:22
269
原创 ios手动符号表解析
内存地址(Memory Address):内存中每个数据单元的唯一标识符,用于在运行时访问数据,即 0x0000000103164eb2。基地址(Base Address):内存块或内存区域的起始地址,用于表示数据段或代码段的起始位置。即 0x103163000。结束地址(End Address):内存块或内存区域的终止地址,用于表示该内存块的范围。即 0x103166fff。解析符号表使用bugly提供的jar执行,即可。
2024-08-06 14:05:50
429
原创 springboot 实现kafka多源配置
实际开发中,不同的topic可能来自不同的集群,所以就需要配置不同的kafka数据源,基于springboot自动配置的思想,最终通过配置文件的配置,自动生成生产者及消费者的配置。
2024-06-02 15:03:09
895
1
原创 springboot kafka 提高拉取数量
如果 Kafka 仅仅参考 fetch.min.bytes 参数的要求,那么有可能会因为获取不到足够大小的消息而一直阻塞等待,从而无法发送响应给 Consumer,显然这是不合理的。消费者从服务器获取记录的最小字节数,broker 收到消费者拉取数据的请求的时候,如果可用数据量小于设置的值,那么 broker 将会等待有足够可用的数据的时候才返回给消费者,这样可以降低消费者和 broker 的工作负载。开发过程中,使用kafka批量消费,发现拉取数量一直为1,如何提高批量拉取数量,记录下踩坑记录。
2024-06-01 08:12:56
714
原创 kafka配置消费者重要参数
这个属性的默认值为5分钟。如果消费者没有在session.timeout.ms指定的时间内发送心跳给群组协调器,则会被认为已“死亡”,协调器就会触发再均衡,把分区分配给群组里的其他消费者。它的默认值是latest,意思是说,如果没有有效的偏移量,那么消费者将从最新的记录(在消费者启动之后写入Kafka的记录)开始读取。如果使用轮询策略为消费者C1和消费者C2分配分区,那么消费者C1将分配到主题T1的分区0和分区2以及主题T2的分区1,消费者C2将分配到主题T1的分区1以及主题T2的分区0和分区2。
2024-05-22 00:07:37
1166
原创 Elasticsearch检索的原理
也就是说,假设一个索引中有5个主分片,每个分片一个副本分片,则一共10个分片(5主分片+5副本分片),一次搜索请求会由5个分片来完成(这5个分片可能是主分片,也可能是副本分片)。它是一个用于负载平衡的策略,可以适应不同的请求类型和当前系统状态的变化,并选择最佳的副本分片来响应请求。举例来说,对于需要更多资源的请求,自适应副本选择策略可以选择资源更充足的副本分片,而对于需要更快响应的请求,它可以选择负载更轻的副本分片。3)选择要在查询中使用的索引,根据路由机制选择待检索的分片(主分片或者副本分片)。
2024-05-20 06:31:57
384
1
原创 Elasticsearch段合并的原理
自动刷新流程每秒会创建一个新的段(由动态配置参数refresh_interval决定),导致短时间内段数量暴增。而段数目太多会带来众多问题,包含但不限于如下几点。❑资源消耗:每一个段都会消耗文件句柄、内存和CPU运行周期。❑搜索变慢:每个搜索请求都必须轮流检查每个段,所以段越多,搜索也就越慢。Elasticsearch通过在后台进行段合并来解决上述问题。小段被合并到大段,这些大段再被合并到更大的段。段合并的时候会将那些旧的已删除文档从文件系统中清除。
2024-05-20 06:27:04
1055
1
原创 ElasticSearch 查询优化之skipped shards
生产环境中大数据量的查询可以通过skipped shards 时间来过滤分片来提高查询效率。通过timeDate可以跳过149个分片。待查询的分片数大于 128。
2024-05-19 15:28:59
267
1
原创 Elasticsearch写入的核心概念
也就是说,新插入的文档在刷新到段(内存中)之前是不能被搜索到的,如图所示。使用倒排索引的坏处是更新了词典词库后,老的索引不能生效,如果要使其可搜索,则必须重建整个索引或者借助reindex操作迁移索引。为了防止Elasticsearch集群宕机造成数据丢失,为了保证可靠存储,一个文档被索引之后,Elasticsearch就会将其添加到内存缓冲区,并且同时写入事务日志文件(translog)中。❑如果设置了副本,则数据会先写入主分片,主分片再同步到副本分片,同步操作会加重磁盘IO负担,间接影响写入性能。
2024-05-17 06:37:45
580
原创 Elasticsearch的并发控制策略
这两个参数共同提供了一种强大的控制机制,确保只有当所提供的版本信息与文档的最新状态一致时,才会执行写入操作。
2024-05-16 07:42:14
478
原创 elasticsearch如何定位红色或黄色的索引
在这个例子中,它被设置为n(节点名称)、index(索引名)、shard(分片编号)、prirep(是否为主分片)、state(分片状态)、sto(存储方式)、sc(分片大小)、unassigned.reason(未分配原因)和unassigned.details(未分配详细信息)。该API用于查询集群中的所有分片信息,包括节点名称、索引名、分片编号、是否为主分片、分片状态、存储方式、分片大小、未分配原因和详细信息,并按照存储方式和索引名称进行排序。为此,让集群进一步返回给定分片的当前分配情况和逻辑。
2024-05-16 07:21:12
906
原创 elasticsearch使用Ngram实现任意位数手机号搜索
当对keyword类型的字段进行高亮查询时,若值为123asd456,查询sd4,则高亮结果是<em>123asd456<em>。那么,有没有办法只对sd4高亮呢?用一句话来概括问题:明明只想查询ID的一部分,但高亮结果是整个ID串,此时应该怎么办?Ngram是一种基于统计语言模型的算法。Ngram基本思想是将文本里面的内容按照字节大小进行滑动窗口操作,形成长度是N的字节片段序列。此时每一个字节片段称为gram。
2024-05-15 06:39:40
814
原创 Elasticsearch分词及其自定义
业务需求是这样的:有一个作者字段,比如Li,LeiLei;Han,MeiMei以及LeiLei Li……现在要对其进行精确匹配。对此,你有什么想法?你可能会考虑用自定义分词的方式,通过分号分词。但是这样的话,如果检索Li,LeiLei,那么LeiLei Li就不能被搜索到,而我们希望LeiLei Li也被搜索到。并且对于这种分词,Li,LeiLei中间不加逗号也不能匹配到。但是为什么在映射里面添加停用词也是无效的呢?
2024-05-15 05:59:27
1711
原创 Elasticsearch解决字段膨胀问题
"host": {Flattened的本质是将原来一个复杂的Object或者Nested嵌套多字段类型统一映射为扁平的单字段类型。这里要强调的是:不管原来内嵌多少个字段、内嵌多少层,利用Flattened类型都能一下“拉平”
2024-05-14 07:01:36
1009
原创 elasticsearch 动态映射
在以上实战中,对应第一种情况,Object对象可以添加新的属性,添加了last字段。举例:string类型匹配为text和keyword两种类型,但实际用户极有可能只期望排序和聚合的keyword类型,或者只需要存储text类型,如网页正文内容只需要全文检索,不需要排序和聚合操作。答:boolean类型、float类型、long类型、Object类型、Array类型、date类型、字符串类型。获取映射发现,create_date是text和keyword组合类型,不是我们期望的date类型。
2024-05-14 06:41:25
782
原创 Elasticsearch映射定义
映射类似于关系型数据库中的Schema(模式)。Schema在关系型数据库中是指库表包含的字段及字段存储类型等基础信息。映射定义由两部分组成:元字段、数据类型字段。
2024-05-13 18:04:21
523
原创 基于docker 的elasticsearch冷热分离及生命周期管理
我们可以清晰看到,插入第6条数据会触发max_docs:5的条件,原来的索引my-index-20250709-000001会继续保留,而新写入的第6条数据滚动到了新索引my-index-20250709-000002中。目前采用冷热集群架构,其中热节点使用SSD,并具有良好的索引和搜索性能,将数据保存4天后推送到温节点中,并使用HDD进行存储。某客户的线上业务场景如下:系统每天增加6TB日志数据,高峰时段的写入和查询频率都很高,导致Elasticsearch集群压力大,经常出现查询缓慢的问题。
2024-05-13 07:50:12
1453
1
原创 基于docker安装flink
注意:当你在流式查询上使用这种模式时,Flink 会将结果持续的打印在当前的控制台上。如果流式查询的输入是有限数据集,那么 Flink 在处理完所有的输入数据之后,作业会自动停止,同时控制台上的打印也会自动停止。滚动窗口可以定义在事件时间(批处理、流处理)或处理时间(流处理)上。Tableau模式(tableau mode)更接近传统的数据库,会将执行的结果以制表的形式直接打在屏幕之上。表格模式(table mode)在内存中物化结果,并将结果用规则的分页表格的形式可视化展示出来。
2024-05-09 08:47:58
931
原创 基于K8S构建Jenkins持续集成平台
NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。我们可以利用NFS共享Jenkins运行的配置文件、Maven的仓库依赖文件等Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/inbound-agent:4.13.3-1。
2024-05-05 10:07:44
1285
2
原创 Jenkins集成Kubernetes 部署springboot项目
在尝试用kubernetes的yml文件启动pipeline服务时,会出现Kubernetes无法拉取镜像的问题,这里需要在kubernetes所在的Linux中配置Harbor服务信息,并且保证Kubernetes可以拉取Harbor上的镜像。配置Jenkins的目标服务器,可以将yml文件传输到K8s的Master上。设置执行kubectl的脚本到Jenkinsfile。将pipeline.yml配置到Gitlab中。
2024-05-04 10:24:08
669
2
原创 Jenkins流水线部署springboot项目
之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。所以Pipeline相对自由风格或者其他的项目风格更容易操作。
2024-05-03 21:33:00
1125
2
原创 centos 部署harbor并整合jenkins发布springboot
前面在部署项目时,我们主要采用Jenkins推送jar包到指定服务器,再通过脚本命令让目标服务器对当前jar进行部署,这种方式在项目较多时,每个目标服务器都需要将jar包制作成自定义镜像再通过docker进行启动,重复操作比较多,会降低项目部署时间。我们可以通过Harbor作为私有的Docker镜像仓库。让Jenkins统一将项目打包并制作成Docker镜像发布到Harbor仓库中,只需要通知目标服务,让目标服务统一去Harbor仓库上拉取镜像并在本地部署即可。
2024-05-03 12:06:06
951
原创 jenkins 部署springboot 项目
基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署。
2024-05-03 09:04:42
832
原创 docker 构建 gitlab、jenkins
Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K8s作为实现。准备好GitLab仓库中的项目,并且通过Jenkins配置项目的实现当前项目的。一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。
2024-05-01 22:40:54
929
原创 rocketmq源码之consumer
文章目录2.5 Consumer2.5.1 消息消费概述2.5.2 消息消费初探2.5.3 消费者启动流程2.5.4 消息拉取1)PullMessageService实现机制2)ProcessQueue实现机制3)消息拉取基本流程1.客户端发起拉取请求2.消息服务端Broker组装消息3.消息拉取客户端处理消息4.消息拉取总结4)消息拉取长轮询机制分析2.5.5 消息队列负载与重新分布机制2.5.6 消息消费过程2.5.7 定时消息机制2.5.8 顺序消息2.5.9 小结2.5 Consumer2.5.
2022-05-19 20:00:00
482
1
原创 rocketmq源码之消息存储
文章目录2.4.1 消息存储核心类2.4.2 消息存储流程2.4.3 存储文件2.4.4 存储文件内存映射1)MappedFileQueue2)MappedFile3)TransientStorePool2.4.5 实时更新消息消费队列与索引文件1)转发到ConsumerQueue2)转发到Index2.4.6 消息队列和索引文件恢复1)存储文件加载2)正常恢复3)异常恢复2.4.7 刷盘机制同步刷盘异步刷盘2.4.8 过期文件删除机制2.4.9 小结2.4.1 消息存储核心类private fina
2022-05-18 21:30:00
624
原创 rocketmq源码分析之Producer
文章目录1.3.1 方法和属性1)主要方法介绍1.3.2 启动流程1.3.3 消息发送1)验证消息2)查找路由3)选择队列4)发送消息1.3.4 批量消息发送消息生产者的代码都在client模块中,相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者。1.3.1 方法和属性1)主要方法介绍//创建主题void createTopic(final String key, final String newTopic, final int queueNum) throws MQCl
2022-05-17 14:01:22
602
原创 idea 源码启动rocketmq
文章目录1.1 环境搭建1.1.1 源码拉取1.1.2 导入IDEA1.1.3 调试1)启动NameServer2)启动Broker3)发送消息4)消费消息2.1 rocketmq dashboard搭建1.1 环境搭建依赖工具JDK :1.8+MavenIntelliJ IDEA1.1.1 源码拉取从官方仓库 https://github.com/apache/rocketmq clone或者download源码。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(i
2022-05-16 21:15:00
685
原创 rocketmq相关总结
文章目录1.1 消息存储1.1.1 存储介质1.1.3 消息的存储和发送1)消息存储2)消息发送1.1.4 消息存储结构1.1.5 刷盘机制1)同步刷盘2)异步刷盘1.2 高可用性机制1.2.1 消息消费高可用1.2.2 消息发送高可用1.2.3 消息主从复制1.3 负载均衡1.3.1 Producer负载均衡1.3.2 Consumer负载均衡1)集群模式1.4 消息重试1.4.1 顺序消息的重试1.4.2 无序消息的重试1)重试次数2)配置方式1.5 死信队列1.5.1 死信特性1.5.2 查看死信信息
2022-05-16 20:00:00
397
原创 rocketmq源码分析之NameServer、Broker
文章目录1.2.1 架构设计1.2.2 启动流程步骤一步骤二步骤三1.2.3 路由管理1.2.3.1 路由元信息1.2.3.2 路由注册1)发送心跳包2)处理心跳包1.2.3.3 路由删除1.2.3.4 路由发现1.2.4 小结1.2.1 架构设计消息中间件的设计思路一般是基于主题订阅发布的机制,消息生产者(Producer)发送某一个主题到消息服务器,消息服务器负责将消息持久化存储,消息消费者(Consumer)订阅该兴趣的主题,消息服务器根据订阅信息(路由信息)将消息推送到消费者(Push模式)或者
2022-05-16 18:15:01
1330
原创 Netty内存分配之ByteBuf
文章目录1.1初始认识ByteBuf1.1.1 ByteBuf的基础结构1.1.2 ByteBuf的基本分类1.2 ByteBufAllocator内存管理器1.3 非池化内存内存分配1.3.1 堆内内存的分配1.1初始认识ByteBufByteBuf主要负责把数据从底层I/O读到ByteBuf,然后传递给应用程序,应用程序处理完成之后再把数据封装成ByteBuf写回I/O。1.1.1 ByteBuf的基础结构我们来看netty * +-------------------+------
2022-05-05 15:16:37
1393
原创 netty 优化与源码
文章目录1. 优化1.1 扩展序列化算法1.2 参数调优1)CONNECT_TIMEOUT_MILLIS2)SO_BACKLOG3)ulimit -n4)TCP_NODELAY5)SO_SNDBUF & SO_RCVBUF6)ALLOCATOR7)RCVBUF_ALLOCATOR1.3 RPC 框架1)准备工作2)服务器 handler3)客户端代码第一版4)客户端 handler 第一版5)客户端代码 第二版6)客户端 handler 第二版2. 源码分析2.1 启动剖析2.2 NioEventL
2022-05-02 11:13:46
278
原创 netty 进阶
文章目录1. 粘包与半包1.1 粘包现象1.2 半包现象1.3 现象分析1.4 解决方案方法1,短链接方法2,固定长度方法3,固定分隔符方法4,预设长度2. 协议设计与解析2.1 为什么需要协议?2.2 redis 协议举例2.3 http 协议举例2.4 自定义协议要素编解码器💡 什么时候可以加 @Sharable3. 聊天室案例3.1 聊天室业务介绍3.2 聊天室业务-登录3.3 聊天室业务-单聊3.4 聊天室业务-群聊3.5 聊天室业务-退出3.6 聊天室业务-空闲检测连接假死1. 粘包与半包1.
2022-04-27 22:22:55
448
原创 Netty入门
文章目录二. Netty 入门1. 概述1.1 Netty 是什么?1.2 Netty 的作者1.3 Netty 的地位1.4 Netty 的优势2. Hello World2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理💡 提示3. 组件3.1 EventLoop💡 优雅关闭演示 NioEventLoop 处理 io 事件💡 handler 执行中如何换人?演示 NioEventLoop 处理普通任务演示 NioEventLoop 处理定时任务3.2 ChannelChannelFutureCl
2022-04-23 21:28:48
328
原创 NIO 基础总结
文章目录一. NIO 基础1. 三大组件1.1 Channel & Buffer1.2 Selector多线程版设计⚠️ 多线程版缺点线程池版设计⚠️ 线程池版缺点selector 版设计2. ByteBuffer2.1 ByteBuffer 正确使用姿势2.2 ByteBuffer 结构💡 调试工具类2.3 ByteBuffer 常见方法分配空间向 buffer 写入数据从 buffer 读取数据mark 和 reset字符串与 ByteBuffer 互转⚠️ Buffer 的线程安全2.4 S
2022-04-23 15:52:22
845
原创 单机canal监听binlog
文章目录简介环境部署MySQLCanal安装Canal客户端开发创建client_demo项目Maven依赖在canal_demo模块创建包结构开发步骤Canal消息格式转换为JSON数据简介基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger(触发器) 获取增量变更从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务,
2022-04-11 09:12:52
925
apache-skywalking-apm-6.5.0.tar.gz
2020-04-03
lombok-plugin-0.28-2019.3.zip
2020-01-27
Navicat.for.MongoDB.12.1.7.rar
2020-01-06
Navicat for MySQL v12.0.29.zip
2020-01-05
Xshell.zip
2020-01-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人