MistRay

Thinking will not overcome fear but action will.

记一次堆外内存泄露的排查过程

内存泄露

记一次堆外内存泄露的排查过程 背景 生产上运行的某个服务使用了Netty提供的组件作为HTTP服务器,里面运行着我们的核心业务。由于该服务在最开始的时候新增功能的频率较高,所以大约每两周就要上线一次,一直相安无事。 但随着服务运行逐渐稳定,功能逐步完善,上线的频率变得很低。终于在两个多月后的一天,该服务所在的服务器发均出了报警,报警内容是服务器内存使用量超过了80%。 分析问题 首先我...

常见的锁类型

SQL

了解常见的锁类型 该篇文章转自解决死锁之路 - 了解常见的锁类型 在上一篇博客中,我们学习了事务以及事务并发时可能遇到的问题,并介绍了四种不同的隔离级别来解决这些并发问题,在隔离级别的实现一节中, 我们提到了锁的概念,锁是实现事务并发的关键。其实,锁的概念不仅仅出现在数据库中,在大多数的编程语言中也存在, 譬如 Java 中的 synchronized,C# 中的 lock 等,所以对于...

事务与隔离级别

SQL

前言 近两天在nCoV的影响下,公司下达任务的强度也下降了,就想趁着这段时间重温下SQL基础.在重温的过程中,一些原本自己认为已经掌握的很好的东西也渐渐模糊起来. 写这一系列主要是因为看到了github上的一个库mysql-deadlocks,主要记载了一些常见的MySQL死锁案例. 里面有关于死锁的博文, 在阅读后才发现自己对于SQL乃至锁相关的知识是多么的薄弱.所以这里题主就想着根据博文...

crontab定时任务

crontab

crontab定时任务 crontab是用来定期执行程序的命令。在MacOS和Linux上都有广泛的使用。 CRON表达式 CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。 注释以注释标记#开始,并且必须单独在一行上。 例子: # 每月的最后1天 0 0 L * * * 说明: Linux * * ...

Netty的指挥中心-ChannelPipeline

Netty学习指北08

Netty学习指北08 在上一篇中围绕ChannelHandler进行了简要概括. 而这时需要思考一个问题,ChannelHandler到底是由什么控制, 多个ChannelHandler的执行顺序又是怎样的呢? ChannelPipeline接口 每创建一个Channel都将会被分配一个新的ChannelPipeline.这项关联是永久性的; Channel既不能附加到另一个Channe...

Netty的核心处理-ChannelHandler

Netty学习指北07

Netty学习指北07 在ChannelPipeline中将ChannelHandler链接在一起以组织处理逻辑. Channel的生命周期 Interface Channel 定义了一组和ChannelInboundHandler API密切相关的简单且功能强大的状态模型. 状态 描述 Channel...

Netty的心跳机制-IdleStateHandler

Netty学习指北06

Netty学习指北06 心跳机制常见于长连接场景中.例如在TCP长连接中,客户端和服务端之间定期发送的一种特殊的数据包, 通知对方自己还在线,以确保TCP的有效性. 心跳机制的原理 网络是不可靠的,在TCP保持长连接的过程中,由于某些突发状况,例如网线被拔,突然停电,运营商瘫痪等, 会造成服务器和客户端连接中断,在这些突发状况下,如果客户端和服务端恰好没有交互,那么它们是不能在短时间内发...

Netty的Timer调度-时间轮HashedWheelTimer

Netty学习指北05

Netty学习指北05 Netty作为一个非阻塞I/O客户端-服务器框架,自然要维护大量的连接,每一个连接都包含着许多定时任务. 例如发送超时,定时重试,心跳检测等,如果每个定时任务都启动一个Timer会消耗大量的资源. 所以,Netty提供了专门用于维护大量Timer调度的工具HashedWheelTimer. 该篇文章源码解析部分大量借鉴了netty源码解读之时间轮算法实现-Hashe...

Netty的数据容器-ByteBuf-02

Netty学习指北04

Netty学习指北04 ByteBuf提供了许多超出基本读,写操作的方法用于修改它的数据. 字节级操作 随机访问索引 如同普通的Java字节数组中一样,ByteBuf的索引是从零开始的:第一个字节的索引是0, 最后一个字节的索引总是,capacity() -1.对存储机制的封装使得遍历ByteBuf的内容非常简单. ByteBuf buffer = ...; for(int i = 0;...

Netty的数据容器-ByteBuf-01

Netty学习指北03

Netty学习指北03 ByteBuf类–Netty的数据容器 因为所有的网络通信都涉及字节序列的移动,所以高效易用的数据结构明显是必不可少的. Netty的ByteBuf实现满足并超越了这些需求. 1.ByteBuf的API Netty的数据处理API通过两个组件暴露–>abstract class ByteBuf和interface ByteBufHolder. 下面是一些B...