一次Redis 的性能测试和问题 [问题已经自己解决,见文章最后]
【我的问题】:请教个问题,我在本机搭建linux虚拟机+redis 3.2.6,然后在本机物理机上面测试虚拟机的redis性能,如下VM配置参数做测试,redis 的性能好像不算太好,问题待排查的两点如下:
1. 硬件方面:win 7本地物理机个人台式电脑(一个 i7 CPU) ,上面挂载的服务器VM虚拟机 ?
2. 软件方面:VM虚拟机上面的Redis 3.2.6 配置参数没有配置为最佳状态?
【期望结果】
硬件不变的情况下,将上面的redis的单线程和多线程的写入性能分别提升3~5倍。
【测试结果如下】:
2.1 多线程:1W次 写请求 ,并发成功次数为9760次,总耗时19.981秒
2.2 单线程:1W次 写请求 ,并发成功次数为1W次,总耗时6.973秒
【测试详情如下】:
一. 测试环境:
客户端:物理机 192.168.3.6 (16GB内存 + SSD 256GB系统盘 + i7 CPU 8核多线程)
服务器:VM虚拟机 192.168.3.44 ( 2GB 内存 + VM分配 4CPU + Redis3.2.6 + CentOS 6.5 x64 )
二. 测试结果
2.1 多线程:1W次请求 ,并发成功次数为9760次,总耗时19.981秒
2.2 单线程:1W次请求 ,并发成功次数为1W次,总耗时6.973秒
问题已经解决:
最后发现导致并发性能上不去的原因:就是因为每次执行测试方法都输出当前进度信息到屏幕,这个比较耗时,
并且是有资源争夺互斥。去掉显示每次执行显示进度后,多线程压力测试或单线程压力测试的性能就提高3~5倍了如下图:
至于为何这里多线程反而笔单线程慢,是因为我测试环境,客户端和Redis所在虚拟机都是在同一台物理个人PC上面,所以CPU的使用,物理机和虚拟机抢夺CPU使用,导致程序并发时候性能较低。
1. 单线程:每秒写入Redis的速度为5073 次/秒 (平均值)
2. 多线程:每秒写入Redis的速度为3600 次/秒 (平均值)