- 博客(109)
- 资源 (2)
- 收藏
- 关注
转载 G1垃圾收集器详解
垃圾收集器的考量指标垃圾收集器也有类似CAP理论的矛盾,具体如下面三个考量指标:吞吐量(Throughput)响应能力、延迟(Latency)占用的内存(Capacity)上面三个考量指标无法同时全部满足最优,只能满足其中的两个,而牺牲其中一个的部分效率。吞吐量吞吐量关注的是,在一个指定的时间范围内,最大化一个应用的工作量。如下方式来衡量一个系统吞吐量的好坏:在一个小时内,同一个事务(任务或请求)完成的次数。数据库一小时内完成多少次查询。对于关注吞吐量的系统,
2021-05-21 21:58:06 1373
转载 CMS垃圾收集器详解
概述CMS垃圾收集器是一款优秀的老年代并发垃圾收集器,通过与用户线程并发执行的方式减少GC停顿的时间。本文主要聊一下CMS设计到的相关的数据结构、具体的执行过程、运行中会出现的异常情况。在CMS之前并行垃圾收集器通过下图方式进行,虽然GC阶段多线程并行执行单此时用户线程是完全暂停的。如果GC时间过长,将引发服务响应超时、调用接口超时等各类异常。而CMS垃圾收集器大部分时间GC线程与用户线程并发执行,只有在初始标记和重新标记阶段才暂停用户线程总体思路:当达到GC条件时,开始并发标记存
2021-05-18 14:35:55 3690 1
原创 JVM调优常用命令
jpshttps://blog.csdn.net/wisgood/article/details/38942449jstathttps://blog.csdn.net/maosijunzi/article/details/46049117
2021-03-24 14:43:50 235
转载 Java虚拟机(JVM)面试知识汇总
JVM类加载过程什么是JVM的类加载机制?首先,在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class)。而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验、转换解析、初始化,使这些数据最终成为可以被JVM直接使用的Java类型,这个说来简单但实际复杂的过程叫做JVM的类加载机制。什么是类初始化?Class文件中的“类”从加载到JVM内存中,到卸载出内存过程有七个生命周期阶段。类加载机制包括了前五个阶段。如下图所示:.
2021-03-07 20:48:21 490
原创 oracle:一次sql阻塞的排查经历
--堵塞排查方法--1. explain plan for + sql:根据SQL语句,解析时,找出它的 sal_PLAN_HASH_VALUEexplain plan for UPDATE T_PM_User SET FCONTROLUNITID='00000000-0000-0000-0000-000000000000CCE7AED4' where FID='Y7BKuFR2QFC0vfUT+GPFeRO33n8='SELECT * FROM TABLE(DBMS_XPLAN.DISPL.
2020-11-27 22:13:43 1196
原创 十六、事务(redis)
Redis通过MULTI、EXEC、WATCH等命令来实现事务(transaction)功能。事务提供 了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行 期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都 执行完毕,然后才去处理其他客户端的命令请求一、事务的实现一个事务从开始到结束通常会经历以下三个阶段:事务开始、命令人队、事务执行1.1 事务开始MULTI MULTI命令的执行标志着事务的开始 ...
2020-06-24 10:46:19 148
原创 十五、发布与订阅(redis)
Redis的发布与订阅功能由publish、subscribe、psubscribe、等命令组成通过执行命令,客户端可以订阅一个或多个频道,从而成为这些频道的订 阅者(subscriber):每当有其他客户端向被订阅的频道发送消息(message)时,频道的所 有订阅者都会收到这条消息一、频道的订阅与退订当一个客户端执行命令订阅某个或某些频道的时候,这个客户端与被订阅 频道之间就建立起了一种订阅关系Redis将所有频道的订阅关系都保存在服务器状态的pubsub_chann..
2020-06-24 10:46:02 246
原创 十三、哨兵(redis)
Sentinel (哨闪、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel 实例(instance)组成的 Sentinel 系 统(system)可以监视任意多个主服务器, 以及这些主服务器属下的所有从服务器, 并在被监视的主服务器进入下线状态时,自 动将下线主服务器属下的某个从服务器升级 为新的主服务器,然后由新的主服务器代替 已下线的主服务器继续处理命令请求。一、启动并初始化Sentinel启动一个Sentinel可以使用命令:.
2020-06-24 10:45:45 255
原创 十四、集群(redis)
Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共 享,并提供复制和故障转移功能。一、节点一个Redis集群通常由多个节点(node)组成,在刚开始的时候,每个节点都是相互独 立的,它们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,我们必须将 各个独立的节点连接起来,构成一个包含多个节点的集群1.1 启动节点 一个节点就是一个运行在集群模式下的Redis服务器,Redis服务器在启动时会根据 cluster-enabled配置选.
2020-06-24 10:45:14 194
原创 十二、复制(Redis)
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务 器去复制(replicate)另一个服务器,我们称呼被复制 的服务器为主服务器(master),而对主服务器进行复制 的服务器则被称为从服务器(slave)。一、旧版复制功能的实现Redis的复制功能分为同步(sync )和命令传播(command propagate )两个操作:同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。命令传播操作则用于在主服务器的数据库状态被修改,导
2020-06-24 10:44:52 226 1
原创 十一、事件(redis)
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(file event) : Redis服务器通过套接字与客户端(或者其他Redis服务器) 进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其 他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来 完成一系列网络通信操作。时间事件(time event) : Redis服务器中的一些操作(比如serverCron函数)需 要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。
2020-06-23 17:05:16 255
原创 十、AOF持久化
Redis提供了 AOF ( Append Only Hie )持久化功能。与 RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存 Redis服务器所执行的写命令来记录数据库状态的。一、AOF持久化的实现1.1 命令追加当AOF持久化功能处于打开状态时,服务器在执行完一个写命令之后,会以协议格式 将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾SET KEY VALUE*3\r\n$3\r\nSET\r\n$3\r\nKEY\r\n$5\r\.
2020-06-23 17:04:52 284
原创 九、RDB持久化(redis)
因为Redis是内存数据库,它将自己的数 据库状态储存在内存里面,所以如果不想办 法将储存在内存中的数据库状态保存到磁盘 里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis提供了 RDB持久化功能,这个功能可以将Redis在内存中的 数据库状态保存到磁盘里面,避免数据意外丢失。RDB持久化既可以手动执行,也可以根据服务器配置选项执行,该功能可以将某 个时间点上的数据库状态保存到一个RDB文件中一、RDB文件的创建与载入创建RDB文件(rdbSave函
2020-06-23 17:04:27 206
原创 八、数据库(redis)
一、服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis . h/redis Server结构的db 数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一 个数据库。二、切换数据库默认情况下,Redis客户端的目标数据库为0号数据库,但客户端可以通过执行 命令来切换目标数据库三、数据库键空间Redis是一个键值对(key-value pair)数据库服务器,服务器中的每个数据库都由 一个redis .h/redi
2020-06-23 17:03:59 200
原创 七、对象(redis)
一、对象的类型与编码1.1type(类型)对于Redis数据库保存的键值对来说,键总是一 个字符串对象,而值则可以是字符串对象、列表对 象、哈希对象、集合对象或者有序集合对象的其中 一种。字符串对象:string INT EMBSTR RAW列表对象:list ZIPLIST LINKEDLIST哈希对象:hash ZIPLIST HT集合对象:set INTSET HT有序集合对象:zset ZIPLIS...
2020-06-23 17:03:37 149
原创 六、压缩列表(redis)
压缩列表(Ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量 列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就 会使用压缩列表来做列表键的底层实现一、压缩列表的构成zlbytes: 记录整个压缩列表占用的内存字节数zltail: 记录压缩列表表尾节点距离压缩列表的起始地址有多少字节zllen: 记录了压缩列表包含的节点数量entryX: 压缩列表包含的各个节点zlend: 特殊值OxFF (十进制25...
2020-06-23 17:03:14 228
原创 五、整数集合(redis)
整数集合(intset)是集合键的底层实现之一当一个集合只包含整数值元素,并且这 个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现一、整数集合的实现contents:数组1.保存元素的数组2.值的大小从小到大有序地排列3.数组中不包含任何重复项length:长度记录了整数集合包含的元素数量encoding:编码contents数组的真正类型INTSET_ENC_INT16INTSET_ENC_INT32INTSET_ENC_INT64二、
2020-06-23 17:02:52 193
原创 四、跳跃表(Redis)
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的 指针,从而达到快速访问节点的目的。一、跳跃表的实现Redis 的跳跃表由 redis . h/zskiplistNode 和 redis . h/zskiplist 两个结构定 义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构则用于保存跳 跃表节点的相关信息,比如节点的数量,以及指向表头节点和表尾节点的指针等等。1.1 跳跃表节点层(level):节点..
2020-06-23 17:01:54 318
原创 三、字典(redis)
一、字典的实现1.1 哈希表1.2 哈希表节点1.3 字典type属性和privdata属性是针对不同类型的键值对,为创建多态字典而设置的:二、哈希算法当要将一个新的键值对添加到字典里面时,程序需要先根据键值对的键计算出哈希值和 索引值,然后再根据索引值,将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。 Redis计算哈希值和索引值的方法如下:key的哈希值计算:hash=dict->type->hashFunction(key);..
2020-06-23 16:57:26 166
原创 二、链表(Redis)
一、链表节点二、链表三、特性双端:链表节点带有prev和next指针无环:表头节点的prev指针和表尾节点的next指针都指向NULL,对链表的访 问以NULL为终点带表头指针和表尾指针:通过list结构的head指针和tail指针,带链表长度计数器:程序使用list结构的len属性来对list持有的链表节点进 行计数多态:链表节点使用void*指针来保存节点值,并且可以通过list结构的dup、 free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存..
2020-06-23 16:56:39 90
原创 一、简单动态字符串
一、SDS定义二、SDS与C字符串的区别2.1常数复杂度获取字符串长度C:遍历 整个字符串,对遇到的每个字符进行计数SDS:SDS在len属性中 记录了 SDS本身的长度,更新插入操作会更新len2.2 杜绝缓冲区溢出C:容易造成缓冲区溢出,需要手动分配空间SDS:自动分配空间2.3减少修改字符串时带来的内存重分配次数空间预分配扩容时,sds长度小于1M,程序分配和sds长度相同的大小的未分配空间扩容时,sds长度大于1M,程序会分配1M...
2020-06-11 16:16:39 261
原创 五、rabbitMq存储
一、存储机制不管是持久化的消息还是非持久化的消息都可以被写入到磁盘。持久化的消息在到达队列 时就被写入到磁盘,并且如果可以,持久化的消息也会在内存中保存一份备份,这样可以提高 一定的性能,当内存吃紧的时候会从内存中清除。非持久化的消息一般只保存在内存中,在内 存吃紧的时候会被换入到磁盘中,以节省内存空间。这两种类型的消息的落盘处理都在 RabbitMQ的“持久层”中完成。持久层是一个逻辑上的概念,实际包含两个部分:队列索引(rabbit_queue_index)和 消息存储(rabbit_msg_s
2020-06-11 16:16:01 1245
原创 四、RabbitMQ分布式
一、集群如果RabbitMQ服务器遇到内存崩溃、机器掉电或者主板故 障等情况,该怎么办?单台RabbitMQ服务器可以满足每秒1000条消息的吞吐量,那么如果应 用需要RabbitMQ服务满足每秒10万条消息的吞吐量呢?购买昂贵的服务器来增强单机 RabbitMQ服务的性能显得捉襟见肘,搭建一个RabbitMQ集群才是解决实际问题的关键。RabbitMQ集群允许消费者和生产者在RabbitMQ单个节点崩溃的情况下继续运行,它可以 通过添加更多的节点来线性地扩展消息通信的吞吐量。当失去一个Rabbit
2020-06-11 16:15:16 821
原创 二、RabbitMQ 入门
一、概念介绍RabbitMQ整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消 息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收 件人的手上,RabbitMQ就好比由邮局、邮箱和邮递员组成的一个系统。从计算机术语层面来说, RabbitMQ模型更像是一种交换机模型。如图1.1生产者和消费者Producer:生产者,就是投递消息的一方。生产者创建消息,然后发布到RabbitMQ中。消息一般可以包含2个部分:消息体和标签 (...
2020-05-18 15:21:35 566
原创 三、消息的特殊用法
一、消息何去何从mandatory和immediate是channel.basicPublish方法中的两个参数,它们都有 当消息传递过程中不可达目的地时将消息返回给生产者的功能。RabbitMQ提供的备份交换器 (AlternateExchange)可以将未能被交换器路由的消息(没有绑定队列或者没有匹配的绑定)存 储起来,而不用返回给客户端。1.1 mandatory参数当mandatory参数设为true时,交换器无法根据自身的类型和路由键找到一个符合条件 的队列,那么RabbitMQ...
2020-05-18 15:20:18 400
原创 一、RabbitMQ 简介
一、什么是消息中间件1.1 简介消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串、 JSON等,也可以很复杂,比如内嵌对象。消息队列中间件(MessageQueueMiddleware,简称为MQ)是指利用高效可靠的消息传递 机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。1.2 基本模式消息队列中间件,也可以称为消息队列或者消息中间件。它一般有两种传递...
2020-05-12 17:27:08 398
原创 zookeeper分布式过程协同技术详解
一.简介1.1 zookeeper的使命1.1.1 zookeeper改变了什么zookeeper简化了开发流程,提供了更加敏捷健壮的方案。zookeeper可以让开发人员于其应用本身而不是神秘的分布式概率。1.1.2zookeeper不适用的场景zookeeper不适合作海量数据存储,zookeeper中实现了一组核心操作,通过这些可以实现很多常见分布式应用的任务。1....
2019-08-18 22:08:58 988
转载 tcp/ip面试题整理
1.TCP/IP:四层模型。①网络接口层:对应物理层和数据链路层。②网络层③传输层④应用层:包括会话层、表示层、应用层。2. TCP与UDP的区别。(1)TCP:面向连接,可靠的,速度慢,效率低。(2)UDP:无连接、不可靠、速度快、效率高。当进程需要传输可靠的数据时应使用TCP,当进程需要高效传输数据,可以忽略可靠性时应使用UDP协议。3.tc...
2019-07-16 15:02:03 1210
转载 (八)tcp/ip之超时重传与保活
超时重传机制超时重传指的是,发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数据包丢失,就会重新发送。这个等待时间被称为RTO. 检测丢失segment的方法从概念上讲还是比较简单的,每一次开始发送一个TCP segment的时候,就启动重传定时器,定时器的时间一开始是一个预设的值(Linux 规定为1s),随着通讯的变化以及时间的推移,这个定时器的...
2019-04-18 18:32:31 610
转载 (七)tcp/ip协议之拥塞控制和窗口滑动
从传输数据来讲,TCP/UDP以及其他协议都可以完成数据的传输,从一端传输到另外一端,TCP比较出众的一点就是提供一个可靠的,流控的数据传输,所以实现起来要比其他协议复杂的多,先来看下这两个修饰词的意义:1. Reliability ,提供TCP的可靠性,TCP的传输要保证数据能够准确到达目的地,如果不能,需要能检测出来并且重新发送数据。2. Data Flow Control,提供T...
2019-04-18 18:32:17 718
原创 “这一年”的收获
对“工作996,生病icu”的看法 2019是一个喧闹的一年,尤其在互联网行业,充斥着浮躁。最近IT互联网圈出现了一个比较火爆分项目,名字叫做“工作996,生病icu”。这是程序员发起的,很多IT大佬也参与其中,一起联名抵制这种伤身体的加班模式。其中现身说法的人很多,有业内人,也有业外人。 这里有个中肯的观点但也很泛。因为互联网发展带来的必然现象,在互联网的带领下很...
2019-04-14 22:23:46 581 2
转载 (六)tcp/ip之TCP协议
概述TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束才开始传输数据,最后结束通话。所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍...
2019-04-13 17:41:30 380
转载 (五)tcp/ip之DNS域名服务器
一. 根域就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域服务器我们知道有13台,但是这是错误的观点。根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的...
2019-04-13 15:49:11 929
转载 (四)tcp/ip之UDP协议
UDP协议在IP协议上增加了复用、分用和差错检测功能。UDP的特点:A)是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。B)是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。C)是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一...
2019-04-13 14:47:15 905
转载 (三)tcp/ip之广播和多播,IGMP协议
广播老板找某个高层谈话,这是一对一形式。当老板叫来所有高层谈话,那么就变为了一对多。计算机网络中也是如此,当一个主机需要和更多机器对话时,就有了广播和多播这种形式。广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由端口号确定)间存在一条连接。网卡经过配置都能接收目的地址为...
2019-04-12 17:39:34 812
转载 (二)tcp/ip协议之IP协议,ARP协议,ICMP协议
ip数据报:IP协议头当中,最重要的就是TTL(IP允许通过的最大网段数量,也就是上图的生存时间)字段(八位),规定该数据包能穿过几个路由之后才会被抛弃。路由表路由表的表项根据设备不同,可能是不同的。但是目的IP地址、网络掩码、网关、接口、标志这几项是必须存在的。例如跃点数metric,引用次数ref等在不同设备上可能不同。诸如IP地址、网络掩码等很好理解,那么网关和接口表项使...
2019-04-11 14:56:05 981
转载 (一)tcp/ip基础
TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。TCP/IP协议分层提到协议分层,我们很容易联想到ISO-OSI的七层协议经典架构,但是TCP/IP协议族的结构则稍有不同。如图所示TCP/IP协议族按照层次由上...
2019-04-10 11:19:42 138
转载 mysql查询优化
MYSQL查询语句优化MYSQL查询语句优化mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等。这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整理的,主要是查询语句上面的优化,其它层面的优化技巧在此不做记录。查询的开销指标:执行时间 检查的行数 返回的行数建立索引的...
2019-04-08 22:35:59 382
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人