- 博客(29)
- 资源 (8)
- 收藏
- 关注
原创 AQS之Semaphore源码分析
信号量提供了用于控制资源同时被访问的个数,也就是它会维护一个许可证,访问资源之前需要申请许可证,申请许可证成功后才可以进行访问,如果申请访问资源获取的了许可证,则可以进行资源访问,同时颁发许可证中心的许可证会进行增加,等到访问资源的线程释放资源后,许可证使用情况会进行减少,可用于访问限流等各类限制数量访问等业务。
2023-05-23 16:54:49
132
原创 AQS之独占锁ReentrantLock源码分析
1:进行解锁操作,它会从尾节点开始寻找最顶层的节点是否为-1,如果为-1那么就是阻塞线程,获取阻塞线程节点进行解锁操作。1:获取前置节点,判断是否为头节点,如果不是直接阻塞,等待获取解锁,如果是就进行一次cas获取锁操作,2:获取当前锁状态-解锁数,判断是否是重入锁,如果不算重入锁返回ture,如果是重入锁,则进行锁-1。1:添加节点,判断尾节点是否存在,不存在那么就通过enq进行初始化操作,存在将当前节点放入链表中。2:如果正在运行的线程是需要获取锁的线程,状态值+1记录重入次数(重入锁)
2023-04-07 11:46:37
551
原创 线程池源码解析
核心线程(Worker)一直空闲也不终止,因为通过workQueue.take()实现的,它会一直阻塞到从等待队列中取到新的任务。非核心线程空闲指定时间后终止是通过workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS)实现的,一个空闲的Worker只等待keepAliveTime,如果没有获取到任务则循环终止,线程也就运行结束了。
2023-03-23 16:11:48
346
原创 kthreaddk解决方案
今天服务器突然飙升300%当时人有点麻,查看top中cup使用率发现:问题kthreaddk这个是啥,百度发现原来是个挖矿病毒,今天也是够头疼的啦,首先遇到这种情况第一件事就是百度,可是百度发现问题并不能得到解决,kill kthreaddk进程还是会重新运行改进程,首先我们需要确定为什么它会重新运行改进程:1:存在定时任务->排查:执行命令:crontab -l发现一个未知文件,使用 crontab -r清除改执行任务,删除文件,在重启crontab:service crond resta
2022-05-07 17:43:44
2176
2
原创 jvm性能监控与故障排查
首先我们了解一下jdk有那些工具:jcmd命令:jcmd命令是最全面,基本涵盖所有功能的命令jstat:查看gc的使用情况jstack:查看线程使用情况这些大家可以一个一个敲,或者百度看详解,这边就不一一列举参数了。我们来看一下jdk可视化工具吧,主要是监控内存,堆,线程等数据: 在使用可视化工具时先启动端口:jcmd pid ManagementAgent.start jmxremote.port=7777 jmxremote.rmi.port=7777 jmxremote.ssl=fa
2021-08-04 20:45:01
294
原创 JVM GC日志解析
在我们看GC日志时,我们需要对垃圾回收器的工作流程比较熟悉,这样比较方便我们查看gc日志,大家可以看看我上一篇GC理论。JVM启动参数:-Xmn2M 年轻代分配2M-Xmx6M 给java堆分配6M-XX:+PrintGCDetails 打印GC详细信息-XX:+PrintHeapAtGC 在GC发生之前与之后打印堆的详细信息-XX:+PrintGCTimeStamps 允许在每个GC上打印时间戳。-XX:+UseSerialGC 设置垃圾回收器serial+serialOld-XX:+Us
2021-07-29 16:06:30
1449
原创 jvm内存模型与GC回收(理论篇)
首先我们来看一下jvm内存模型图:程序计数器:程序计数器主要作用是记录当前线程要执行的字节码指令的内存地址。如果正在执行的是Native 方法,则这个技术器值为空(Undefined)虚拟机栈:虚拟机栈主要用于存储储局部变量表,操作数栈,动态链接,方法出口,每一个方法调用都是入栈到出栈的过程,也就相当于方法调用运行,如图:首先:0:iconst_1 将int类型的1压栈 ——》1:istroe_1将int类型的1出栈,同时存入局部变量表中,变量名为a ——》2:iconst_2将int类型的
2021-07-27 19:51:06
305
原创 docker~jenkins~harbor自动远程部署
harbor是一个专门管理docker镜像的程序,跟gitlab管理文件应用类似啦,当然我们用harbor不仅仅是管理镜像,我们需要使用harbor配合docker+jenkins实现远程部署。首先我们需要安装一个harbor,这边大家自行百度进行安装啦。安装好的页面,默认账号admin/Harbor12345:进入我们的harbor管理中创建我们的项目进行管理镜像:我这边有两个镜像,我们来说一下自动部署打包的流程:1:编写我们的jinkensfile文件,在脚本中我执行的是/sh/implem
2021-06-15 01:57:58
999
2
原创 jenkins入门到实战
为什么要使用jenkins:jenkins是自动打包部署发布程序,该程序减少了我们开发过程中的项目打包,部署等时间。我们只需要将代码提交到gitlab上面,jenkins就可以自动打包部署与发布,用起来还是特别方便的。下面开始使用:1:安装Jenkins根据官网下载:https://pkg.jenkins.io/redhat-stable/2:安装jdk:yum install java-1.8.0-openjdk* -y如果系统存在就跳过3:安装成功后输入 rpm -ql jenkins查看Jen
2021-06-15 01:18:40
539
原创 docker容器入门到实战
为什么要使用dockerdocker是一种容器化部署环境,在我们平常部署应用时,通常会考虑到线上环境是否有冲突等问题,这些所有的应用都处于一个环境中,而docker容器则是独立的一个环境。它完全隔离了应用部署之间环境冲突问题。我们需要考虑在独立的环境中,运行自己的项目是否存在存储容量过大,文件存储是否安全等问题。下面我们画张图来充分理解docker存储:接下来我们需要看MySQL,redis,gitlab这些应用里面的文件是特别重要的,我们使用docker启动时,怎么去进行应用备份存储呢?接下来我们开
2021-06-15 01:00:59
300
1
原创 springcloud-nacos
nacos主要用于服务注册于发现,在第一篇微服务架构中讲解到eureka注册中心,但是euerka它现在已经闭源了,好像是不进行维护了,而且euerka只提供服务注册于发现,它的可视化也是英文的,不利于我们问题分析,nacos就特别适合我们了,它最重要的两大模块为:微服务注册管理,统一配置中心,可视化页面是中文版可操作,并且可以优雅的进行服务上线于下线,同时提供了较为详细的服务状态,集群状态查看等,nacos官网为:https://nacos.io/zh-cn/docs/what-is-nacos.html
2021-04-25 23:13:52
226
1
原创 布隆过滤器从了解到实践
上次说了redis穿透的问题,现在我们来解决一下吧,首先redis穿透是因为一个key在redis中未查询到,而频繁查询mysql导致mysql崩溃的问题。解决方案一是可以在未查询到的redis中添加一个空的key但这种做法还是不太妥当,解决方案二使用集合存储进行判断该key是否存在,而不是频繁查询mysql导致mysql崩溃,在使用map集合时,我们得想到map集合如果存储的数据量过多占用的资源会很大,这个也是不妥当的,接下来我们可以使用布隆过滤器:布隆过滤器布隆过滤器它采用的数据结构是位图的形式,他
2021-04-13 14:49:58
213
3
原创 redis核心总结
首先在写redis总结之前挺感谢狂神说,他讲解的redis全是干货,分享链接有兴趣的兄弟可以去看看吧:https://www.bilibili.com/video/BV1S54y1R7SB。首先来启动我们的redis,我的redis存放在/usr/local/redis下面,启动命令:连接客户端:redis之持久化(RDB~AOF)RDB:rdb是快照的方式存储,也就是过了多久达到一定的规则之后进行快照,存储到一个rdb文件中,该文件就是用来存储快照数据的。RDB的优势在于对性能的消耗不会很
2021-04-01 14:27:26
148
原创 消息中间件-RabbitMQ(死信交换机,延迟队列)
死信交换机:个人理解死信交换机就是存储一些过期的消息而产生的,本质上跟普通的交换机没有任何区别。当然了普通交换机和死信交换机的应用场景是不同的,首先我们配置死信交换机,本次采用spring-boot进行测试:导入pom: <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId>
2021-02-16 00:03:56
251
1
原创 消息中间件-RabbitMQ(工作模式)
Pub/Sub(订阅模式)P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)C:消费者,消息的接收者,会一直等待消息到来Queue:消息队列,接收消息、缓存消息Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:Fanout:广播,将消息交给所有绑定到交换机的队列Direct:定向,把消息交给符
2021-02-15 23:31:56
242
原创 分布式事务-RocketMQ(消息最终一致性~最大努力通知)
可靠消息最终一致性事务:可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能 够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致。这边我们采用RocketMQ实现RocketMQ:RocketMQ 是一个来自阿里巴巴的分布式消息中间件,于 2012 年开源,并在 2017 年正式成为 Apache 顶级项 目。据了解,包括阿里云上的消息产品以及收购的子公司在内,阿里集团的消息产品全线都运行在 RocketMQ 之 上,并且
2021-02-15 19:36:33
949
原创 分布式事务-TCC(Hmily)
TCC是什么:TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认 Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的 操作即回滚操作。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所 有分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/Cancel 操作若
2021-02-15 00:57:49
1229
1
原创 分布式事务-CAP(base理论)
CAP:是 Consistency、Availability、Partition tolerance三个词语的缩写,分别表示一致性、可用性、分区容忍性。C - Consistency(一致性):一致性指的是在当数据分布在多个服务上,从任意一个服务中调用的数据都是最新的状态。分布式系统一致性的特点:1:由于数据同步过程中,想要对同步数据进行资源的暂时锁定,等待数据完成后释放资源。2:如果请求数据同步失败的结点则会返回错误信息,一定不会返回旧数据。A - Availability (可用性):可用
2021-02-14 23:17:51
513
原创 mysql之SQL语句优化
优化insert语句:一·批量导入:在批量导入数据的时候,我们尽量采用主键有序顺序进行插入,因为InnoDB类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺序排列,可以有效的提高导入数据的效率。二·关闭唯一性校验:导入前 SET UNIQUE_CHECKS=0;导入后 SET UNIQUE_CHECKS=1恢复唯一性校验。优化order by语句:我们在order by查询时会有两种排序方式:一:通过对返回数据进行排序,也就是通常说的 filesort 排序,所有不是通过索引直接
2020-12-12 12:59:01
139
原创 mysql之SQL执行分析
在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的 SQL 语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化。一:定位低效率执行SQL...
2020-12-01 15:12:05
703
原创 VM安装linux系统net模式联网问题
首先我们点开编辑->虚拟机网络编辑器:我所标红的位置的ip前三段都需要对应一致。然后我们进入到linux可视化页面中:下面有三段,第一段配置自己的ip地址,第二段默认配置掩盖地址,第三段配置你的网关ip,怎么看你的网关ip呢:cd ./etc/sysconfig/network-scripts命令进入到你的文件中:然后寻找你的文件进行编辑在进入终端文件修改配置:将BOOTPROTO修改为static,意思为ip不可变,这样就可以联网了,注意你的主机网络也得看清楚,配置应该为:
2020-11-19 11:16:14
311
原创 spring-boot 访问静态资源404问题
昨天在部署spring boot小工具时出现了一个问题,在我访问spring boot下面静态资源的时候出现404问题,当时也不知道解决方案有那些,因为我以前的项目都是前后端分离项目,部署的前端项目一般都用nginx进行反向代理访问的,这次直接使用spring boot访问该项目下的静态文件属实难顶,各种资料翻阅测试还是找到了解决方案,下面看代码把:在yml中配置:spring: mvc: static-path-pattern: /static/** resources: st
2020-11-10 09:46:34
3969
1
原创 spring cloud之oauth2
首先我们在了解oath2授权认证时,需要先了解Security认证,同时Security认证也是有许多种认证方式的我们这边主要学习数据库认证啦,首先我们需要三张表用户表,角色表,用户角色表。同时需要在pom中导入Security:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</ar
2020-10-23 15:46:42
413
1
原创 spring cloud之zull网关
在微服务中,我们所有的服务都是访问自己的ip或者微服务名称这样大大提高了代码复杂程度,同时也将我们所有的微服务暴露给了用户,这样是不好滴,这个时候我们想要统一ip进行访问所有的微服务,那么zull网关就帮我们做到了这一点,zull网关大家可以了解为类似于nginx反向代理会比较好理解吧。下面直接来使用zull吧:首先我们想要在pom中导入zull: <dependency> <groupId>org.springframework.cloud</gr
2020-10-22 14:36:46
307
3
原创 spring-cloud之fegin
fegin它是用来做微服务之间的服务调用的,在使用fegin的时候直接调用微服务名称,fegin会去注册中心列表获取微服务,在获取到微服务之后,根据rebbion策略进行调用微服务,这边直接做具体实现了。导入jar: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-o
2020-10-16 10:24:16
1526
2
原创 Spring-Cloud之Ribbon
ribbon为负载均衡主要和eureka注册中心进行结合使用。负载均衡主要作用为多个服务之间进行服务压力合理分配,那么如何去合理分配服务器之间的压力呢,ribbon给我们提供了对应的负载均衡策略:负载均衡策略代码配置:重写ribbonRule(IClientConfig config)方法,在启动类上配置该配置类就可以啦:@RibbonClients( defaultConfiguration= RibbonClientConfiguration.class, valu
2020-10-10 14:39:54
154
原创 Spring-Cloud之Eureka
啦啦啦,第一次写博客啦,主要以交流沟通为主,不足的地方希望各位大佬指点一下把,谢谢啦!!!eureka是一个注册中心,分为注册中心服务和注册中心客户端。具体怎么使用直接干代码把。注册中心服务配置:server: # 微服务端口号 port: 8010spring: # 应用程序名称 application: name: service-eureka# SpringCloud注册中心配置eureka: instance: hostname: localhost
2020-10-10 10:13:43
105
xshell6_and_xftp6.rar
2019-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人