Netty筆記

堆外內存增漲異常html

Netty 系列之 Netty 百萬級推送服務設計要點git

如何設置Netty的接收Buffer爲堆內存模式github

Netty 基本組件小結--Channel、EventLoop、Bootstrap等安全

關於Netty的ByteBuff內存泄漏問題負載均衡

堆外內存的回收機制分析異步

Netty堆外內存回收原理詳解jvm

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

追蹤 Netty 異常佔用堆外內存的經驗分享

Netty堆外內存泄露排查盛宴

 

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 用於處理入站和出站事件。

相關文章
相關標籤/搜索