主要是瞭解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_NODELAY爲true io worker爲cpus個數
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,這個方法主要是根據節點狀態來註冊讀寫事件,常常註冊事件也是一筆很多開銷。