MemcachedClient4J測試報告

目的

主要是瞭解MemcachedClient4J實際性能,對下步優化提供依據 react

場景

採用跟spymecached對比測試,分別在大負荷的狀況下,觀察二者性能表現,主要觀察指標有耗時和出錯率。 centos

測試環境

mecached服務器 服務器

數量:1 多線程

系統:centos 6.4  框架

cpu:Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz memcached

內存:4G 性能

mecached參數:內存512M 測試


客戶端 優化


系統:centos 6.4  spa

cpu:Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz

內存:4G

jdk:1.6.0_38-b05


Netty :     3.7.0.Final  設置TCP_NODELAYtrue  io workercpus個數

測試結果



結論和分析

MemcahcedClient4J在一樣的壓力下表現比spymemcached較好,但差距不是很大,這也是我意料之中。memcachedClient4J所使用的netty框架是支持多線程worker,測試只有一個memcached節點,實際上全部讀寫處理仍是由同一個worker線程處理,跟單線程nio的spymemcached基本處理同一個等級水平。可是netty對IO寫都有一個小優化,一般的NIO寫操做都是放入一個緩衝隊列,等待reactor去寫。在隊列爲空的狀況下,netty都會直接調用channel.write,而非放入緩衝隊列註冊OP_WRITE,減小了線程切換和註冊事件的開銷。這個優化的前提是寫的線程就是Reactor線程,不然若是是用戶線程,用戶線程的的中斷會引發channel的關閉。spymecache代碼很是複雜,每一個節點要維護三個隊列(inputQueue,writeQueue,readQueue),三個隊列數據變化都要調用fixupOPS,這個方法主要是根據節點狀態來註冊讀寫事件,常常註冊事件也是一筆很多開銷。

相關文章
相關標籤/搜索