自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入解析OOM问题与解决方案:一次实战排查经历

本文详细记录了公司服务因连续Full GC后自动重启的排查过程。关键词:Java服务、Full GC、自动重启、OOM、元空间溢出、内存泄漏、自定义MyBatis代理。通过深入分析系统监控日志、排查启动命令与配置,最终定位问题为元空间大小限制导致的OOM,并发现自定义MyBatis代理可能引发内存泄漏。文章提供了解决方案,并强调了后续版本优化的重要性。

2024-06-17 23:52:29 510

原创 网站核心接口监控方案

核心接口监控方案,日志方式实现

2024-06-03 14:43:24 285

原创 MyBatis通用Mapper:简化数据库操作的利器

代码生成:MBG能够自动生成与数据库表结构相匹配的Java POJO(Plain Old Java Object,简单的Java对象)、Mapper文件(DAO接口)以及XML映射文件。支持版本:它支持所有版本的MyBatis以及iBATIS 2.2.0及以后的版本。CRUD操作:MBG可以内省数据库表,并生成用于访问这些表的基础对象,从而简化了与数据库表进行交互时的对象和配置文件创建过程。它主要解决了简单的CRUD(创建、检索、更新、删除)操作。

2024-05-30 14:22:50 1043

原创 spring和springboot、springcloud版本关系

进入新公司,看底层框架代码时,想了解spring的版本,很好奇这些版本之间时怎么对应的,因为不同版本应该有依赖关系,用得不对可能代码会有隐藏问题。Spring、SpringBoot和SpringCloud的版本不一致,并且需要搭配合适的版本才能使用,主要是因为它们各自有不同的开发目标、功能定位和技术迭代速度。由于这三个框架各自有不同的开发目标和功能定位,因此它们的版本更新速度和内容也会有所不同。

2024-05-24 12:01:20 458

原创 服务高峰期gc,导致服务不可用

随着应用程序的复杂性和负载的不断增加,对JVM进行调优,也是保障系统稳定性的一个重要方向。需要注意,调优并非首选方案,一般来说解决性能问题还是要从应用程序本身入手(业务日志,慢请求等),只有在必要时才对jvm进行调优(gc日志和监控异常)。下面会提供一个线上案例,说明gc调优的重要性。

2024-05-20 17:26:13 1197

原创 系统数据加密方案

敏感数据加密方案

2024-05-19 22:40:23 935

原创 ERP系统如何支持复杂的查询功能

电商公司内部通常会有运营和客服人员角色,他们有自己的一套ERP系统,用于活动运营和客户运营,订单表和明细表如果超过千万级别,业务再叼专一点,我们写的sql通常就需要20s以上了。因为一开始公司使用的数据库sqlserver,所以一开始的性能还是可以接受的,不过等并发量逐渐增大到20以上,复杂的关联查询增多后,性能逐渐下降。问题:1、sqlserver在对数据进行写入的时候会获取X锁,会阻塞对该数据的读取,很容易出现事务超时或者死锁。

2024-05-19 11:48:19 894

原创 使用RestTemplate来进行远程调用

resttemplate 连接池自定义配置

2024-05-16 23:10:49 410

原创 在spring-cloud里面如何使用feign

微服务间如何进行远程调用

2024-05-16 21:53:49 248

原创 JDK的串行收集器介绍与优化指南-02

在Java中,对象的生命周期通常包括以下几个阶段,这些阶段与JVM的内存管理和垃圾收集机制密切相关。(1):当使用new关键字或其他方式(如反射、克隆、反序列化等)创建一个对象时,JVM首先会在堆内存中为其分配相应的存储空间。(2):在分配了内存空间后,JVM会调用对象的构造函数来初始化对象的实例变量。(3):从超类到子类,对静态成员变量进行初始化。这通常是在类加载时完成的,而不是在对象创建时。(4):首先递归调用超类的构造方法,对超类的成员变量进行初始化;

2024-05-13 22:15:40 1009

原创 JDK的串行收集器介绍与优化指南-01

这种机制可以确保在垃圾收集过程中,对象间的引用关系不会发生变化,从而简化了垃圾收集的过程。然而,由于“Stop The World”会导致应用程序的短暂停顿,因此在一些对响应时间要求较高的应用中,可能需要考虑使用其他类型的收集器。在垃圾收集时,串行收集器会将Eden区和From区中存活的对象复制到To区,然后清空Eden区和From区。这个算法分为两个阶段:首先是标记阶段,收集器从根对象(如静态变量、常量等)开始,递归地访问对象的所有引用,并标记所有存活的对象;在新生代中,串行收集器主要使用。

2024-05-13 21:48:24 806

原创 07_Z Garbage Collector (ZGC)

Z垃圾收集器(ZGC)是一种可扩展的低延迟垃圾收集器。ZGC可以在不超过一毫秒的情况下并发执行所有昂贵的工作,而不会停止应用程序线程的执行。它适用于需要低延迟的应用程序。暂停时间与正在使用的堆大小无关。ZGC适用于从几百兆字节到16TB的堆大小。ZGC被设计为自适应且需要最小的手动配置。在Java程序执行期间,ZGC通过调整代大小、扩展GC线程数量和调整老年对象阈值动态适应工作负载。主要调优参数是增加最大堆大小。ZGC有两个版本:新版分代版和传统非分代版。

