- 博客(1534)
- 资源 (21)
- 收藏
- 关注
原创 浏览器访问管理服务器超时导致请求重试问题分析
背景管理后台上有个批量退款的功能,每次操作退两百笔退款订单,大概会执行4分钟的时间。发现相同的参数和请求路径,每隔两分钟进行重试,总共重试了四次,不像是人为的原因。分析1、谷歌浏览器超过2分钟没有收到服务方的请求,就会进行断开连接。这时就猜测考虑是不是业务处理逻辑太久了,导致浏览器长时间没有接受到后台的返回结果,自动重复提交了记录。3、之前是在管理项目上出现的问题,利用arthas注入程序执行时睡眠10分钟的代码,复现了。重新发起请求原因HTTP/1.1 的一处规范 :If a
2022-04-11 18:35:30
9444
2
原创 周期性的显示调用full gc
目录背景排查cxf问题解决方案背景服务gc日志每十小时执行一次full gc,如下:2022-03-30T05:04:36.659+0800: 1188030.244: [Full GC (System.gc()) 2022-03-30T05:04:36.659+0800: 1188030.244: [CMS: 262271K->253610K(917504K), 0.6862360 secs] 298618K->253610K(1035520K), [Me
2022-03-30 22:24:37
1174
原创 排查显示调用System.gc()方法的调用栈
背景项目里查看gc日志发现是由于显式调用了System.gc()导致的full gc, 需要排查该方法的调用栈。Arthas的下载与使用可以看之前写的文档:利用Arthas进行简单的故障注入_韩师学子--小倪的博客-CSDN博客执行第一步,由于java.lang.System是JDK自带的类,Arthas默认关闭了对JDK类的自带类的增强,需要通过options命令打开options unsafe true第二步,使用stack命令,观察谁调用了java.lang.Syst.
2022-03-29 23:55:40
1119
原创 故障演练--使用 ChaosBlade 进行混沌实验
一、ChaosBlade 简介ChaosBlade 是阿里开源的混沌工程品牌,包含 chaosblade 工具和 chaosblade-box 平台等项目。ChaosBlade 按照混沌工程的思想,将故障抽象成了一个个实验,并按照科学实验的方法对其过程进行组织。chaosblade 工具支持了大量的故障场景和丰富的命令参数,能够很方便地对常见故障场景进行实验。二、部分 JVM 实验介绍相比于 CPU 使用率飙升等基础设施相关故障导致的系统不稳定,我们的关注点目前更加集中在:系统所依赖的两方或三方
2021-12-04 14:41:31
5620
3
原创 Jmeter压测
目录一、Jmeter基本使用二、请求报文的数据来源三、请求报文构造固定值取值方式动态值取值方式签名取值方式四、分布式压测Master配置Slave配置 五、Q&A一、Jmeter基本使用这里不做详细介绍,可参考:Jmeter官网(Apache JMeter - User's Manual: Getting Started)Jmeter 入门教程(https://www.jianshu.com/p/6bc152ca6126)使...
2021-12-04 12:15:06
1176
原创 redisClient的soTimeout偶尔不生效分析
目录背景源码分析参考背景为了方便观察redis的调用情况,接入了redis通用访问组件。项目redis设置socketTimeout时间为200ms,配置最大重试次数为1次。发现项目在调用redis时,有一些单个set语句会达到1s以上的耗时,然后也能拿到执行命令的结果。而根据参数配置,即便再重试一次,也最多400ms就超时了。以下是11月25日api中的两个耗时日志:RedisClusterClientProxy.printRunCommandTimeoutLog:87 re
2021-11-28 12:49:18
1792
原创 基于Redis实现延时消息队列
基本实现相关接口import java.util.Optional;public interface IQueue<E> { boolean add(E item); Optional<E> get(); Optional<E> get(int timeout); long size();}抽象类import com.google.gson.Gson;import org.apache.co...
2021-11-06 15:48:23
1451
原创 Redis分布式锁实现
目录一、高效分布式锁二、Redis分布式锁的缺点三、使用Jedis set命令以及Lua脚本方式实现分布式锁四、使用Redisson+RLock实现分布式锁 锁互斥机制watch dog自动延期机制可重入加锁机制锁释放机制相关实现 优缺点五、参考一、高效分布式锁1、互斥在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。2、防止死锁在分布式高并发的条件下,比如有个线程获得...
2021-11-06 12:21:35
2034
原创 Maven的 settings.xml 解析
settings.xml介绍 从settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。 并且,settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。 settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。settings.xml文件一般存在于两个位置: (1)全局配置: ${M2_HOME}/conf/settings.xml; (2)用户配置: user.hom...
2021-10-01 12:15:01
1108
原创 MySQL 5.7 虚拟列 (virtual columns)
Generated Column在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column。前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将Generated Column持久化到磁盘上,而不是每次读取的时候计算所得。Stored类型的generated columns可以用作一个物化缓存,用于复杂的条件,这些条件在运行时计算成本
2021-09-05 17:57:08
3004
原创 Mysql的新特性--MRR
MRR的全称是Multi-Range Read Optimization,是优化器将随机IO转化为顺序IO以降低查询过程中IO开销的一种手段。MRR原理执行一个范围查询:mysql > explain select * from stu where age between 10 and 20;+----+-------------+-------+-------+------+---------+------+------+-------------------...
2021-05-31 00:27:07
1361
原创 debug mysql源码 --搭建环境
操作系统:windows10, 期间搭建时出现太多问题,很恶心。准备软件visual studio2015: 下载bison:下载,配置好环境变量,将安装的地址和bin路径配置到Path里去mysql5.7.25:下载,选择好版本,选中source codecmake: 下载配置windows SDK8.1visual studio 2015 安装部署后,记得配置好windows SDK8.1,不然cmake编译时会报错。不会配置的,可以选择新建一个c++项目,软件会自动提示是...
2021-03-21 13:52:33
535
原创 利用Arthas进行简单的故障注入
目录一、概念二、整体逻辑三、相关文档四、故障注入实践一、概念Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。二、整体逻辑Arthas的整体逻辑也是在 Java 的Instrumentation基础上来实现,所有在加载的类会通过Agent的加载, 通过addTransforme...
2021-03-17 19:13:22
2500
原创 Roaring64Bitmap实践
maven依赖<dependency> <groupId>org.roaringbitmap</groupId> <artifactId>RoaringBitmap</artifactId> <version>0.9.0</version></dependency>测试一:优化前后,读写文本期间,序列化与反序列化的耗时import o...
2021-01-24 11:10:01
4920
1
原创 MyBatis动态SQL(注解版)
@InsertProvider实现批量插入数据1.mySql 批量插入数据库语句格式:INSERT INTO[表名]([列名],[列名])VALUES([列值],[列值])),([列值],[列值])),([列值],[列值]));例如:INSERT INTOitems(name,city,price,number,picture)VALUES('耐克运动鞋','广州',500,1000,'003.jpg'),('耐克运动鞋2','广州2',500...
2020-12-10 20:08:38
8394
1
原创 Hikari 数据库连接池配置详解
Hikari 数据库连接池配置详解基本配置<!-- Hikari Datasource --> <bean id="dataSourceHikari" class="com.zaxxer.hikari.HikariDataSource" destroy-method="shutdown"> <property name="driverClassName" value="${jdbc.dr...
2020-10-18 11:07:48
4698
1
原创 数据库连接池
数据库连接池目录一、常用的数据库连接池二、基本配置 三、关键配置四、性能配置五、各个连接池的属性说明 1)DBCP 属性说明表2)C3P0 属性说明表3) DRUID 属性说明表一、常用的数据库连接池1)DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP。2)c3p0...
2020-10-07 10:57:04
1028
原创 MongoTemplate的实战
MongoTemplate的实战一、Mavn依赖: <!--spring data jars--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> </depe.
2020-08-08 11:06:12
3861
原创 WechatPay-API-v3接口规则
WechatPay-API-v3接口规则1、官方文档https://wechatpay-api.gitbook.io/wechatpay-api-v3/2、下面是Java 接入过程:第一步: 阅读微信支付分给的接口规则 说明: https://wechatpay-api.gitbook.io/wechatpay-api-v3/第二步: 微信支付API v3要用第三方CA的证书 所以涉及到 API证书升级新接入商户请参考什么是API证书?如何获取API证书?。已经接入并使用微信..
2020-06-20 15:22:21
8293
2
原创 Java 8 stream练习
Java 8 stream练习Mapmap 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数List<Integer> squaresList = numbers.stream(...
2020-04-12 21:44:07
748
原创 redis的应用场景
redis的应用场景目录1、充值订单超时队列2、缓存系统3、计数器4、消息队列系统5、Bitmap6、HyperLogLog7、list集合的使用8、hash的使用9、sunionstore1、充值订单超时队列创建充值订单时,将订单号chargeOrderId、账号信息id、超时开始时间timeou...
2020-03-03 21:02:49
936
原创 Redis缓存雪崩、穿透、击穿、降级、预热、更新和限流
Redis缓存雪崩、穿透、击穿、降级、预热、更新和限流目录关键词解释缓存雪崩缓存穿透缓存击穿缓存降级缓存预热缓存更新限流关键词解释缓存:将数据库的数据也在内存存入一份,使请求可以直接访问内存,无法再次访问数据库。降级:就是在高并发高负载情况下,选择动态的关闭一下不重要的服务,拒绝访问等,来为重要的服务节省资源,比如电商平台秒杀当天可关闭推荐等...
2020-01-21 15:45:36
1566
原创 Java性能调优七种武器
Java性能调优七种武器目录JDK命令行Eclipse Memory AnalyzerJMX - Jconsole, VisualVMBtraceFlight Recorder Java Mission ControlJProfiler火焰图线上服务有时候我们会碰到下面这些问题: OutOfMemoryError,...
2019-12-16 20:54:36
791
1
原创 海量数据处理(Set、BitMap、HyperLogLog、BloomFilter)
海量数据处理(Set、BitMap、HyperLogLog、BloomFilter)目录SetBitMap(由bitSet来实现的)HyperLogLogBlommFilter综上所述海量数据处理:基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。那解决办法呢?针对...
2019-04-20 22:24:49
2037
原创 IP地址,子网掩码、默认网关,DNS的设置和工作原理(总结)
IP地址,子网掩码、默认网关,DNS的设置和工作原理(总结)转载:https://blog.csdn.net/kingshown_WZ/article/details/46423771概念:1. 概述 IP地址:人们在Internet上为了区分数以亿计的主机而给每台主机分配的一个专门的地址,通过IP地址就可以访问到每台主机。...
2018-09-19 09:34:01
52141
8
原创 容器优雅关闭从入门到精通:SIGTERM信号处理完全指南
性能监控与调优策略在生产环境中,持续监控系统性能是保障稳定性的关键。推荐使用 Prometheus 配合 Grafana 构建可视化监控面板,重点关注 API 响应延迟、GC 暂停时间及内存分配速率。定期分析 pprof 性能数据,定位热点函数设置告警规则,如 P99 延迟超过 200ms 触发通知使用 tracing 工具(如 OpenTelemetry)追踪请求链路配置管理最佳实践// 使用 koanf 加载环境变量和配置文件错误处理与日志规范。
2026-02-01 13:11:29
845
原创 SpringBoot 优雅停服
当外部流量请求到服务端接口执行业务逻辑的时候,若服务端此时执行关机 (kill),spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。
2026-02-01 12:11:25
1031
1
原创 JVM SafePoint
后台服务部署到容器后,平台会对后台服务进行探测,但连续多次探测超时不通过时,会触发服务重启。应用出现GC请求,但所有线程迟迟不到齐,导致系统卡顿。这里解释一下,当需要GC时候,虚拟机会首先设置一个标志,然后等待所有线程进入Safepoint,但是不同线程进入Safepoint的时间点不一样,先进入Safepoint的线程需要等待其他线程全部进入Safepoint, 才会触发GC。
2026-01-16 19:59:33
756
原创 fastjson与gson的toString差异
这边进行对接外部渠道时,需要对json串进行加签,但是验签一直出错。原因是渠道用了fastjson来处理,我们系统用gson来处理。如果传入的 map 是 fastjson 的 JSONObject,就取出它内部真正的 Map,避免重复排序或丢失特性。是 fastjson 里专门负责“把任何 Map/JSONObject 写成 JSON 字符串”的。是 fastjson 提供的一个自定义。(顺序、过滤、值序列化、空值处理等)。fastjson的maven依赖。,后面迭代顺序即字典序。
2026-01-13 14:04:07
148
原创 tomcat9+的 Cookie 处理器遵循 RFC 6265 标准后的问题
Tomcat 9 把「默认 Cookie 处理器」换成了。默认 false → 出现。设成 true → 上面字符。全部落地成代码校验,
2025-11-26 22:41:17
521
原创 http status 400 bad request
http 请求,路径参数没有进行urlEncoded,出现报错。先把 0-127 号 ASCII 字符全部扫一遍。严格遵循RFC 7230和RFC 3986规范。更注重兼容性而非严格遵循RFC规范。|{}[]"\都属于特殊字符串。对URL字符的检查相对宽松。更注重安全性和标准符合性。HTTP 请求行解析入口。默认允许更多特殊字符。对特殊字符有严格限制。
2025-11-23 13:42:21
624
原创 http请求 header 头小写转化问题
2、如果客户端用 HTTP1.1 进行请求myService服务,nginx 不会动请求头的key, 原封转发给 myService服务,myService服务对应的tomcat容器,tomcat 也会自动转化为小写字母。如果允许 Content-Type / content-type / CONTENT-TYPE 三种写法,字典就要存三份,压缩率骤降,实现也复杂。HTTP/2 把所有头部字段名强制改成小写,并不是为了“更规范”,而是为了配合新引入的“头部压缩”机制(HPACK)。返回的永远是小写形式。
2025-11-23 12:03:35
880
原创 tcpdump + Wireshark:抓取nginx转发到服务的流量
功能与 Wireshark 等价,但;适合服务器、嵌入式、脚本化场景。它直接把网卡收到的拷贝到用户空间,可实时显示、过滤、保存成 pcap 文件,再供 Wireshark 离线分析。
2025-11-23 11:31:35
1101
原创 Java匹配特殊字符,并进行删除
Emoji表情是一种视觉符号,用于在数字通信中表达情感、想法或概念。Unicode字符:Emoji表情是基于Unicode标准创建的。Unicode是一个国际标准,用于为世界上几乎所有的字符和符号提供一个唯一的数字标识。代理对:对于需要超过16位编码的复杂Emoji,如一些动物、旗帜或特殊符号,它们会使用代理对来表示。代理对由一对16位的Unicode字符组成,一个高代理和一个低代理,共同表示一个32位的Unicode字符。复合字符:许多Emoji表情由多个Unicode字符组成,包括基本字符和变音符号。
2025-11-20 22:12:07
1050
原创 OceanBase 内存数据转储、合并说明
携程在春晚活动前关掉轮转合并,结果 3 个 Zone 并发合并,CPU 打到 90%,MySQL 业务 QPS 跌 30%,rt 涨 3 倍;后来把 enable_merge_by_turn 打开,并调低 compaction_low_thread_score=3,rt 回落到 1.2 倍[11]。:把 Mini/Mini+Minor+Major SSTable 做全局归并,生成全新的 Major SSTable,并清理删除/过期数据,资源消耗大,默认每日 02:00 一次,也可手动/自动触发。
2025-11-16 14:28:36
912
原创 OceanBase 写入限速源码解读
OceanBase 中的写入限速机制旨在控制系统中写入操作(一般写入操作包括插入、更新和删除等)的速率,目的是为了提高数据库系统的稳定性。本文主要通过以下 2 个参数来解释写入限速的实现机制。writing_throttling_trigger_percentage:设置写入速度的阈值百分比。当内存使用达到该阈值时,触发写入限速机制。默认值为 60,取值范围为 1 到 100(100 表示关闭写入限速)。
2025-11-16 14:10:36
918
原创 OceanBase 慢查询排查思路
本文汇总了项目实践中前辈的经验和笔者的理解,旨在帮助初学 OceanBase(以下简称 OB)的工程师,快速解决 SQL 执行缓慢等性能问题。当遇到性能问题时,很多工程师可能会感到无从下手,本文将根据关键日志提供多种分析方向,以加速问题排查。
2025-11-16 14:08:49
969
原创 OceanBase 常见异情况汇总
ANSI 和 ISO/IEC 基于 SQL 标准定义了,隔离级别 根据定义。一个事务曾经读到的某行数据,第一次查询c2的结果为1,再次查询由于其他事务修改了c2的值,因此c2的结果为2。只读,再次。
2025-11-16 12:47:02
1233
TXT全本小说下载工具V5.0绿色版
2021-04-28
尚硅谷SpringBoot视频教程(上)核心技术篇,(下)整合篇
2018-06-23
例年软件设计师考试真题解析(已经考过了)
2018-01-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