自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 NIO入门

1.传统的同步阻塞式I/O编程2.基于NIO的非阻塞式I/O编程3.基于NIO2.0的异步I/O(AIO)编程4.为什么要使用NIO5.为什么使用Netty

2020-07-12 15:05:00 215 1

原创 RabbitMQ服务版本升/降级

RabbitMQ服务升级降级处理方式

2022-07-15 11:08:09 3183

原创 Rabbitmq managerment UI显示队列状态NaN

问题现象Rabbitmq线上出现客户端发送消息时报channelMAX. Limit 异常,经过查看管理界面发现:所有连接Channel数量都达到2047,且状态均为unconfirmed。创建的队列状态为NaN,且consumer数量为0。问题分析经过查询日志发现,上一个工作日,MQ集群出现了网络抖动导致的网络分区,集群通过自动处理的方式恢复网络分区状态。但是其中某些队列进行主动切换同步过程中出现了异常。问题队列无法正常接受消息进行落盘,所以应用发送消息到这个队列的时候就会发送失败,无法收到

2021-06-29 19:28:26 1702 1

原创 Linux性能优化实战—网络丢包

网络丢包的含义网络丢包,是指在网络数据的收发过程中,由于种种原因,数据包还没传输到应用程序中,就被丢弃了。衡量网络丢包情况的重要指标之一就是网络丢包率。可能造成网络丢包的原因根据ISO网络7层协议来进行网络丢包分析,每一层的错误都可能产生网络丢包,拿具体的示例来说明,整个丢包可能产生的原因如下图总结:上图展示了2个进程之间通讯时的整个数据流程,和在各个协议栈可能发生错误的原因。协议栈使用工具观察点数据链路层ethtool/netstat/tcRX-OK、RX-ERR、

2021-03-21 15:32:05 442

原创 Linux性能优化—网络模型

IO模型优化1. IO事件的通知机制水平触发和边缘触发水平触发:只要文件描述符可以非阻塞地执行 I/O ,就会触发通知。也就是说,应用程序可以随时检查文件描述符的状态,然后再根据状态,进行 I/O 操作。边缘触发:只有在文件描述符的状态发生改变(也就是 I/O 请求达到)时,才发送一次通知。这时候,应用程序需要尽可能多地执行 I/O,直到无法继续读写,才可以停止。如果 I/O 没执行完,或者因为某种原因没来得及处理,那么这次通知也就丢失了。2. 常用的非同步IO模型2.1 select和po

2021-03-13 16:36:25 133

原创 Linux性能优化—网络指标

网络性能指标通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的性能。带宽,表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)。吞吐量,表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者 B/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。延时,表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延

2021-03-07 20:24:17 221

原创 Linux性能优化——IO总结

