一次线上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