一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程

问题前一段时间,线上服务器的 FullGC 非常频繁,平均一天40多次,而且隔几天就有服务器自动重启了,这表明服务器的状态已经非常不正常了,得到这么好的机会,当然要主动请求进行调优了。首先服务器的配置非常一般(2核4G),总共4台服务器集群。每台服务器的 FullGC 次数和时间基本差不多。其中 JVM 几个核心的启动参数为:

SpringBoot实现 License 认证(只校验有效期)

使用开源的证书管理引擎TrueLicense 生成密钥对,使用Keytool生成公私钥证书库 授权者保留私钥,使用私钥和使用日期生成证书license 公钥与生成的证书给使用者(放在验证的代码中使用),验证证书license是否在有效期内

Java循环:for、foreach与stream性能对比

性能比较如果数据在1万以内的话,for循环效率高于foreach和stream;如果数据量在10万的时候,stream效率最高,其次是foreach,最后是for。 另外需要注意的是如果数据达到100万的话,parallelStream异步并行处理效率最高,高于foreach和for。 在效率方面,stream().forEach、forEach 和 parallelStream...

SpringBoot如何实现缓存预热

缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。 在 Spring Boot 启动之后,可以通过以下手段实现缓存预热: 使用启动监听事件实现缓存预热。 使用 @PostConstruct 注解实现缓存预热。 使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。 通过实现 InitializingBean 接口,并重写 afterPropertiesSet...

Java中“100=100”为true,而"1000=1000"为false?

1. 自动装箱与缓存机制在 Java 中,整数值在 -128 到 127 之间时,Integer 类会缓存这些值。即在这个范围内的整数会共享同一个对象实例。因此,当两个整数在该范围内进行比较时(如 100 == 100),返回的是 true,因为它们指向的是相同的缓存对象。

并发环境下数据库和缓存操作问题

...

大事务优化

1、事务里面不要进行远程RPC调用首先事务里面进行远程的接口调用,如果不采用分布式事务框架,本身就会存在事务不一致的情况,无法进行数据的回滚操作,并发情况下远程服务响应不及时,会出现接口返回不一致问题,当然必须采用异步调用

Spring中事务失效的8中场景

1. 数据库引擎不支持事务2.没有被 Spring 管理

微服务开发时,接口不能对外暴

一. 网关+白名单此方案需要在缓存中维护一套接口白名单,请求到达网关处,先判断白名单缓存中是否存在,存在则放行,反之则拦截。该方案的好处是,对业务代码零侵入,只需要维护好白名单列表即可; 不足之处在于,白名单的维护是一个持续性投入的工作,在很多公司,业务开发无法直接触及到...

Spring File Storag简单使用

1234567