- 博客(586)
- 资源 (1)
- 问答 (4)
- 收藏
- 关注
原创 记一次现网服务FGC告警
起因是运维发现现网一个服务触发了FGC频率监控告警,具体告警信息如下遇到这种问题,首先考虑就可能是发生内存泄漏了,或者存在大对象,导致无法申请新内存。运维在把触发告警的节点重启之间,保存了dump信息,下面来看看具体的内存快照信息。
2025-02-09 13:58:33
422
转载 Spring Boot中Druid连接池与多数据源切换
在需要切换数据源的方法上使用自定义注解。@Service@Autowired// 其他操作。
2024-11-21 00:06:35
104
转载 彻底搞懂零拷贝
无论是传统 I/O 拷贝方式还是引入零拷贝的方式,2 次 DMA 拷贝是都少不了的,因为两次 DMA 都是依赖硬件完成的。拷贝方式CPU拷贝DMA拷贝系统调用上下文切换传统方式(read + write)224内存映射(mmap + write)124sendfile12sendfile202sendfile2RocketMQ 选择了 mmap + write 这种零拷贝方式,适用于业务级消息这种小块文件的数据持久化和传输;
2024-11-17 17:06:17
89
原创 Collections.synchronizedList()你真的会用吗?
在日常开发中,我们有时候需要初始化一个线程安全的List集合,我们可以使用。
2024-11-14 20:52:35
566
原创 The field file exceeds its maximum permitted size of 1048576 bytes.
SpringBoot 项目在文件上传时出现了如上的错误,显示文件的大小超出了允许的范围。原因是 SpringBoot内嵌的 tomcat 默认的所有上传的文件大小为 1MB,超出这个大小就会报错,解决这个问题需要更改以下两个默认。解决方案呢,要根据SpringBoot的版本来确定,以下列举出了几种情况,可以根据自己项目的SpringBoot版本来对应:把默认的文件的大小限制修改一下即可。以下是我项目中的用到的文件大小限制,改成50MB即可满足我的需求了。配置完上述限制之后,重启项目。
2024-11-12 22:03:18
1550
原创 The temporary upload location [/tmp/tomcat.*.*/*/Tomcat/*/ROOT] is not valid
原因:springboot 启动tomcat服务的时候默认会在/tmp目录下生成一个缓存文件夹,linux系统满足某种条件会清理/tmp路径,导致报错。思路:很明显这个缓存目录是用来缓存上传文件的,当上传的文件进行缓存时,找不到缓存目录,导致IOException。解决方案:指定一个linux不会清理的缓存目录:server.tomcat.basedir。
2024-11-12 21:57:09
807
原创 RedisTemplate序列化设置
在本文中,我们介绍了 RedisTemplate 序列化设置的流程和具体步骤,并提供了几种常见的序列化方案供选择。通过正确地配置序列化器,我们可以将对象以合适的格式存储到 Redis 中,从而提高数据的读写效率和可读性。希望本文能帮助你理解和运用 RedisTemplate 的序列化设置。
2024-11-11 21:35:23
1187
原创 mysql中数据不存在却查询到记录?
首先看下面的查询语种查询结果如下看到上面的查询结果,是不是一脸懵?这audioId明显不对啊,怎么查询到了?
2024-11-11 19:33:03
491
转载 一文详解Java泛型设计
其原因就是在于,如果将contains和remove改为E,那么声明上界之后,调用这两个方法会引发编译错误,然而这两个方法均为类型安全方法,自然不可声明为E,add作为很明显的写方法,自然也需要用E作为参数类型,到这里,不得不感叹类库设计者的想法独到。注明的PECS原则就总结了这一点,PECS(Prodcuer extends Consumer super),也就是说,作为元素的生产者Prodcuer,要用协变,支持元素的读取,而作为消费者Consumer,要支持逆变,支持元素的写入。
2024-11-10 17:10:08
49
转载 ParNew垃圾回收器深度解析
相信大家对JVM的垃圾回收机制有了更全面的了解。今天,我们聚焦于新生代垃圾回收器ParNew,揭示其多线程回收的奥秘,并探讨其在不同场景下的应用。
2024-11-07 23:06:03
93
转载 JVM 如何调优?
这样就降低了对象频繁进入老年代的问题,实际上很多优化都是围绕着如何减少 Full GC 去做的,就是尽可能把短期存活的对象留在 survivor 里,不要进入老年代,这样就可以在 Minor GC 的时候回收掉这些对象,不会产生 Full GC,从而引发 STW,影响系统性能。元空间大小,Meta 区域的大小一定要指定,如果我们代码类或引入动态生成类的技术超过元空间大小,那么会触发 Full GC,可以通过 jstat 命令查看项目生成类的大小来评估具体设置值,一般设置 256M 够了。
2024-11-07 22:32:00
68
原创 MongoDB入门
在介绍 MongoDB 之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识!最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消息的时候,原来的做法是将监听的消息数据存储在数据库,以便好对异常消息数据进行追溯,消息内容使用text类型存储,起初因为数据内容很短,没啥毛病,但是当随着业务的扩展,收到的消息内容越来越长,最后发现数据库中的text字段类型无法很好的支持查询,于是在这个时候,就开始考虑采用更加合适的数据库来存储这种消息数据!
2024-11-04 22:13:18
902
转载 一文彻底搞懂java的锁
现在绝大多数的个人电脑和服务器都是多路(核)处理器系统,如果物理机器有一个以上的处理器或者处理器核心,能让两个或以上的线程同时并行执行,就可以让后面请求锁的那个线程“稍等一会”,但不放弃处理器的执行时间,看看持有锁的线程是否很快就会释放锁。为了提高性能, Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。多个线程获取锁的顺序,不是按照先到先得的顺序,有可能后申请锁的线程比先申请的线程优先获取锁。
2024-11-03 20:03:19
88
原创 Nginx性能优化的几个方法
小伙伴们平时使用 Nginx 是否有进行过性能优化呢?还是软件装好了就直接使用呢?今天和大伙分享几个常见的 Nginx 优化配置。接下来我们就来看看具体该如何做。
2024-11-02 23:23:26
1112
原创 正则表达式匹配日期格式
利用正则表达式结合文本编辑器,就能全局替换了 '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})'这里有sql文本,是从数据库中拷贝出来的,希望重新执行的时候createTime和updateTime都统一设置成当前日期。
2024-10-30 22:13:41
364
转载 利用redis生产分布式ID
不过呢,光有唯一的 ID 还不够,我们还得让它更符合业务的实际需求。比如订单编号吧,我们可能希望它的格式是,其中ORD是业务标识,20240528是日期,0001是当天的序号。那具体怎么用呢?让我们在业务代码中一探究竟!想象一下,在一个电商系统中,当一个新的订单如流星般划过天际,我们迫不及待地想要一个独一无二的 ID 来标记它时——很简单,只需调用我们的方法,传入订单相关的参数即可。@Service@Autowired// 其他业务逻辑...
2024-10-29 23:18:21
86
转载 Redis List 是否适合做消息队列?
消息队列是一种异步的服务间通信方式,适用于分布式和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。Producer:消息生产者,负责产生和发送消息到 Broker;Broker:消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue;Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理;MySQL:“消息队列的使用场景有哪些呢?
2024-10-28 22:24:50
40
转载 Java中的回调机制
回调机制指的是将一个方法或函数作为参数传递给另一个方法,待特定事件或操作完成时调用这个方法,处理结果或执行后续操作。可以理解为一种“通知”机制,当一个任务完成时,调用回调函数来传递结果或执行后续逻辑回调可以分为同步回调和异步回调:异步回调:常见于异步操作,如网络请求、文件 I/O 操作等,在任务执行完成后,异步回调函数会被调用,处理返回的结果或错误。同步回调:指回调函数在主函数执行期间立即被调用。即回调是顺序执行的,不涉及多线程或异步操作整体回调机制流程如下图所示:可以看出回调是一种双向调用关系,
2024-10-27 19:49:44
459
转载 ForkJoin,实战讲解!
从 JDK 1.7 开始,引入了一种新的 Fork/Join 线程池框架,它可以把一个大任务拆成多个小任务并行执行,最后汇总执行结果。比如当前要计算一个数组的和,最简单的办法就是用一个循环在一个线程中完成,但是当数组特别大的时候,这种执行效率比较差,例如下面的示例代码。i++) {System.out.println("汇总结果:" + sum);还有一种办法,就是将数组进行拆分,比如拆分成 4 个部分,用 4 个线程并行执行,分别计算,最后进行汇总,这样执行效率会显著提升。
2024-10-27 11:20:59
227
转载 5 种微服务网关比对
从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。
2024-10-20 20:06:14
237
原创 Notepad++中提取txt本指定格式内容
原文是一些对话历史记录,内容冗长繁杂,如果我只想看ask相关的提问内容,如何快速的提取出来呢?其实很简单,用Notepad++打开文本之后,选择标记,在查找目标中输入正则表达式。在日常工作,有些文本处理工作,比如下图。接着复制标记文本即可。
2024-10-13 17:25:22
1020
转载 Mysql高性能规范
曾经,我接触过很多项目的数据库的很多字段基本设置为null,就图个方便,有的是为了方便前端传参,但是我觉得这是不规范的如果该字段默认值为Null并且又被设置为索引列那么这一列会需要额外的空间来保存,会占用更多的空间进行比较和计算时还需要对NULL值做特殊的处理。
2024-10-13 10:31:44
68
转载 现网JVM问题排查三板斧
虽然目前市场上有很多成熟的 JVM 可视化监控分析工具,但是所有的工具其实都依赖于 JDK 的接口和底层相关的命令,了解这些命令的使用对于我们在紧急情况下排查 JVM 相关的线上故障,会有更加直观的帮助。
2024-10-07 13:34:56
227
转载 一文彻底搞懂RocketMQ
类比一下我们生活的邮政系统。邮政系统要正常运行,离不开下面这四个角色, 一是发信者,二 是收信者, 三是负责暂存传输的邮局, 四是负责协调各个地方邮局的管理机构。对应到 RocketMQ 中,这四个角色就是 Producer、 Consumer、 Broker 、NameServer。在操作系统中,使用传统的方式,数据需要经历几次拷贝,还要经历用户态/内核态切换。从磁盘复制数据到内核态内存;从内核态内存复制到用户态内存;然后从用户态内存复制到网络驱动的内核态内存;
2024-09-29 08:28:53
284
转载 一文彻底搞懂RabbitMQ
用的居多:一旦 channel 进入 confirm 模式,所有在该信道上发布的消息都将会被指派一个从1开始的唯一的ID,一旦消息被投递到所有匹配的队列之后,RabbitMQ 就会发送一个包含消息的唯一ID 的 ACK给生产者,这就使得生产者知道消息已经正确到达目的队列了,如果 RabbitMQ 没能处理该消息,则会发送一个 Nack (not acknowledged) 消息给你,你可以进行重试操作。如果同时配置了队列的 TTL 和消息的 TTL,那么较小的那个值将会被使用。当然这样会造成吞吐量下降。
2024-09-23 20:54:25
277
转载 java实现锁的几种方式
在 Java 中,除了对象锁,还有显示的加锁的方式,比如 Lock 接口,用得比较多的就是 ReentrantLock。它的特性如下:下面我们再来对比看下 ReentrantLock 和 synchronized 的区别从这些对比就能看出 ReentrantLock 使用更加的灵活,特性更加丰富。ReentrantLock 是一个悲观锁,即是同一个时刻,只允许一个线程访问代码块,这一点 synchronized 其实也一样。
2024-09-21 19:14:38
353
转载 一文看懂 Kubernetes 弹性伸缩
综上所述,我们认识了什么是HPA,HPA如何工作,但是在实际的业务场景中,Pods缩容期间是否会对业务带来影响呢?该如何解决?
2024-09-08 10:15:52
335
转载 RocketMQ为何会出现消息重复消费
总得来说,RocketMQ中还是存在很多种导致消息重读消费的情况,并且官方也说了,只是在大多数情况下消息不会重复。所以如果你的业务场景中需要保证消息不能重复消费,那么就需要根据业务场景合理的设计幂等技术方案。
2024-09-01 16:54:57
433
转载 @Transactional 注解用法指南
针对不同业务定制异常类型是比较常见的做法,@Transactional 注解的 rollbackFor 参数支持自定义的异常,但我们往往习惯于将这些自定义异常继承自 RuntimeException。那么这就出现和上边同样的问题,事务的范围不足,许多异常类型仍然无法触发事务回滚。try {想要解决这个问题,可以在 catch 中主动抛出我们自定义的异常。try {上面的关于 @Transactional 注解的使用注意事项是我在代码审查和搜集网络观点后整理出的。
2024-09-01 08:14:35
287
转载 精通微服务,没听过SkyWalking?
上一篇文章介绍了分布式链路追踪的一种方式:Spring Cloud Sleuth+ZipKin,这种方案目前也是有很多企业在用,但是作为程序员要的追逐一些新奇的技术,Skywalking作为后起之秀也是值得大家去学习的。skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。
2024-08-29 22:36:04
180
转载 ReadWriteLock提升性能的终极指南
1.1 什么是ReadWriteLock在并发编程中,ReadWriteLock是一个锁,它允许多个线程同时读共享数据,而写操作则是互斥的。这意味着如果没有线程正在对数据进行写入,那么多个线程可以同时进行读取操作,从而提高程序的性能和吞吐量。1.2 ReadWriteLock与其他锁的比较相比于传统的互斥锁,ReadWriteLock在处理读多写少的场景时更加高效,因为它允许多个读操作并发执行,而不是让所有读写操作都串行化,因为缓存的读取操作往往比写入操作要多得多。1.3 使用场景与优势。
2024-08-28 22:32:39
167
2
转载 redis分布式锁八大坑点
在分布式系统中,由于redis分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。但不是说用了redis分布式锁,就可以高枕无忧了,如果没有用好或者用对,也会引来一些意想不到的问题。今天我们就一起聊聊redis分布式锁的一些坑,给有需要的朋友一个参考。
2024-08-27 22:32:21
152
1
转载 MySQL数据实时同步到Elasticsearch
数据传输服务DTS(Data Transmission Service)是阿里云提供的实时数据流服务,支持关系型数据库(RDBMS)、非关系型的数据库(NoSQL)、数据多维分析(OLAP)等数据源间的数据交互,集数据同步、迁移、订阅、集成、加工于一体,助您构建安全、可扩展、高可用的数据架构。在MySQL与ES的同步场景中,其主要目的是将MySQL中的业务数据实时同步到ES中,以便利用ES的高效查询能力来应对复杂的查询需求,同时减轻MySQL的查询压力。Binlog实时同步的原理基于数据库的复制机制。
2024-08-18 16:15:55
157
转载 为什么说RedisCluster中的MGET要慎用
所以Lettuce客户端,执行mget获取跨槽位的数据,是通过槽位分发执行mget,并合并结果实现的。而Lettuce基于Netty的NIO框架实现,发送命令不会阻塞IO,但是处理请求是单连接串行发送命令,这也就意味着,如果我们计算出来的slot个数越多,耗时也就越高。在实际业务场景中,难免会有遇到使用了redis集群架构后要使用mget的场景,那么我们是否可以针对已有的一些redis客户端组件进行代码升级和优化呢?命令一次性获取多个 key 的值,如果这些 key 所在的哈希槽分布在不同的节点上,那么。
2024-08-18 12:47:02
721
1
转载 高并发系统的艺术:如何在流量洪峰中游刃有余
既然采用了分布式的微服务架构,那么分布式系统的一些常见痛点也是高并发要考虑的,比如熔断,降级,限流,超时等设计,这些本身是为了增强分布式系统的鲁棒性,从而简介的增强系统的高并发承载能力。随着互联网业务的不断发展,选择在网上购物的人群不断增加,这种情况下,会衍生出一些促销活动,类似抢购场景或者热销热卖场景,在高峰时段的下单数量会非常大,也意味着对数据库中畅销商品的库存操作十分频繁,需要频繁查库存和更新库存。当然那这样不够,因为MySQL数据库的读写的并发上线能力是有限的,我们还是需要再进一步优化我们的方案。
2024-08-17 17:48:47
73
1
转载 SkyWalking 和 ELK 实现链路追踪的实践
SkyWalking和 ELK 各自在 APM 与日志管理领域发挥着重要作用,尽管原生 ELK 不直接支持链路追踪,但通过与 SkyWalking 的集成,可以互补优势,共同提升微服务架构下的可观测性。
2024-08-11 16:38:29
211
转载 微服务中的日志链路追踪
本篇通过拦截器、MDC 功能,全链路加入了 traceId,然后将 traceId 输出到日志中,就可以通过日志来追踪调用链路。不论是进程内的方法级调用,还是跨进程间的服务调用,都可以进行追踪。另外日志还需要通过 ELK Stack 技术将日志导入到 Elasticsearch 中,然后就可以通过检索 traceId,将整个调用链路检索出来了。
2024-08-11 16:20:25
380
原创 @TransactionalEventListener与@EventListener那点事
最近测试提了个bug,有个交易订单服务,会产生一些交易数据,当时为了便于后续追溯交易订单的来源和状态,在交易中心服务中做了事件溯源功能,利用spring的事件监听功能做了异步事件溯源,将业务代码和事件存储逻辑解耦。同事在编码注册监听器的时候使用了@TransactionalEventListener注解。测试在测试功能的时候发现某一类型事件没有保存到事件溯源的mongoDB中,由于事件溯源功能已经上线快两年了。从现网mongoDB中查询数据,发现此类型事件数据从2023年7月份就没有数据了。
2024-08-08 21:39:18
992
原创 $‘\r‘: 未找到命令
'\r': 未找到命令,这个异常在执行shell脚本的时候经常遇到,一般新手遇到这个问题就不知道咋回事了。我们一般开发环境都是windows环境,在windows上编写的shell脚本里面如果存在换行符\r。如果我们直接在linux服务器上执行windows上编辑的shell脚本就会报前面的异常,那么我们可以将Windows格式的sh文件转换为Unix格式。
2024-07-27 16:53:14
647
Java+内存分析工具+MAT
2023-08-19
websocket实现聊天小demo
2023-05-12
aspose导出pdf乱码,配置字体库
2023-02-25
windows 2008 R2解决socket连接不释放补丁包
2019-01-17
aspose操作word文档,目录问题
2022-09-05
苹果退款接收latest_receipt_info数组里面的对象问题
2021-11-18
苹果商品内购,服务端提供接口订阅通知消息
2021-09-13
java.io.IOException: Premature EOF异常怎么解决
2020-09-17
jdk中的jre/lib/security目录下为啥要导入证书
2019-12-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人