1. LinuxIO栈图文件系统 I/O 性能指标存储空间的使用情况,包括容量、使用量以及剩余空间等索引节点的使用情况,它也包括容量、使用量以及剩余量等缓存使用情况,包括页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(如 ext4、XFS 等)的缓存结合实际文件的读写情况,比如,结合文件大小、文件数量、I/O 类型等考虑 IOPS(包括 r/s 和 w/s)、响应时间(延迟)以及吞吐量(B/s)等。磁盘 I/O 性能指标使用率,是指磁盘忙处理 I/O 请求的百分比。过高的使用率(

2021-02-28 12:15:51 793

原创 Linux性能优化—IO(三)

I/O 性能指标五个常见指标,使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标,是衡量磁盘性能的基本指标。使用率,是指磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味着磁盘 I/O 存在性能瓶颈。饱和度,是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求。IOPS(Input/Output Per Second),是指每秒的 I/O 请求数。吞吐量,是指每秒的 I/O 请求大小

2021-02-21 19:36:03 135

原创 Linux性能优化−io(二)

待补充

2021-02-14 21:54:28 102

原创 Linux性能优化——IO

保留项

2021-02-07 09:00:30 86

原创 Linux性能优化——内存(二)

Linux中的buffer和cache在linux系统中查看内存使用情况时,我们经常使用的工具—free工具显示的信息如下:# 注意不同版本的free输出可能会有所不同$ free total used free shared buff/cache availableMem: 8169348 263524 6875352 668 1030472 7611064S

2021-01-30 20:43:55 105

原创 Linux性能优化实践——内存管理(一)

Linux内存工作原理我们平时说到的内存通常指的是物理内存,比如说笔记本的配置内存8G,指的是笔记本的物理内存为8G。物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存。进程要访问内存时,是通过内存分配给每个进程的独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(也就是单个 CPU 指令可以处理数据的最大长度)的处理器,地址空间的范围

2021-01-23 19:58:01 122

原创 Linux软中断

含义中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。如果中断本身要做的事情不多,那么处理起来也不会有太大问题;但如果中断要处理的事情很多,中断服务程序就有可能要运行很长时间。特别是,中断处理程序在响应中断时,还会临时关闭中断。这就会导致上一次中断处理完成之前,

2021-01-16 21:35:10 109

原创 Linux性能优化——CPU优化(二)

Linux性能优化

2021-01-11 09:05:32 160 1

原创 Linux性能优化——CPU性能(一)

平均负载平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sl

2021-01-03 18:37:36 130

原创 K8S理解之Pod

Pod是 Kubernetes 项目中最小的 API 对象。为什么需要Pod?在 Borg 项目的开发和实践过程中,Google 公司的工程师们发现,他们部署的应用,往往都存在着类似于“进程和进程组”的关系。更具体地说,就是这些应用之间有着密切的协作关系,使得它们必须部署在同一台机器上。容器间的紧密协作,我们可以称为“超亲密关系”。这些具有“超亲密关系”容器的典型特征包括但不限于:互相之间会发生直接的文件交换、使用 localhost 或者 Socket 文件进行本地通信、会发生非常频繁的远程调用、需

2020-12-25 20:12:49 177

原创 Redis性能调优

Redis的性能在一定程度上会受到服务器CPU的多核架构影响。CPU多核架构一台计算机的处理器部分,在设计的时候有两种选择:多个单核CPU和单个多核CPU。两种选择,多个单核CPU和单个多核CPU。举个例子1个8核的处理器,可以有如下设计选择:把8个核全部做到一个大Die上,Die很大。这个Die加上一些外围电路组成一个单Die多核CPU。弄4个小Die,每个Die 2个内核,每个Die很小。把这4个Die,加上互联总线和外围电路,全部封装(Packaging)到一个多Die多核CPU中。还是弄

2020-12-18 20:51:14 794 2

原创 用户故事拆分心得

用户故事是从用户视角出发的,能够体现业务/用户价值的,对功能需求简短、扼要的描述。用户故事是描述对用户有价值的功能。用户故事包含三个要素:角色-谁要使用这个功能;功能-需要完成什么样的功能;价值-为什么需要这个功能,这个功能带来什么样的价值。用户故事需要遵循3C原则:卡片(Card)、对话(Conversation)和确认(Confirmation)。card: 一个精简的用户故事概述,方便团队快速识别,用于在过程中的计划和跟踪。它概括了意图,其细节有待确定。对话 (Conversati

2020-12-14 08:55:37 240 1

原创 SCRUM经验总结

在冲刺结束时要执行两个“检视与调整”:冲刺评审和冲刺回顾完成:在开发软件时,“完成”的最低限度的定义是应当产出一个完整的产品功能,经过设计、构建、集成、测试并且编写了文档敏捷原则可变性和不确定性积极采用有帮助的可变性采用迭代和增量开发通过检视、调整和透明来利用可变性同时减少各种各样的不确定因素预测和适应不到最后时刻,不轻易决定承认无法一开始就把事情做对偏好适应性,探索式的方法用经济合理的方法接收变化在预测型事前工作和适应型刚好几十的工作之间做出平衡经验认知快速

2020-12-06 22:47:38 135

原创 Redis数据库相关点

Redis 服务器的所有数据库都保存在 redisServer.db 数组中, 而数据库的数量则由 Configuration 中读取的 redisServer.dbnum 属性保存。客户端通过修改目标数据库指针, 让它指向 redisServer.db 数组中的不同元素来切换不同的数据库。数据库主要由 dict 和 expires 两个字典构成, 其中 dict 字典负责保存键值对, 而 expires 字典则负责保存键的过期时间。因为数据库由字典构成, 所以对数据库的操作都是建立在字典操作之上的.

2020-11-28 18:20:53 231

原创 K8S核心功能

Kubernetes 项目最主要的设计思想是,从宏观的角度,以统一的方式来定义任务之间的各 种关系,并且为将来支持更多种类的关系留有余地。在 Kubernetes 项目中所推崇的使用方法是:首先,通过一个“编排对象”,比如 Pod、Job、CronJob 等,来描述你试图管理的应用;然后,再为它定义一些“服务对象”,比如 Service、Secret、Horizontal Pod Autoscaler(自 动水平扩展器)等。这些对象,会负责具体的平台级功能。这种使用方法,就是所谓的“声明式 API”

2020-11-19 20:52:14 345

原创 容器编排

容器编排“编排”主要是指用户如何通过某些工具或者配置来完成一组虚拟机以及关联资源的定义、配置、创建、删除等工作,然后由云计算平台按照这些指定的逻辑来完成的过程。容器编排指的就是够定义容器组织和管理规范的工具,典型的是 Docker 公司的 Compose+Swarm 组合,以及 Google 与 RedHat 公司共同主导的 Kubernetes 项目。Docker 公司最后选择将开源项目与商业产品紧密绑定,打造了一个极 端封闭的技术生态。违背了 Docker 项目与开发者保持亲密关系的初衷。相比之下

2020-11-15 16:41:19 3559

原创 容器的存储

挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”,它有一个更专业的名字:rootfs(根文件系统),是一个操作系统的所有文件和目录,并不包含内核。由于 rootfs 里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它 运行所需要的所有依赖,都被封装在了一起。这就赋予了容器所谓的一致性:无论在本地、云端,还是在一台任何地方的机器上,用户只需要解压打包好的容器镜像,那么这个应用运行所需要的完整的执行环境就被重现出来了。Docker 在镜像的设计中,

2020-11-06 22:11:26 489

原创 容器基础——Cgroups

Cgroups 制造约束Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。Cgroups 给用户暴露出来的操作接口是文件系统,即它以文件和目录的方式组织 在操作系统的 /sys/fs/cgroup 路径下。在系统中执行mount -t cgroup 可以看到如下结果:可以看到,在 /sys/fs/cgroup 下面有很多诸如 cpuset、cpu、 memory 这样的子目录,也

2020-10-30 20:43:07 230

原创 容器基础——Namespace

什么是容器?容器其实是一种沙盒 技术。顾名思义,沙盒就是能够像一个集装箱一样,把应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。理解“边界”实现边界的手段1. 隔离—Namespace 修改进程视图Namespace机制:拿PID Namespace举个栗子:操作系统都会给每一个进程分配一个进程编号PID,比如PID=100,可以理解为这个进程是操作系统中的第100个进程,Docker会把这个某个程序运行在一个容器

2020-10-21 21:23:02 556

原创 scrum敏捷方法

scrum是什么?scrum是一套敏捷实践的fang方法论,scrum不是一个缩写,是一个橄榄球的术语。使用橄榄球和争球来隐喻miaomiao’shu描述产品开发。为什么要用scrum?我们在做产品开发时,想避免事前的大量架构设计,采用一种更均衡的设计方式,在开始的时候进行一些设计,然后在后续guo’cheng’zh过程中进行适量、适时的修改和优化。想要快速得到可交付市场的产品雏形,快速得到市场反馈。scrum带来的好处?客户满意投资回报提高成本降低迅速取得成果有信心在复杂的世界中取得成

2020-10-18 20:49:21 253

原创 敏捷实践总结

1.敏捷实践愿景:科技兴行、技术引导、以人为本、追求卓越VUCA(乌卡)时代怎么做?1.1 卓越文化技术引领,存进技术与业务的结合以人为本,始终以人为出发点和中心(实践者、布道者、驱动者)追求卓越,多种形式——改进形、读书会、编程大赛、技术操练、CoP社区分享、事故复盘分享1.2 质量内建持续集成 (质量保证、快速验证、减少重复、频繁集成)流水线步骤:代码获取-》构建-》自动测试、代码扫描=》打包、发布-》部署CI纪律:如果CI状态是红色的,禁止提交新代码;尽量频繁触发

2020-10-11 22:00:41 323 1

原创 Netty之私有协议栈开发(一)

1.私有协议栈定义通讯协议从广义上区分,可以分为公有协议和私有协议。公有协议是由公共的组织或机构公开定义的具有通用性的协议。而私有协议一般是某个公司或组织内部使用的协议,按需定制,不具有公开性。绝大多数的私有协议都是基于TCP/IP基础上定义的。私有协议并没有标准的定义,只要能够进行跨进程、跨主机的数据交换,这些非标准的协议都可以称为私有协议。2.Netty协议栈Netty协议栈用于Netty内部各个模块之间的通讯,基于TCP/IP设计,类似HTTP协议,相比传统的协议栈,更加轻巧和灵活。2.1

2020-09-20 19:48:07 313

原创 Netty权威指南——WebSocket协议开发

1.Http协议的弊端半双工传输消息格式造成的消息冗长繁复可能造成对服务器的长时间轮询攻击等黑客攻击2.WebSocket入门WebSocket是HTML5开始提供的一种全双工的网络通讯协议,WebSocket基于TCP协议进行双向全双工消息传输,通讯双方只需要进行一个握手,然后就形成了一个快速通道,两者就可以持续通讯。相对于HTTP协议来说,通讯性能得到了很大的提升。特点:单一tcp连接,全双工通讯模式对代理、防火墙、路由器透明无头部、cookie和身份验证无安全开销通过“pi

2020-09-13 11:51:25 212

原创 Netty权威指南——Http协议开发应用

1. 什么是HTTP协议?http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP协议进行通信

2020-09-06 18:27:43 145

原创 JBoss Marshalling 编解码

JBoss Marshalling是一个Java对象序列化包,对JDK默认的序列化框架进行了优化,但又保持了跟java的Serializable接口的兼容,同时增加了一些可调的参数和附加特性。1.Marshalling 工厂类Marshalling的可调参数和附加特性通过工厂类进行配置。使用工厂类定义Marshalling编解码器。public final class MarshallingCodeCFactory { /** * JBoss Marshalling 解码器

2020-08-29 12:22:29 407

原创 Google Protobuf

1.Google Protobuf是什么?Protobuf .是Google的语言无关,平台无关的可扩展机制,用于序列化结构化数据, 相比与 xml 等传统的序列化工具, 它更小、更快、更简单。github地址:protobuf源码地址优点:在谷歌内部长期使用, 产品成熟度高跨语言、支持多种语言, 包括 C++、Java 和 Python编码后的消息更小, 更加有利于存储和传输编解码的性能非常高支持不同协议版本的前向兼容支持定义可选和必选字段2.ProtoBuf的使用2.1 安装

2020-08-22 21:46:51 158

原创 MessagePack编解码

1.什么是MessagePackMessagepack是一个高效的二进制序列化框架,支持多语言,跟json很像,但是性能更快,序列化后的码流更小。官方说明:MessagePack官网MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it’s faster and smaller. Small integers

2020-08-16 22:07:24 659

原创 编解码技术

1.Java的编解码技术含义将java对象编码为字节数组写入文件,或用于网络传输,在读取文件或者接受数据的时候,将其再解码为java对象。从而引出Java进行编解码的目的:网络传输对象持久化java的序列化(实现Serializable接口)是java编解码技术中的一种实现方式。java序列化技术有以下缺陷:java序列化技术使用内部私有协议,无法跨语言序列化后的字节码数组太大;序列化的性能太低,耗时长;因此,远程服务调用(RPC)不直接使用java原生序列化技术。也正是因为这些原

2020-08-08 15:43:20 543

原创 分隔符和定长解码器

TCP以数据流的方式进行数据传输,上层应用通常采用以下4种方式来对数据流进行解析,解析出每个业务基本的消息内容:定长消息:消息长度固定,读取到固定长度的数据报文后停止;计数器重置,再开始下一个报文。回车换行符为结束符:...

2020-08-01 18:52:29 259

原创 TCP粘包/拆包问题的解决方法

1.什么是TCP的粘包/拆包TCP的粘包和拆包,指的是上层同一个业务逻辑中的数据可能再发送过程中被TCP拆成多个包,或多个小包连成一个大包发送出去,从而导致业务处理逻辑出错的问题。造成TCP粘包/拆包的原因:应用程序写入的字节长度大于发送缓冲区大小;进行MSS大小的TCP分段;以以太帧的payload大于MTU进行IP分片。2.怎么解决粘包/拆包问题3.粘包/拆包问题案例4.使用Netty解决粘包/拆包问题...

2020-07-26 12:05:49 1211

原创 Netty入门应用

使用Netty编写一个时间服务器服务端程序public class TimeServer { public void bind(int port) throws InterruptedException { NioEventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoopGroup workerGroup = new NioEventLoopGroup(); try {

2020-07-19 15:43:33 135

原创 Java的I/O演进之路

1.I/O介绍按照百度百科上对IO的定义来说,计算机领域的I/O指的是输入/输出流,输入输出I/O流可以看成对字节或者包装后的字节的读取就是拿出来放进去双路切换;实现联动控制系统的弱电线路与被控设备的强电线路之间的转接、隔离,以防止强电窜入系统,保障系统的安全。Unix提供了5中I/O模型:阻塞I/O模型(blocking I/O):缺省情况下,所有操作都是阻塞的。非阻塞I/O模型(noblocking I/O):定时轮训是否有数据到来,无数据返回固定错误码,有数据则进行数据复制I/O多路复用模

2020-07-05 10:36:58 288

空空如也

空空如也

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

TA关注的人

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