堆外內存增漲異常html
Netty 系列之 Netty 百萬級推送服務設計要點git
如何設置Netty的接收Buffer爲堆內存模式github
Netty 基本組件小結--Channel、EventLoop、Bootstrap等安全
netty4 UDP的使用socket
Multi threaded behavior with UDP server does not seem to work (4.0.6.Final) #1706:netty使用多個線程accept UDP。elasticsearch
Multi threaded UDP server with Nettyide
channel:socket的升級版,對應一個鏈接
EventLoopGroup:netty線程池
EventLoop:netty的線程,EventLoop對應不少個channel,一個channel只能對應一個EventLoop。UDP不是面向鏈接的,是面向報文的,因此一個端口就是一個NioDatagramChannel,只能對應一個EventLoop。因此默認狀況下,只會有一個線程來處理UDP的accept,除非使用EpollEventLoopGroup(SO_REUSEPORT),本質上是多個線程監聽同一個端口,經過OS作負載均衡。
NioEventLoop 中維護了一個線程和任務隊列,支持異步提交執行任務。
Bootstrap 是客戶端程序的啓動引導類,UDP只能用Bootstrap。
ServerBootstrap 是服務端啓動引導類,TCP server,定義分別指定boss和worker EventLoopGroup:netty。
ByteBuf:
pool和unpool:是否池話管理的內存
heap和direct:堆內存仍是堆外內存
safe和unsafe:是否容許使用堆外內存,直接讀寫堆外內存是不安全的,可能出現OS層面錯誤致使jvm core dump。-Dio.netty.noUnsafe=true使用堆內存。
相比於C語言的誰申請誰釋放,netty則是誰最後使用誰釋放。
writeAndFlush():
執行writeAndFlush,會把數據送到outHandler鏈。
Future 和 ChannelFuture:
提供了另外一種在操做完成時通知應用程序的方式。這個對象能夠看做是一個異步操做的結果的佔位符;它將在將來的某個時刻完成,並提供對其結果的訪問。
ChannelPromise:
是ChannelFuture的擴展,容許設置I/O操做的結果,使ChannelFutureListener能夠執行相關操做
Selector:
Netty 基於 Selector 對象實現 I/O 多路複用,經過 Selector 一個線程能夠監聽多個鏈接的 Channel 事件。
【ChannelHandler】:
ChannelHandler 是一個接口,處理 I/O 事件或攔截 I/O 操做,並將其轉發到其 ChannelPipeline(業務處理鏈)中的下一個處理程序。
ChannelHandler 自己並無提供不少方法,由於這個接口有許多的方法須要實現,方便使用期間,能夠繼承它的子類:
ChannelInboundHandler 用於處理入站 I/O 事件。
ChannelOutboundHandler 用於處理出站 I/O 操做。
或者使用如下適配器類:
ChannelInboundHandlerAdapter 用於處理入站 I/O 事件。 ChannelOutboundHandlerAdapter 用於處理出站 I/O 操做。 ChannelDuplexHandler 用於處理入站和出站事件。