Redis測試小結

Redis的做者給出的性能數據是每秒200K的set和get。但是我測的結果老是在30K這個水平。到底哪裏出了問題?redis

先說說本身的測試機器:性能

操做系統是solaris 10. 4個CPU,Intel3.4Ghz。8G的物理內存。Redis是最新版本2.2.11. 客戶端是jedis,版本是2.0測試

客戶端和redis運行在同一臺機器上。spa

測試思路:操作系統

1.用ExecutorService起一個線程池(初始化的線程數是100)線程

new ThreadPoolExecutor(THREAD,THREAD,1000,TimeUnit.MILLISECONDS,queue);對象

2.new了一個JedisPool。這個pool我增長了maxActive=15內存

3.for循環向executor.submit(new JedisWriteJob())get

4.executor.shutdown().it

5.for(;;)判斷executor.isTerminated()來決定是否全部的task都已經完成。而後計數,算tps。

6. JedisWriteJob的邏輯是:

for循環裏面生成一個Jedis對象,而後調用Jedis.set()方法。

我在運行中發現,機器的總cpu的佔用率已經接近100%。這個時候redis大概佔用了20%多,個人測試客戶端大概佔用了60%多。

這個機器上裝的是vmware。不是我獨享的。這是否是一個問題?不知道。沒有更好的機器了。

仍是本身的測試思路有問題?


問題的根源在與不該該用for(;;) execute.isTerminated()方法來判斷是否全部的task都已經完成。應該用下面這個方法:

executor.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);

這樣機器的cpu佔用率立刻就下來了。

教訓就是輪訓害死人。

相關文章
相關標籤/搜索