JVM 调优案例分析 现象:系统日常运行正常突然发生fullgc甚至内存溢出,重启后恢复正常但是过了几天又会突然发生频繁fullgc触发告警,告警信息如下:首先发生fullgc,我们需要定位fullgc发生在jvm哪个区域?我们可以通过cat也可以通过gc日志查询发生的区域,目前有两种方式可以快速定位到gc区域:1、Cat的Problem中可以直接查询error的详细信息(时间比较久了找不到对应的cat截图了)2、通过gclog查询(大部分系统没有添加gc日志打印),常见配置如下。...
JVM参数调优推荐 学习开源项目的启动脚本是个不错的主意,比如ElasticSearch家的,Cassandra家的。VJTools的 jvm-options.sh,伸手党们最爱,根据自己需要稍微定制一下就行,详见 http://github.com/vipshop/vjtools。《JVM调优的"标准参数"的各种陷阱》 ,R大的文章,在JDK6时写的,期待更新。当你在网上兴冲冲找到一个可优化的参数时,先打印看看,它可能已经默认打开了,再找到一个,还是默认打开了…...
Guava中这些Map的骚操作,让我的代码量减少了50% https://mp.weixin.qq.com/s/4XegAIdixcAywHF9-XDZzwGuava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。今天Hydra要给大家分享的就是Guava中封装的一些关于Map的骚操作,在使用了这些功能后,不得不说一句真香。先引入依赖坐标,然后开始我们的正式体验吧~...
记一次API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析 API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析背景我有一个服务 A ,写了一个接口定义如下:@RequestMapping({"/config/coupon"})public interface CouponOperateTaskService { @PostMapping({"/list"}) @ApiOperation("优惠券操作任务列表") BizPageResponse<CouponOperateListRespo
@FeignClient 上传文件时报错 解决方案 Feign 作为 Spring Cloud 中 RPC 工具,利用注解来描述接口,简化了 Java HTTP Client 的调用过程。但是在文件上传时,我们需要做一些额外的配置,不然会调用异常。背景我有一个服务 A,里面有个接口,需要接受上传的文件和一些参数, @PostMapping({"/validityPeriod/update"}) BizResponse proofValidityPeriodUpdate(@Validated ValidityPeriodUpdateRequest
Redis大key 问题 Redis大key 问题背景双十一大促期间, 收到客服反馈通知,说 APP 领券接口缓慢。找到一个case,通过调用链路发现,是操作redis 缓慢,并且还搜到一些redis 异常。最后定位到原因:是发券场景下拿redis 做了一个缓存券批次的操作,记录用户当天领取的所有券批次发券场景: key = userId, value = 券批次ID 列表, 而redis 查询发现多了许多大key,体现在 一个用户领取的几千甚至上万张优惠券,导致Redis 查询缓慢,甚至异常。至于为何有的用户会领取这么多优
Code Review 指南 Code Review 指南PPT: https://www.yuque.com/itguang/mweb/code-review-zhi-nan文章目录Code Review 指南前言CR 是什么?为什么要做 Code Review ?CR 的标准进行 CR 的一些原则CR 中需要关注什么?关注代码规范代码坏味道Duplicated Code (重复代码)Long Method (长函数)Large Class (过大的类)Long Parameter List (过长参数列)降低圈复杂度关注性能问题
Spring Boot 的 @Value 注解用法详解 一、前言在日常开发中,经常会遇到需要在配置文件中,存储 List 或是 Map 这种类型的数据。Spring 原生是支持这种数据类型的,以配置 List 类型为例,对于 .yaml 文件配置如下:test: list: - aaa - bbb - ccc对于 .properties 文件配置如下所示:test.list[0]=aaatest.list[1]=bbbtest.list[2]=ccc当我们想要在程序中使用时候,想当然的使用 @Value 注解去读取这
由 CPU Load 过高告警引发的对 线程数和 CPU 的思考 线程池 数设置你真的会吗?可能很多人都看到过一个线程数设置的理论:CPU 密集型的程序 - 核心数 + 1I/O 密集型的程序 - 核心数 * 2这个理论看起来很合理,但实际操作起来,总是不仅如此人意。下面,我们就来看一下 线程数, CPU 的关心先说一个基本的理论,大家应该都知道:一个CPU核心,单位时间内只能执行一个线程的指令那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。下面我们用一段程序来测试下 CPU 和线程数 之间的关系。CPU 利用率测试测
Brew换源 Brew换源简介Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 和 linux 系统上的软件安装过程。它拥有安装、卸载、更新、查看、搜索等很多实用的功能,通过简单的一条指令,就可以实现包管理,十分方便快捷。Homebrew 主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。名称 说明brew Homebrew 源代码仓库homebrew-core Homebrew 核心软件仓库homebr
Jmeter 压测接口编写指北 电商领域中, 每到各种活动, 什么 618, 双十一, 双十二, 各种优惠活动就纷至沓来, 对营销工具是一个巨大的挑战, 因此, 营销相关系统的压测是保障系统稳定运行,应对突发流量的必要手段.优惠券系统作为营销工具中的一种大杀器, 其稳定性保障必不可少.下面主要介绍我负责的优惠券系统在应对双十一突发流量的压测过程:1. 压测前准备下载 压测工具: Jmeter提前统计好每个要压测接口的数据: 日常QPS, 99线, 双十一预估QPS压测线程数计算: 1000/接口99线 x 线程数 = 目标Q
使用CompletableFuture优化你的代码执行效率 使用CompletableFuture优化你的代码执行效率这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例.在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值,这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下:public static void main(String[] args) throws Exception {
Spring Security 与 SSO 整合思路 因为HIS登录认证采用了 Spring Security , 因此, 要想理解目前的HIS登录流程,需要对 Spring Security 有一定了解,才能在其基础上添加新功能和额外扩展。Spring Security 登录流程解析:一句话来总结Spring Security 的认证流程就是: 验证信息 (Authentication) 在 过滤器链中传播认证的过程。Spring Security 的核心组件易于理解,其基本校验流程是: 验证信息(Authentication)传递过来,验证
消息中间件的四种投递模式对比 消息中间件的四种投递模式对比https://cloud.tencent.com/developer/article/1540042消息中间件( Message Oriented Middleware,简称MOM)在企业开发中变得越来越重要。本文介绍消息中间件中的四种消息投递模型,主要是介绍模型的核心特性,以及不同模型之前的区别。这四种模型分别是:PTP模型Pub/Sub模型Partition模型Transfer模型其中PTP模型和Pub/Sub模型在JMS规范中有定义,消息中间件Act
接口性能优化思路 接口性能优化思路背景HIS 这边有一个扫码取药的接口,涉及到整个就诊流程:预约–》签到–》开始就诊–》添加处方及药品–》确认处方–》确认账单–》创建交易及订单 --》付款 --》 结束就诊 --》 签退。整个流程业务非常复杂,涉及接口和远程服务也非常多,因此接口响应很慢,耗时很长。类似的涉及到整个就诊流程的操作还有很多,比如:核销,也是要走一遍上面的流程,只是在【诊中】的操作不同,可能是添加药品,也可能是添加检查,体检,诊次套餐之类。这类操作每个步骤都非常明确,常常以一个 Pipeline 的形式封
可靠消息一致性的 2 种解决方案 讲的可太棒了: https://cloud.tencent.com/developer/article/1430020"可靠消息最终一致性"是为了解决Producer端的消息发送与本地事务执行的原子性问题,是一种柔性事务,属于异步确保型,软状态,最终一致。**问题典型场景是:**本地往DB中插入一条记录,同时往MQ中发送一条消息,必须保证二者同时成功或者同时失败。由于DB和MQ是不同的系统,可能插入DB成功,但是发消息到MQ中失败;也可能插入DB失败,但是发送消息到MQ成功。如何保证二者的一致性,就.
使用 Lombok @Singular 注解需要注意的 BUG 先看下面一个 java 类, 这是在业务代码中的一段真实代码,做了部分简化。@Getter@Builder@NoArgsConstructorpublic class PatientQuery { @Singular private List<Long> patientIds = Lists.newArrayList();}首先我们先分析下上面这段代码存在的问题:**第一:**添加了 Lombok 的 @Builder 注解,但是 patientIds 属性有默认
Binlog 日志应用场景 Binlog 日志应用场景https://www.cnblogs.com/kingszelda/p/8362612.htmlhttps://cloud.tencent.com/developer/article/1444390什么是binlog?Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制。复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器(slave),以实现灾难恢复、水平扩展、统计分析、远程数据分发等
InheritableThreadLocal 的作用? 直接看总结:InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递。线程间传递实现原理:说到InheritableThreadLocal,还要从Thread类说起:public class Thread implements Runnable { ......(其他源码) /* * 当前线程的ThreadLocalMap,主要存储该线程自身的ThreadLocal */ T