林烟夜暖

阅读JDK、框架源码的总结,微服务、RPC、服务治理实践等

Java问题排查命令

Java问题排查命令 1. 查看线程堆栈状态 jstack -l <pid> | grep java.lang.Thread.State | awk '{print $2$3$4$5}' | sort | uniq -c 输出: 23 BLOCKED(onobjectmonitor) 28 RUNNABLE 2 TIMED_WAITING(onobjectmonit...

Netty 高并发性能调优

Netty 高并发性能调优 一、单机百万连接调优 1.如何模拟百万连接 服务端单机绑定8000至8100这100个端口,来模拟单机百万连接。 2.突破局部文件句柄限制 unlimit -n 查看单进程最大文件句柄数限制 /etc/serucity/limits.conf追加下面两行 * hard nofile 1000000 * s...

Netty 轻量级对象池Recycler分析

Recycler

Netty 轻量级对象池Recycler分析 Recycler对象池在Netty中使用广泛,主要用来完成对象的管理,如获取对象、对象用完之后回收对象,这样下次再获取该类型对象时可以直接从对象池中获取,减少对象的创建性能消耗。如PooledUnsafeDirectByteBuf中对象池的使用: private static final Recycler<PooledUnsafeDir...

Netty FastThreadLocal分析

FastThreadLocalThread/InternalThreadLocalMap

Netty FastThreadLocal分析 Netty中FastThreadLocal用来代替ThreadLocal存放线程本地变量,从FastThreadLocalThread类型的线程中访问本地变量时,比使用ThreadLocal会有更好的性能。 FastThreadLocal使用InternalThreadLocalMap存放实际的数据。和ThreadLocal实现方式类似,F...

Netty writeAndFlush分析

MessageToByteEncoder/HeadContext

Netty writeAndFlush分析 前面Netty pipeline分析(一)、Netty pipeline分析(二)两篇文章介绍了Channel pipeline的事件传播机制,本篇文章主要介绍Netty写事件writeAndFlush()的传播细节。 如上图所示是channel的pipeline结构。其中biz channelhandler里调用ctx.channel.w...

Netty拆包器分析

ByteToMessageDecoder/LengthFieldBasedFrameDecoder

Netty拆包器分析 所谓拆包,指的是Netty读取到的二进制数据流(ByteBuf)首先需要经过拆包器的拆包之后得到一个个完整的业务数据包(ByteBuf),这样子完整的业务数据包才能交给业务数据包解码器解码,最终得到业务Java对象。Netty里拆包器的抽象基类是ByteToMessageDecoder,具体的拆包器有FixedLengthFrameDecoder、LineBasedF...

Netty内存管理

ByteBuf/ByteBufAllocator

Netty内存管理 在Netty中,ByteBuf随处可见,作为读写数据的字节容器,ByteBuf的内存分配十分复杂且值得仔细研究。本文从ByteBuf和ByteBufAllocator两大抽象开始,详细分析Netty内存分配与回收的细节。 本文内容: 内存与内存分配器的抽象 不同规格大小和不同类别的内存的分配策略 内存的回收过程 一、ByteBuf 1.结构 ...

Netty pipeline分析(二)

ChannelPipeline/ChannelHandlerContext

Netty pipeline分析(二) Netty pipeline分析(一)这篇文章分析了pipeline在Netty中所处的角色,像是一条流水线,控制着字节流的读写。本文在这个基础上继续深挖pipeline在事件传播、异常传播等方面的细节。主要分为以下几点: Netty中的Unsafe inbound事件的传播 outbound事件的传播 异常事件的传播 一、N...

Netty pipeline分析(一)

ChannelPipeline/ChannelHandlerContext

Netty pipeline分析(一) 从前面Netty服务端启动流程分析、新连接接入分析等文章可以知道,在Netty服务端启动创建NioServerSocketChannel和客户端新连接接入创建NioSocketChannel时,会创建对应的ChannelPipeline。它可以看作是一条流水线,原始的原料(字节流)进来,经过加工,最后输出。本文以新连接接入为例,来分析ChannelP...

Netty新连接接入分析

NioSocketChannel

Netty新连接接入分析 本篇文章介绍Netty新连接接入时的处理逻辑,包括检测新连接、创建NioSocketCHannel、新连接分配NioEventLoop并注册到Selector、向Selector注册读事件等。阅读本文前,最好先了解Netty服务端启动流程分析、Netty NioEventLoop分析这两篇文章,熟悉一下Netty服务端启动流程以及Netty NIO线程(React...