Redis测试小结

Redis的作者给出的性能数据是每秒200K的set和get。可是我测的结果总是在30K这个水平。到底哪里出了问题?

先说说自己的测试机器:

操作系统是solaris 10. 4个CPU,Intel3.4Ghz。8G的物理内存。Redis是最新版本2.2.11. 客户端是jedis,版本是2.0

客户端和redis运行在同一台机器上。

测试思路:

1.用ExecutorService起一个线程池(初始化的线程数是100)

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

2.new了一个JedisPool。这个pool我增加了maxActive=15

3.for循环向executor.submit(new JedisWriteJob())

4.executor.shutdown().

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

教训就是轮训害死人。

你可能感兴趣的:(Redis测试小结)