2024-05-06 22:42:33 550

原创 08_其他因素

应用程序有时会使用 finalization 和弱引用、软引用或虚引用与垃圾收集进行交互。然而,不鼓励使用 finalization。它可能会导致安全、性能和可靠性问题。例如,依赖 finalization 来关闭文件描述符会使外部资源(描述符)依赖于垃圾收集的及时性,这可能会带来问题。从JDK 9开始,finalization已经被废弃。而且据JEP 421:Deprecate Finalization for Removal规划,在JDK 18中将会被删除。

2024-05-06 22:41:42 645

原创 06_G1调优配置

本章主要介绍,如果G1默认的一些配置无法满足你的需求,要如何进一步调优。

2024-05-05 17:56:06 1349 1

原创 05_G1垃圾收集器

垃圾优先垃圾收集器面向多处理器机器,适用于大内存场景。它尝试在无需太多配置的情况下实现垃圾收集暂停时间目标,并同时实现高吞吐量。堆大小高达数十 GB甚至更大,超过50% 的Java堆内存用于存储活动数据G1 在应用程序运行时同时执行部分工作,它会利用处理器资源来缩短收集暂停,这一点最为显著。这主要体现在应用程序运行时会有一个或多个垃圾回收线程处于活动状态。因此,与吞吐量收集器相比,尽管使用 G1 收集器时垃圾回收暂停通常要短得多,但应用程序的吞吐量也往往稍微降低。

2024-05-05 17:27:44 846

原创 04_jvm性能调优_并行收集器介绍

并行收集器(此处也称为吞吐量收集器)是类似于串行收集器的分代收集器。串行和并行收集器之间的主要区别在于并行收集器具有多个线程,用于加速垃圾回收过程。通过命令行选项-XX:+UseParallelGC 可启用并行收集器。默认情况下,使用此选项,较小和较大的垃圾回收都会并行运行,以进一步减少垃圾回收开销。

2024-05-01 20:55:25 1090

原创 常用的垃圾收集器介绍

到目前为止讨论的是串行收集器。Java HotSpot虚拟机包括三种不同类型的收集器,每种都具有不同的性能特征。

2024-05-01 10:21:54 235

原创 03_jvm性能调优_影响垃圾收集性能的一些选项

影响垃圾回收性能的两个最重要因素是总可用内存和分配给年轻代的堆内存比例。

2024-04-30 22:47:35 781 2

原创 02_jvm性能调优_垃圾收集器的实现

Java SE 平台的一个优势是,它使开发人员免去了内存分配和垃圾收集的复杂性。然而,当垃圾收集成为主要的瓶颈时,了解实现的一些方面是很有用的。垃圾收集器对应用程序使用对象的方式做出假设,这些假设反映在可调参数中,这些参数可以在不牺牲抽象能力的情况下进行调整以提高性能。

2024-04-30 21:55:05 518 1

原创 01_JVM性能调优_调优介绍

垃圾收集器(GC)会自动管理应用程序的动态内存分配请求。

2024-04-22 23:34:03 1015

原创 JVM性能调优-开篇

在实际生产环境运行过程中,我们时不时会遇到,服务假死、接口无响应等服务器问题。这时我们通过grafana平台,可以看到cpu或者内存不断告警,是接口并发数过多,还是应用系统出现bug?我们没有那么多时间一一排查,这时我们唯一能做的就是赶紧重启让服务恢复正常。但回过头来,我们也会想,为什么突然会有这个问题,如果以后再发现我们要怎么排查呢?

2024-04-21 23:54:50 737 1

原创 接口认证的方案

**区别**:OpenID Connect不仅提供了OAuth 2.0的授权框架,还加入了用户身份信息(ID Token)的标准化,适用于现代移动和单页面应用的用户身份认证。- **区别**:JWT是无状态的,服务器不需要存储会话信息,非常适合分布式微服务架构。- **区别**:与会话认证不同,Token认证不需要服务器维持会话状态,更适合分布式系统和单页面应用(SPA)。- **区别**:OAuth提供了更细粒度的控制,允许第三方应用访问特定的资源,适用于API安全和第三方应用集成。

2024-04-08 23:49:40 591

原创 有的接口不需要认证,有的接口需要授权?

过滤器有很多,有时候,执行的顺序可能会影响你的功能,所以我们可以通过打印过滤器的顺序,来看下我们所处的位置。或者通过org.springframework.security.config.annotation.web.builders.FilterOrderRegistration 类来看所有过滤器的顺序。首先,Spring Security 对 Servlet 的支持是基于Servlet过滤器的,所以我们肯定要通过过滤器的改写来实现这个功能,下图是secuityFilterChain 所在的位置。

2024-03-18 22:50:09 417 1

原创 spring security 自定义认证

