自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(282)
  • 资源 (2)
  • 收藏
  • 关注

转载 Linux服务器如何查看CPU使用率、内存占用情况

Top命令Top命令很常用,在第三行有显示CPU当前的使用情况。字段说明:PID:进程标示号USER:进程所有者PR:进程优先级NI:进程优先级别数值VIRT:进程占用的虚拟内存值RES:进程占用的物理内存值SHR :进程使用的共享内存值S :进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死%CPU :进程占用的CPU使用率%MEM :进程占用的物理内存百分比TIME+:进程启动后占用的总的CPU时间Command:进程启动的启动命令名称Free命令查看总内存、使用、空

2022-04-22 17:29:02 12970

原创 MySQL添加索引导致表死锁问题

出现该问题描述:由于SQL慢,希望通过索引优化,发现很多单字段索引、且组合索引缺少一些关键字段,便决定删除单字段索引,补全组合索引。修改完索引后提交,发现执行时间几个小时都没有执行完成。造成结果:测试环境数据库表死锁,一些数据库执行语句查询超时。MySQL有三种锁的级别:页级、表级、行级。表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁和行锁之间;

2022-04-01 15:58:04 4587

原创 SpringBoot启动流程详解(二)

执行run(args)方法源码 public ConfigurableApplicationContext run(String... args) { //创建任务计时器,并开始计时 StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; Collection<SpringBootExceptionReporter>

2022-03-23 16:56:03 605

原创 SpringBoot启动流程详解(一)

启动流程图(个人理解)我们都是知道SpringBoot启动其实了类似下面的代码自动定义启动类代码@Configuration@Component@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})public class StudySpringApplication { public static void main(String[] args) { SpringApplication.run(Stud

2022-03-23 16:11:03 832 1

原创 SpringBoot项目中有些依赖不加版本号原因

我们都知道maven其实是一个坐标体系一样,我们平常看到的groupId、artifactId、version节点,其实就是Maven的坐标,通过这些坐标,可以唯一定位一个Jar包。找到SpringBoot的版本依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version&g

2022-03-22 17:32:49 2164

转载 @Component和@Configuration的区别

源码@Configuration@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Configuration { @AliasFor( annotation = Component.class ) String value() default ""; boolean proxyBeanMethod

2022-03-22 12:53:01 341

原创 SpringBoot自动装配原理源码详解

文章目录自动装配原理及源码解析自动装配实现流程图简述自动装配步骤详解核心代码加载SpringBoot可以自动装配集合利用LinkedHashSet对得到的需要自动装配的集合去重过滤@SpringBootApplication注解中exclude参数集合利用AutoConfigurationImportFilter过滤器对不满足条件的配置类,进行过滤OnClassConditionOnWebApplicationConditionOnBeanCondition源码解析按照优先级,对配置类进行实例化(bean初

2022-03-21 17:36:12 2732

原创 @SpringBootApplication注解详解

首先我们看下@SpringBootApplication注解的源码:从上面的源码中可以看出,@SpringBootApplication是由@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个核心注解构成的,也就说我们其实也可以使用这三个注解代替@SpringBootApplication注解。下面我们来逐一简单分析下这三个注解@SpringBootConfiguration作用:标识该类为配置类首先依赖看源代码;

2022-03-21 12:37:33 519

转载 kafka相关命令

topic相关创建topickafka-topics.sh --bootstrap-server ${kafkaAddress} --create --topic ${topicName} --partitions ${partipartions} --replication-factor ${replication}查看topickafka-topics.sh --bootstrap-server ${kafkaAddress} --topic ${topicName} --describe

2022-03-16 09:06:03 220

原创 kafka常见问题处理

消费消息超时,导致重复消费问题,消息堆积报错日志示例org.springframework.kafka.KafkaListenerEndpointContainer#2-0-C-1 org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.maybeAutoCommitOffsetsSync:648 - Auto-commit of offsets {gate_contact_modify-0=OffsetAndMetadata{of

2022-03-10 16:26:03 2907

原创 Kafka rebalance触发条件

首先我们需要kafka的rebalance的一些概念:版的消费者客户端对此进行了重新设计,将全部消费组分成多个子集,每个消费组的子集在服务端对应一个GroupCoordinator对其进行管理,GroupCoordinator是Kafka服务端中用于管理消费组的组件。而消费者客户端中的ConsumerCoordinator组件负责与GroupCoordinator进行交互。ConsumerCoordinator与GroupCoordinator之间最重要的职责就是负责执行消费者再均衡的操作,包括前面提及

2022-03-09 18:12:47 2570

原创 RabbitMQ实现延迟队列

实现方式一:死信队列AMQP协议和RabbitMQ队列本身没有直接支持延迟队列功能,但是可以通过以下特性模拟出延迟队列的功能。但是我们可以通过RabbitMQ的两个特性来曲线实现延迟队列:1、Time To Live(TTL)RabbitMQ可以针对Queue设置x-expires 或者 针对Message设置 x-message-ttl,来控制消息的生存时间,如果超时(两者同时设置以最先到期的时间为准),则消息变为dead letter(死信)RabbitMQ针对队列中的消息过期时间有两种方法可

2022-03-08 18:44:03 3671

原创 延迟队列实现之Netty

首先我们了解是时间轮的算法:时间轮:就像上面的时间盘,里面有8个格子组成一个时间轮,如果每个格子代表的时间为1s,那么一圈的就代表8秒。加入我们将延迟任务加入时间轮的时间为时间轮中0秒的位置,延迟5秒执行,那就是说当转到6个格子的时候就会开始执行定时任务,如果超过8秒,需要延时20秒的,那就需要转多个圈。按以上实例,需要转2圈+4个格子,那就那就是转了2圈后在5标号的格子开始。首先我们看下netty 中的时间轮类Netty构建延时队列主要用HashedWheelTimer,HashedWheelT

2022-03-07 12:00:44 823

原创 Error creating bean with name ‘jwtTokenEnhancer‘ defined in class path resource

报错信息Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtTokenEnhancer' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/resource/ResourceServerTokenServicesConfigurati

2022-03-05 10:09:59 2089 1

原创 Spring Security前台传入加密密码,后台比对实现

这里我们利用后台模拟全台传递的密码为加密密码,采用AES加密方式AES加密工具类public class EncryptUtil { /** * 密钥, 256位32个字节 */ public static final String DEFAULT_SECRET_KEY = "uBdUx82vPHkDKb284d7NkjFoNcKWBuka"; private static final String AES = "AES"; /** * 初

2022-03-01 23:08:59 2731 1

原创 BCryptPasswordEncoder原理分析

首先我们需要知道 BCryptPasswordEncoder 类其实是 Spring Security一个加密类下面我们下来探究下 BCryptPasswordEncoder我们在SpringBoot中新建一个测试类@RunWith(SpringRunner.class)public class PasswordEncoderTest { @Test public void encode() { BCryptPasswordEncoder bCryptPasswor

2022-03-01 23:00:12 1826

转载 MySQL架构总览->查询执行流程->SQL解析顺序

文章目录一、MySQL架构总览:二、查询执行流程1.连接2.处理3.结果三、SQL解析顺序准备工作create database testQuerySQL解析1. FROM2 ON过滤3 Join4. WHERE5. GROUP BY6. HAVING7. SELECT8 .ORDER BY9 .LIMIT  一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。  本文将从MySQL总体架构—>查询执行流程—>语句执行顺序来探讨一下其

2022-02-26 16:29:41 214

转载 MySQL中常见SQL错误使用优化

MySQL在2016年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移到MySQL上来。但也存在部分客户在使用MySQL数据库的过程中遇到一些比如响应时间慢,CPU打满等情况。阿里云RDS专家服务团队帮助云上客户解决过很多紧急问题。现将《ApsaraDB专家诊断报告》中出现的部分常见SQL问题总结如下,供大家参考。常见SQL错误用法1. LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,

2022-02-26 15:46:17 202

原创 kafka消息丢失

文章目录消息传递语义消息丢失场景Producer端丢失场景Broker 端丢失场景Consumer 端丢失场景剖析消息丢失解决方案Producer 端消息丢失解决方案Broker 端解决方案Consumer 端解决方案全文概览图消息传递语义1)首先当 Producer 向 Broker 发送数据后,会进行 commit,如果 commit 成功,由于 Replica 副本机制的存在,则意味着消息不会丢失,但是 Producer 发送数据给 Broker 后,遇到网络问题而造成通信中断,那么 Prod

2022-02-22 20:50:36 1313 2

原创 布隆过滤器

布隆过滤器的定义:布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在 1970 年提出的,bloom过滤器由长度为m的位向量或位列表(仅包含0或1位值的列表)组成,最初所有值都设置为0。用于检查值“可能存在集合中”或绝对不存在集合中。存在一定误判率。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。布隆过滤器的原理解析如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存

2022-02-17 22:36:18 233

原创 Redis数据迁移(三)

redis-dump方式安装环境依赖:安装RVM查看是否安装ruby ,或者当前安装的版本ruby -v安装ruby 环境//配置DNS解析vi /etc/hosts199.232.28.133 raw.githubusercontent.com//安装秘钥gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 94558F59//一下命令需要多次执行,才能成功,可能由于网络问题,具体原因赞不清楚curl -L get.r

2022-02-16 11:44:32 418

原创 Redis数据迁移(二)

方式一:使用redis-cli迁移数据迁移代码(将)192.168.31.216服务器上redis的0数据库的所有数据迁移到执行命令的服务器上redis的0数据库:新建文件vim redis-mv.sh 并添加下面内容redis-cli -h 192.168.31.216 -p 6379 -n 0 keys "*" | while read keydo redis-cli -h 192.168.31.216 -p 6379 -n 0 --raw dump $key | perl -p

2022-02-14 22:29:09 731

转载 redis数据迁移

实现方式1:利用redis主从复制特性在新的一台服务器上安装同版本的redis ,将配置文件同步到新的服务器。增加下列信息replicaof 192.168.31.216 6379然后使用客户端工具查看keys是否同步完成最后将备份服务redis服务器设置成主服务器命令//链接客户端redis-cli //查看当前主从信息 info replication //设置当前从服务器为主服务器 slaveof no one//查看设置成功后的服务器主从信息 info replicati

2022-02-12 21:49:28 4162

原创 redis安装报错

报错1 默认分配器报错报错截图报错代码zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录分配器allocator, 如果有MALLOC 这个环境变量, 会有用这个环境变量的 去建立Redis。而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加

2022-02-12 20:38:43 1048

原创 Redi集群增加删除节点

文章目录增加主节点1、新建节点文件夹,并复制实例信息2、删除以前节点的数据信息,不然会导致后面节点添加失败3、修改配置文件4、启动两个redis 实例5、增加主节点redis原有集群图我们现在需要在以上集群的基础上在增加两个节点服务器 10.0.8.149 端口 9007服务器 10.0.8.149 端口 9008并且打算9007作为主节点 9008作为从节点。增加主节点1、新建节点文件夹,并复制实例信息cd /usr/software/redis-cluster//新建两个节点的文件夹

2022-02-11 11:46:24 400

原创 Node 10.0.8.149:9008 is not empty. Either the node already knows other nodes

首先来看错误截图信息我可以思考为什么会产生这个错误啦,其实导致这个错误的原因在与我们在开启新的redis实例时,是直接将其他实例的文件完全复制过来的,这就导致redis的部分持久化相关文件还是之前实例的信息,所以产生的以上错误,那么解决起来就很简单的找到一下文件appendonly.aofdumm.rdbnode*.conf(该文件名是根据你自己命名决定的)删除之前节点的历史文件rm -rf appendonly.aof dumm.rdb node*.conf然后查看对应的进程,kil

2022-02-11 10:41:35 374

原创 redis集群值插槽算法灵魂拷问

文章目录为什么要有这个插槽算法为什么插槽只有16384,而不是更多插槽算法的是如何实现的,怎么去验证他啦在redis集群的时候使用的是总共有插槽数16384,会根据key值分配不同的插槽,由此我们产生了一下疑问1、插槽是什么,为什么要有这个插槽算法2、为什么插槽只有16384,而不是更多3、插槽算法的是如何实现的,怎么去验证他啦为什么要有这个插槽算法虚拟槽分区是 redis cluster 中默认的数据分布技术,虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有数据映射到一个固定范围

2022-02-10 17:37:34 984 1

原创 SpringBoot整合redis集群(多主节点多从节点)

1、引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.5.9</version> </dependency>

2022-02-10 16:52:32 2059

转载 redis集群ERROR: Error installing redis-4.2.1.gem: redis requires Ruby version >= 2.4.0

错误代码:ERROR: Error installing redis-4.2.1.gem:redis requires Ruby version >= 2.4.0.首先我们查看当前的ruby的版本ruby -v发现为2.0版本。所以需要升级到2.4以上版本安装新的rubygpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 94558F59curl -L get.rvm.io | bash -s stable上面可能会出

2022-02-08 18:29:48 617

原创 redis高可用实战(主从、哨兵、集群)

文章目录redis主从(1)在所有机器上安装redis验证主从服务redis主从下载redis安装文件地址:redis5.0.14下载地址(1)在所有机器上安装redis//1、上传离线包至指定路径cd /usr/software/rz //2、解压文件tar -zxvf redis-5.0.14.tar.gz //3、安装redis编译环境gccyum install -y gcc//4、 安装redismake && make install//5、将

2022-02-07 16:03:34 422

转载 虚拟机中CentOS7 could not reslove host 问题解决方法

解决方案:进入目录进入目录network-scriptscd /etc/sysconfig/network-scripts用vi编辑ifcfg-ens33文件,将ONBOOT属性更改为yesONBOOT=yes重启即可解决问题

2022-02-07 14:47:59 1384

原创 cpu利用率高排查

1、首先使用top命令找到占用Cpu高的进程top相关的操作默认按照CPU利用率排序2、确定进程对应的相关程序:ps 1149623、查看该进程相应的线程的详细数据top -Hp 114962确定该进程中是哪个线程占用的cpu最高4、获取线程十六进制pidprintf "%x\n" 1172145、获取线程状态信息,看是否存在报错jstack 117214|grep -A 30 1c9de若无相关报错信息,则查看相关项目的日志信息和jvm情况查看堆内存使用情况j

2022-02-03 19:03:18 2356

转载 eureka定义

eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服

2022-01-26 16:56:47 61

原创 为什么要使用注册中心

网上各种介绍注册中心的文章,但是都是只告诉你如何去用它,我们按照方法也一直在用!但是却少有人思考,我们为什么要使用注册中心。接下来我们就来探讨下,为什么要使用注册中心,关于这篇文章,我也是在dubbo的官网(https://dubbo.apache.org/zh/docs/v2.7/user/preface/requirements/)找到的答案。下面我们就来聊一聊;首先我们需要知道互联网架构的一个发展历史:互联网架构发展历史:随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分

2022-01-26 16:19:25 1561

转载 Linux日志筛选

我们在排查问题的的时候经常会用到日志排查,但是可能会经常忘记,下面就总结下:tail -n 10 test.log 查询日志尾部最后10行的日志;tail -n +10 test.log 查询10行之后的所有日志;head -n 10 test.log 查询日志文件中的头10行日志;head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;情况1:需要按照关键字过滤日志文件,并显示日志所在对应的行数cat -n trace.log |grep

2022-01-23 21:57:58 1608

原创 SpringBoot与SpringCloud的版本对应详细版

我们在搭建微服务项目的时候会,经常要关注SpringBoot和Springcloud的版本对应关系,这里有官网版本对应地址共大家参考https://start.spring.io/actuator/info{ "git": { "branch": "af724b5c27a7317a2f111739cf810d9cb526c1e0", "commit": { "id": "af724b5", "time": "2022-01-07T09:27:13Z" } }, "build

2022-01-08 15:22:40 3783

原创 kafka位移提交问题

自动提交(系统默认值为5秒,缩短位移提交间隔,可以更好防止数据丢失和重复消费问题)// 自动提交,默认trueprops.put("enable.auto.commit", "true");// 设置自动每1s提交一次props.put("auto.commit.interval.ms", "1000");自动提交是在轮询中进行,消费者每次轮询时都会检查是否提交该偏移量。这种情况就会发生重复消费和丢失消息的情况。手动提交(consumer.commitSync())// 关闭自动提交pr

2022-01-04 12:49:54 792

原创 kafka生产者、消费者参数

生产者bootstrap.servers该属性指定broker的地址清单,地址的格式为host:port。清单里不需要包含所有的broker地址,生产者会从给定的broker里查询其他broker的信息。不过最少提供2个broker的信息,一旦其中一个宕机,生产者仍能连接到集群上。格式如下:192.168.40.150:9092,192.168.40.151:9092,192.168.40.152:9092key.serializerkey值的序列化方式,常见的序列化方式有StringSerial

2021-12-30 12:41:39 1221

转载 优雅停机(SpringBoot 2.3.0以上新特性)

我们在更新迭代是,可能需要手动发包,在停止包时,切记不要使用(kill -9)强制杀死进程,因为强制杀死进程的话,一些正在执行的请求,或者后台正在处理的逻辑,便会终止。1、例如正准备批量数据写入数据库,被强制杀死(该部分数据丢失)2、kafka消费正在提交位移1000(上次位移500),强行停止后位移提交失败,数据已经消费了,下次就会出现重新消费500-1000之间的数据。那么在不是强制结束进程的情况下,我们如何保证项目中待执行的任务,执行完毕后杀死进程啦。实现这个功能的需求,专业术语为优雅停机如

2021-12-28 16:30:34 1289

原创 kafka中Broker常用配置

broker.id解释:每个Broker的唯一标识,默认为0 建议采用形式host1.xx.com,host2.xx.comlisteners解释:监听端口,默认9092,如果使用1024以下端口,需要使用root权限启动Kafka。num.network.threads解释:服务器用于接收来自网络的请求并向网络发送响应的线程数 默认值为3num.io.threads解释:服务器用于处理I/O请求(可能包括磁盘I/O)的线程数 默认值8socket.send.buffer.bytes解释

2021-12-28 12:33:59 940

mybatis_plu.rar

利用MybatisPlu和Freemarker实现自动生成对数据库单表的CRUD所有接口,直接生成代码就可以和前段联调,包含功能 1、查询所有 2、条件查询(带分页的) 3、简单插入,条件插入,以及批量插入 4、更新(根据条件更新) 5、根据主键删除,根据条件删除,根据ID批量删除

2019-11-12

时间工具类

获取指定时间周一,周日时间,月份的最后一天,秒值转换成对应时分秒,校验字符串是否是日期时间格式(2018-05-06),(2018-05-06 12:00:00),(12:00:00)

2018-09-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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