1. 程式人生 > >netty高效能原因,netty調優

netty高效能原因,netty調優

從大的方面看,netty效能高效主要體現在: 1.io執行緒模型 使用reactor模式,同步非阻塞。這決定了可以用最少的資源做更多的事。 2.記憶體零拷貝 使用直接快取 3.記憶體池設計 申請的記憶體可以重用,主要指直接記憶體。 內部實現是用一顆二叉查詢樹管理記憶體分配情況。 4.串形化處理socket讀寫,避免鎖,即一個指定socket的訊息是串形化處理的。這樣效能比多個執行緒同時 處理一個socket對應訊息要好,因為多執行緒處理會有鎖。 5.提供對protobuf等高效能序列化協議支援 應用netty調優: 1.若只希望該handler處理完後,交給下一個handler處理,則呼叫: ChannelHandlerContext的fireRead之類的方法。 直接通過channel.read或write則會觸發完整的handler處理鏈。 2.SimpleChannelInboundHandler讀取完並且全部handler處理完後,會自動釋放訊息。 ChannelInboundHandlerAdapter不會自動釋放訊息。 3.ServerSocketChannel一次loop預設最多處理16次客戶端連線,這個主要是因為服務端會對應很多客戶端,保證較高的吞吐量。 對應引數:MAX_MESSAGES_PER_READ 4.WRITE_BUFFER_LOW_WATER_MARK可用於做流控 需要應用呼叫isWritable方法,如果返回false暫時寫失敗。 5.直接記憶體使用,零拷貝。直接記憶體塊快取池設計。 6.避免多執行緒在從記憶體塊快取池中獲取記憶體塊發生阻塞競爭,小塊記憶體大小從執行緒獨有的cache中獲取。 7.reactor模式核心是用最少的資源處理最多的事情,一個reactor執行緒負責檢視註冊的關心事件
8.軟中斷 linux 2.6.35以上版本可以設定rps,主要目的是將資料包的處理均勻打散在每個cpu上。提升網路處理能力。 9.設定tcp引數 主要是接收快取區大小:SO_RCVBUF,及傳送快取區大小:SO_SNDBUF。 關閉SO_TCPNODELAY,對於要求延遲小的應用。