当用户提交凭据时接下来,身份验证被传递到 AuthenticationManager 以进行身份验证如果身份验证失败,则为“失败”如果身份验证成功,则为“成功”。如下我们只需要实现 UserDetailsService 接口,spring就会自动注入我们的认证方法(可以引入其他存储中间件做替换)@Service@Autowired@Override// 模拟jdbc获取用户信息// 设置登录角色。

2024-03-02 18:19:15 868 1

原创 spring-security

Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。像所有Spring项目一样,Spring Security的真正强大之处在于它可以轻松扩展以满足定制需求的能力。Spring Security是Spring采用 `AOP`思想,基于 `servlet过滤器`实现的安全框架。它提供了完善的认证机制和方法级的授权功能。Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的事实上的标准。

2024-02-25 19:15:11 1234 2

原创 web网站的安全控制

加密机制:加密是保护数据在传输和存储过程中安全性的核心技术。通过对数据进行加密,可以确保只有拥有解密密钥的授权用户可以访问和读取数据。常见的加密算法包括对称加密(如AES)和非对称加密(如RSA)。数字签名机制:数字签名用于验证数据的完整性和来源。通过使用私钥对数据进行签名,接收方可以使用公钥验证签名的有效性,从而确保数据在传输过程中没有被篡改,并且确实来自声称的发送方。身份认证机制:身份认证是确认用户或实体身份的过程。

2024-02-25 18:37:14 1070

原创 Pulsar的存储计算分离设计:全新的消息队列设计思路

由于技术的不断迭代和发展,现在很多企业的服务都上云了,很多基础服务也都由几个云服务大厂来提供。随着移动用户越来越多,每天产生的数据量也成指数级增加,这给计算和存储分离提供了很大的基础条件。对于计算节点的开发者来说,可以专注于计算业务逻辑开发,而不需要关注像数据一致性、数据可靠性、故障恢复和数据读写性能等等这些比较麻烦的存储问题,极大地降低了开发难度,提升了开发效率。而对于存储系统来说,它需要实现的功能就很简单,系统的开发者只需要专注于解决一件事就可以了,那就是“如何安全高效地存储数据?

2023-03-18 23:18:47 238

原创 MQTT协议:如何支持海量的在线IoT设备?

MQTT 就是专门为物联网设备设计的一套标准的消息队列通信协议。使用 MQTT 协议的 IoT 设备,可以连接到任何支持 MQTT 协议的消息队列上,进行通信。虽然 MQTT 和普通的消息队列相比,在消息模型、功能和网络结构上都是差不多的,但由于他们面对的使用场景是不一样的,所以,MQTT 和普通的消息队列相比,还是有很多区别的。我们看一下 MQTT 的使用场景有什么样的特点?

2023-03-18 22:56:05 1424

原创 Kafka的协调服务ZooKeeper

zk功能很多,但作为分布式服务的核心功能,我们希望它保持高可用,所以再使用的时候最有效的方法就是,仅让它做一件事情,而且是可用被降级的事情。比如它作为一个分布式协调中心节点,那它只在brocker坏掉的时候起作用用于选举就好,那它本身的一些高可用问题就会得到很大概率的下降。至于分布式锁,元数据存储这些我们可用通过别的缓存技术如redis来实现。

2023-03-11 21:30:58 162

原创 RocketMQ客户端如何在集群中找到正确的节点?

客户端如何寻找brocker,nameserver挂了怎么办?

2023-03-11 11:43:31 177

原创 Kafka和RocketMQ的消息复制实现的差异点在哪?

业务上对高性能、高可用、高一致性(CAP)选择的不同,会形成一种截然不同的消息复制方案。rocketmq,更倾向于把所有消息写入同一个文件,这样不管是复制还是消费的时候都比较快速和简单,特点是同主从的方式来进行集群的搭建。kafka则是,把消息文件按topic来存储,这样的好处是更加易读,可配置性也更强。而且集群的搭建方式是通过副本来构建集群的。目前他们都是需要通过一个中间件来进行高可用的主节点选举,只不过一个rockemq用的是自己的namesr服务,kafka用的是zk。

2023-03-11 10:50:22 154

原创 RocketMQ Producer源码分析:消息生产的实现过程

生产者的一些核心概念,便于后续深入分析

2023-03-11 10:08:47 102

原创 消息队列是如何实现高性能IO

首先我们先要了解,一个高性能的IO它必须是能提供快速读写的能力。那要提供这个能力,我们需要解决什么问题?

2023-03-04 11:13:15 152

原创 消息队列基础篇

最近因为工作需要,重新温习了消息队列,打算从它的设计原理开始梳理,再深入到实现方案和源码,最后再结合实际案例分析该使用哪种消息队列。

2023-02-26 23:11:18 82

转载 消息队列kafka-概述

Apache Kafka是Apache软件基金会的开源的流处理平台,同时也是基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域应用。

2023-02-26 21:34:17 61

原创 java开发中的小技巧

1、当需要返回一个TR对象里的其中一个属性时,不需要重新写一个sql,只需按主键查询出该记录,然后返回对应的属性即可;

2013-12-09 11:41:45 441

空空如也

空空如也

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

TA关注的人

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