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占用率立刻就下来了。

教训就是轮训害死人。

相关文章
相关标签/搜索