自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

祈雨v的博客

种一棵树最好的时间是十年前,其次是现在

  • 博客(217)
  • 资源 (20)

原创 博客迁移声明

博客迁移到:https://wakzz.cn当然CSDN还会作为备份不定时更新博客。

2020-04-11 12:53:04 63

原创 Linux常用性能监控命令

CPUuser(通常缩写为us),代表用户态CPU时间。不包括下面的nice时间,但包括了guest时间nice(通常缩写为ni),代表低优先级用户态CPU时间,也就是进程的nice值被调整为1-19之间时的CPU时间。nice可取值范围是-20 到19,数值越大,优先级反而越低system(通常缩写为 sys),代表内核态CPU时间idle(通常缩写为 id),代表空闲时间。它不包括等待I/O 的时间(iowait)iowait(通常缩写为 wa),代表等待I/O的CPU时间irq(通常缩写

2020-08-29 15:24:30 82

原创 golang低版本http2偶现400

描述项目组在对某个Golang应用进行压测时,在请求TPS较高的时间段,偶现发起HTTP请求外部系统错误,被请求的外部系统为Nginx代理的另一个Golang应用。查看Nginx日志时发现,Golang客户端请求报错时,Nginx日志显示该报错请求被返回400状态码,如下所示:将Nginx日志中压测期间所有返回400状态码的日志过滤出来,可见该错误稳定每几秒复现一两次,如下所示:问题定位起初认为是外部系统应用因为压测压力过大导致拒绝访问错误而返回的400状态码,但是经排查发现被调用的外部系统并

2020-08-29 15:22:46 23

原创 hostname in certificate didn‘t match

描述某服务商对接公司的在阿里云配置的API网关时,对方开发沟通说我们公司的HTTPS有问题,请求接口后报如下错误:javax.net.ssl.SSLException: hostname in certificate didn't match: <马赛克.com> != <*.alicloudapi.com> OR <*.alicloudapi.com> OR <alicloudapi.com>看到错误信息,第一反应是HTTPS证书有问题,所以HTTP

2020-07-25 16:38:49 229

原创 常见对称加密原理以及应用

加密算法所谓对称加密算法,通过密钥将明文加密成密文,并且再通过同一个密钥将密文解密成明文,相对于非对称加密算法速度快效率高,对于明文文本越长效率优势越大。常见的对称加密算法有AES、DES、3DES等,其中DES由于密钥长度低容易被暴力破解,因此安全性相对较低已经不推荐使用。而3DES则是DES的升级版,安全性有所提升,但依然不如AES,因此推荐安全性更高的AES加密算法。算法算法类型密钥长度分组长度安全性AES块密码算法128/192/256比特128比特安全

2020-07-25 16:36:03 114

原创 tcp_tw_recycle引起的TCP握手失败

背景测试环境的一台Nginx服务器,最近一直被前端同事吐槽网络有问题,经常出现访问HTTP请求时超时,哪怕是静态文件也经常超时。刚开始以为是公司网络抽风了,也就没放在心上,但持续了一个星期,而且复现率很高,这才反应过来应该不是网络的锅。于是在请求客户端与Nginx服务器上均作了抓包。本地客户端抓包结果如下图1,请求Nginx服务器TCP握手时超时。结果似乎很明朗,客户端TCP握手的SYN请求丢包导致多次重试,直到重试超时而TCP握手失败。看上去似乎就是网络问题,但这复现率也太高了,于是在服务器上也做了

2020-07-25 16:33:14 95

原创 记一次mysql执行DDL导致锁表

背景线上某数据库意外发现缺少索引,并且该表的数据量很少,只有几万条记录而已,因此很随意地尝试给该表添加索引。原本预期该表的记录很少,添加索引的耗时应该很短,结果却直接导致该表被锁,所有该表的增删改查操作全部阻塞,继而影响到了线上业务。发现锁表后,执行show processlist发现大量线程阻塞,状态显示Waiting for table metadata lock。通过命令终止了DDL线程,该表恢复正常。mysql从5.6版本起支持Online DDL,理论上执行DDL语句不会阻塞诸如INSERT、

2020-06-28 10:17:19 211

原创 mysql磁盘占用查看

磁盘占用分析在没有权限查看mysql所在磁盘时,当监控发现磁盘空间不足时,如何通过mysql的命令查看当前mysql实例的磁盘占用情况。binlogmysql默认不清理binlog日志,当运行一段时间后可能会累计大量的binlog文件。通过如下命令查看当前binlog占用情况,文件大小单位为字节:mysql> show binary logs;+------------------+-----------+| Log_name | File_size |+-------

2020-06-28 10:15:16 279

原创 mysql对text字段update致磁盘增长

描述公司有一张表占用的磁盘空间很大,占用磁盘的主要是该表的一个text类型字段。于是我们打算通过洗数据的方式,先将该表的text值更新成一个长度很短的值,预期更新完后该表的磁盘占用不会变,但是表的数据页会有大量的碎片空间,然后再通过例如命令OPTIMIZE TABLE来回收释放未使用的磁盘空间,最终实现减小该表的磁盘空间占用。但实际操作时,当我们将该表的text值的字段批量更新成更短的值时,通过监控发现该表的磁盘空间迅速增长,与我们预期不符。此时才意识到遇到了mysql的行溢出的场景。复现创建两个带

2020-06-28 10:13:47 99

原创 elasticsearch报错index read-only

背景线上服务器的Elasticsearch服务大量报错,查询数据没问题,但是新增或者修改数据时,返回如下错误:{ "error": { "root_cause": [ { "type": "cluster_block_exception", "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" } ], "type": "

2020-05-28 20:17:57 212

原创 TIME_WAIT与Http的Keep-Alive

背景虽然上一次服务器TIME_WAIT连接过多导致报警后,解决方案初步拟定,但是还有一个疑问:线上的服务器架构是前端 -> nginx -> server的模式,但是nginx服务器并没有触发报警,仅仅后端server服务器触发了报警。况且是一台nginx服务器负载均衡了多台server服务器,当时每台server服务器均触发了6000的连接数阈值,但nginx上仅仅有三千多的连接数。查看连接数命令如下:[nginx@hd2-cil-rs-nginx-01 ~]$ netstat -n |

2020-05-28 20:16:56 99

原创 记一次TIME_WAIT导致连接数报警

背景公司监控报警,提示线上服务器的TCP连接数超过警告阈值。报警的几个机器原先的业务量请求量并不大,所以预设的报警阈值并不高只有6000,突然报警有点措手不及,于是先登录服务器把当前的所有连接情况打印下来统计分析。[webapp@hd2-cil-rs-app-02 ~]$ netstat -natp > tmp[webapp@hd2-cil-rs-app-02 ~]$ wc -l tmp5410 tmp原因分析TCP连接数量暴涨,初步怀疑如下:某应用的数据库连接泄漏,使用后数据库连

2020-05-28 20:14:07 2688

原创 记一次生产事故OOM问题排查

背景线上应用需要进行一个涉及600W数据的操作,之前我们应用从来没有一次性应对这么大量的数据,最多就一次数十万而已。结果,这次600W的数据操作引起了生产事故,直接导致应用不可用长达半小时之久。OOM晚上九点半,监控告警提示线上应用宕机。紧急排查发现应用的的进程已经不在了,怀疑是因为内存占用过多导致被操作系统杀进程了。接着查看操作系统日志,如下,果然发现是因为内存占用高达8G而被系统直接杀进程。[webapp@hd2-cil-rs-app-01 ~]$ dmesg...[38617319.5

2020-05-28 20:11:25 146

原创 redis分布式锁RedissonLock的实现细节

简单使用String key = "key-lock";RLock lock = redisson.getLock(key);lock.lock();try { // TODO} catch (Exception e){ log.error(e.getMessage(), e);} finally { lock.unlock();}String key =...

2020-04-27 16:48:39 504

原创 webservice复杂加密签名(2)java调用

依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-ws</artifactId> <version>1.4.7.RELEASE</version></...

2020-04-20 21:47:41 93

原创 webservice复杂加密签名(1)SoapUI

概述WebService本来以为很简单,直到我遇到了万事达的一个对接项目,万事达提供的网关接口是WebService协议,而报文涉及到了WebService的加密,复杂到令人怀疑人生。例如下方两个XML报文,第一个XML报文是加密前的明文报文,而第二个XML报文则是加密签名后的报文。<soapenv:Envelope xmlns:soapenv="http://schemas.xmlso...

2020-04-07 21:05:36 343

原创 利用中间人拦截实现APP内H5窜改

背景公司与某银行合作,由我公司开发一个H5页面嵌入到该银行的官方APP中,业务场景为用户在H5中定位获取附近商户门店,然后用户在H5上领优惠券然后去线下门店核销优惠券。当我们开发进度过半时,尽管一催再催,银行方面却一直迟迟未将测试环境APP提供给我们。由于担心如果银行方面在临近交付时才提供测试环境APP,会影响到H5在APP中的兼容性测试,于是我提出了使用该银行生产环境的APP来做兼容性测试。...

2020-04-06 20:43:16 334

原创 mysql延时关联

描述mysql有种sql优化方式,叫延时关联,即通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据,尤其在大分页查询的场景下,可以提高查询效率。例如下面两行SQL查询语句,在使用覆盖索引的大分页查询场景下,第二条的执行速度要远远快于第一条SQL。select * from table where xxx limit a,b;select * from table wher...

2020-04-04 20:49:34 97

原创 MySQL表字符集不同导致关联查询索引失效

概述mysql在多表之间做关联查询时,需要注意各个表的字符集是否一致。如果在字符集不一致的场景下做关联查询,会出现关联字段即使有索引,但却索引失效的问题。复现建表语句,创建两个字符集不同的表,如下:CREATE TABLE `school` ( `id` int(11) NOT NULL AUTO_INCREMENT, `school_code` varchar(255) DEFA...

2020-03-19 15:21:55 209

原创 通过SSH隧道远程办公

原理SSH不仅可以用于远程主机登录,还可以作为代理转发,也就是SSH隧道。具体场景如下图,客户端可以SSH登录到外网服务器,外网服务器与内网服务器可以网络连接,但客户端与内网服务器无法网络连接。此时就可以通过SSH隧道,将客户端的请求通过外网服务器代理转发到内网服务器,再将请求返回给客户端,实现客户端与内网服务器的网络交互。操作1、建立SSH隧道建立SSH隧道可以通过XShell或者直...

2020-02-25 11:49:58 140

原创 数据落盘方案

应用对已存在的文件更新时需要写入数据,当数据写入过程中异常中断例如断电,则会出现数据只写入部分的情况。在这种异常场景下,在应用恢复后对丢失数据的恢复以及避免数据写入未完全导致文件损坏均需要应用保证。数据储存单元对于硬盘来说,最小的数据储存单元是扇区,一般为512个字节(现在开始流行4096个字节);而对于操作系统来说,以扇区为读写单位太小效率太慢,所以操作系统以块为数据的读写单位。由此可见,扇...

2020-01-11 14:14:09 568

原创 BeanDefinitionRegistryPostProcessor扩展

通过BeanDefinitionRegistryPostProcessor扩展能实现额外的很多功能,例如实现将一个接口动态代理,并将该代理对象在spring容器初始化完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象。代理工厂import lombok.extern.slf4j.Slf4j;import java.lang.r...

2020-01-05 15:26:52 86

原创 mysql空间索引

空间索引示例CREATE TABLE `shop_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `shop_name` varchar(64) NOT NULL COMMENT '门店名称', `geom_point` geometry NOT NULL COMMENT '经纬度', PRIMARY KEY ...

2019-12-07 11:04:48 434 1

原创 spring循环依赖过程解析

spring解决循环依赖spring在创建和依赖注入单例对象时,通过三级缓存的设计,可以解决大多数的循环依赖问题,但是基于三级缓存的解决方案,对于部分场景还是无法解决循环依赖的问题,会由spring抛出异常。spring的三级缓存由singletonObjects、earlySingletonObjects、singletonFactories组成:singletonObjects:保存初...

2019-11-09 15:35:44 111

原创 elasticsearch性能优化

1、硬件优化1.1、 硬件使用固态硬盘储存设备准备足够的内存禁止使用swap交换分区1.2、 页缓存elasticsearch查询依赖操作系统的页面高速缓存(File system cache),因此除了需要给elasticsearch的JVM分配足够的内存以外,还需要给页缓存预留内存。例如单机32G内存,给JVM配置16G内存后,剩余16G预留内存不需要额外配置,也不要让其他进...

2019-10-30 20:36:10 187

原创 常用加密算法

Base64import org.apache.commons.codec.binary.Base64;public class Base64Utils { public static void main(String args[]) { String value = "hello world"; // 加密 String enco...

2019-09-12 14:24:01 352

原创 mysql IS NULL 使用索引

简介mysql的sql查询语句中使用is null、is not null、!=对索引并没有任何影响,并不会因为where条件中使用了is null、is not null、!=这些判断条件导致索引失效而全表扫描。mysql官方文档也已经明确说明is null并不会影响索引的使用。MySQL can perform the same optimization on col_name IS ...

2019-08-28 18:58:51 2259 1

原创 mysql字符集utf8mb4失效踩坑

现象mysql数据表的字符集已经设置成了utf8mb4,但是通过JDBC向数据库写入4字节的emoji表情时报错,但是通过直接使用命令行插入该4字节的emoji表情时却成功了。示例如下:CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(11) NOT NULL, `age`...

2019-08-17 17:39:13 3852 1

原创 xml与javaBean转换

maven<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.11.1</version></dependency>c...

2019-08-08 00:11:11 124

转载 初探InnoDB MVCC源码实现

转载自博客园本文链接地址: 初探InnoDB MVCC源码实现1. 背景本文基于MySQL InnoDB源码对InnoDB中非锁定一致性读是如何实现的作一些简单的探究。2. 基本概念2.1 隐藏字段在经典之作《高性能MySQL》的1.4节中提及了MySQL中MVCC的实现,原著中提及了InnoDB implements MVCC by storing with each row tw...

2019-08-03 15:12:49 52

原创 mysql索引原理

页分裂每个数据页的开头记录了当前页的编号以及该数据页的上一页和下一页的编号,如图:1-4字节为当前数据页数据的校验和;5-8字节为当前数据页的编号;9-12字节为上一个数据页的编号;13-16字节为下一个数据页的编号;即数据页以一个双向链表维持着顺序,每个数据页中以单向链表的格式对记录的RowID进行逻辑排序,并且每个数据页之间的记录进行物理排序(页编码大的数据页中的记录RowI...

2019-07-20 14:54:04 69

原创 redis之list源码分析

list的数据结构redis的list的结构为quicklist,并非简单的类似java的LinkedList链表或者ArrayList数组,而是将链表和数值结合的一种数据结构。宏观上list是一个quicklist链表,通过双向指针前后连接,但是链表的每一个节点是一个ziplist字节数组,在字节数组上保存list的数据。默认配置下,每个ziplist最大为8K字节,在向满了的ziplist...

2019-07-16 18:54:28 198

原创 redis之key过期源码分析

简述redis的所有数据结构都可以设置过期时间,当key过期后再查询该key返回null。redis实现key自动过期是通过额外保存需要自动过期的key和该key的过期时间,然后通过主动删除和定时任务删除两种机制来将过期的key移除并回收内存。在redis4.0版本引入了异步删除的机制,对于删除对象大小大于64字节的key,先通过Unlink方法软删除后放入回收队列中,由其他线程异步回收内存空...

2019-07-12 22:56:23 184

原创 redis之string源码分析

string的对象编码string数据类型的对象编码有两种,分别是embstr和raw。两种编码的区别并不大,embstr相对于raw,内存空间连续。两者的数据格式见下图:redis的string数据之所以使用embstr和raw两种编码格式,是为了当一个string对象的值比较小时,使用一个连续的内存分区存放redisObject对象和sdshdr对象,减少内存分配和回收的消耗。embs...

2019-07-10 22:12:52 152

原创 redis之hash源码分析

hash的对象编码hash数据类型的对象编码有两种,分别是OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT,即一种是以压缩数组;一种是哈希字典。两者的数据格式见下图:编码转换redis的hash数据之所以使用OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT两种编码格式,是为了当一个hash对象的键值对数据量比较小时,使用紧凑的数组格式来节省...

2019-07-08 22:57:11 231

原创 java线程池之ThreadPoolExecutor

线程池状态转换java.util.concurrent.ThreadPoolExecutor为JDK的线程池对象,线程池的状态和状态转换如下图:使用方式ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 10, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(10));ex...

2019-07-02 18:34:58 52

原创 mysql数据页结构

数据页结构mysql默认每个数据页为16KB,InnoDB引擎的Compact行记录结构由以下字段组成:变长字段长度列表null值列表记录头信息列数据1列数据N不定长不定长5字节变长字段长度列表对于非固定长度的字段类型,例如varchar、text、blob、多字节编码的char等,通过变长字段长度列表记录当前行记录的对应字段值的长度(列顺序倒序存放)...

2019-07-01 20:43:25 577

原创 mysql回表致索引失效

简介mysql的innodb引擎查询记录时在无法使用索引覆盖的场景下,需要做回表操作获取记录的所需字段。mysql执行sql前会执行sql优化、索引选择等操作,mysql会预估各个索引所需要的查询代价以及不走索引所需要的查询代价,从中选择一个mysql认为代价最小的方式进行sql查询操作。而在回表数据量比较大时,经常会出现mysql对回表操作查询代价预估代价过大而导致索引使用错误的情况。案例...

2019-06-14 19:18:17 1366

原创 Using temporary与Using filesort

通过explain查看sql的执行计划时,Extra字段的值往往会看到Using where; Using index; Using temporary; Using filesort,其中此次重点关注Using temporary; Using filesort。Using temporaryUsing temporary表示由于排序没有走索引、使用union、子查询连接查询、使用某些视图等...

2019-06-13 23:35:26 9468 1

原创 springboot(26)HTTP连接池

服务间基于HTTP通信相对于grpc、dubbo之类的通信效率要低得多,一方面是后者的传输数据结构紧凑,使用了序列化和压缩;另一方面,后者使用了TCP连接池,而前者默认情况下每一次服务间的通信会创建一个新的HTTP请求,会产生不小的性能消耗,对于需要额外非对称加密的HTTPS请求,性能消耗更加严重。非连接池默认情况下springboot的RestTemplate使用的org.springfra...

2019-06-12 23:17:49 1459

mysql5.7.20及boost依赖.zip

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品

2019-11-30

国密算法SADK-3.2.1.3.jar

代码调用方式见 https://blog.csdn.net/sz85850597/article/details/100770794 SM2 非对称加密,基于ECC。 SM3 消息摘要,可以用MD5作为对比理解。 SM4 对称加密,密钥长度和分组长度均为128位。

2019-09-12

vconsole错误

记一次前端JSON序列化问题排查,cdn文件夹下为此次JSON错误时cdn返回的错误版本js文件,github文件夹下为github上正确的js文件

2019-01-12

jdk-8u161-windows-x64.exe

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

2018-04-11

rabbitmq-server-3.6.14-1.el7.noarch.rpm

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。

2018-03-22

erlang-19.0.4-1.el7.centos.x86_64.rpm

Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。

2018-03-22

mysql-5.7.20.tar.gz

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品

2018-03-15

boost_1_59_0.tar.gz

Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。

2018-03-15

Xshell绿色破解版

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。

2018-03-13

java2c工具(修复)

java对象与c结构体数据相互转换的实现工具(java),以及使用demo

2018-01-07

动态代理接口并注册到spring容器

实现将一个接口动态代理,并将该代理对象在spring容器初始化完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象

2017-12-26

java2c工具

java对象与c结构体数据相互转换的实现工具(java),以及实现demo

2017-12-05

lucene、solr中文分词器

lucene默认自带的分词器对中文支持并不好,所以对于中文索引的分词器,建议使用第三方开源的中文分词器

2017-10-02

site-1.8.20.zip

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS

2017-09-29

redis-3.2.8.tar.gz

Redis 教程 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统

2017-09-29

libfastcommon-1.36

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等

2017-09-29

fastdfs-5.12

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等

2017-09-29

nginx-1.12.0.tar.gz

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器

2017-09-29

mysql-5.6.31

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品

2017-09-29

mysql-5.6.31.tar.gz

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品

2017-09-29

空空如也

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