一、 测试目的
1) 测试Memcached与Redis,在key随机大小的情况下性能如何;
2) Memcached达到内存上限时,会根据LRU(Least Recently Used最近最少使用)算法置换掉老的数据,测试当出现这种情况时,其性能如何;
3) Redis达到内存上限时,会根据LRU算法,将高频key保存在内存,低频key转到交换文件,测试当出现这种情况时,其性能如何。
二、 测试环境
1、 网络环境
如图1所示,42、43均连接至千兆交换机,其中42为服务端,43为客户端:
                                        图1
2、 硬件环境
IP
型号
OS
CPU
内存
硬盘
网卡
用途
192.168.0.42
HP刀片
RedHat6.2 x86_64
Intel(R)  Xeon(R)
E5410 @ 2.33GHz 8核
16G
68G
1000Mb/s
被压机
192.168.0.43
HP刀片
RedHat6.2 x86_64
Intel(R)  Xeon(R)
E5410 @ 2.33GHz 8核
16G
68G
1000Mb/s
加压机
3、 软件环境
软件名称
软件版本
是否开源
memcached
v1.4.15
libevent
v2.0.21-stable
redis
v2.6.5
三、 测试结果
在2到100字节范围内生成随机大小的key,加上10字节的value组成每条数据记录内容;每次操作线程数为50个,每线程10万条记录,在老数据基础上进行测试;老数据基础分别为0万、500万、1000万、1500万条……,依次类推每次测试增长500万条,分别测试insert、select、update情况;
因为Redis在写入8千万条时,开始启动虚拟内存,此时意味着物理内存不够用,再加上受快照持久化子进程同时抢占系统资源的影响性能出现拐点,在此拐点前其性能都与7千500万的情况差不多,所以性能曲线图将只描述7千500万后的测试情况;
Redis快照持久化过程如下:
1) 达到持久化条件,Redis调用fork创建一子进程;
redis doc
2) 父进程继续维护自己的内存空间并同时处理client端的请求,而子进程负责将fork时刻整个数据库的一个快照写入到临时文件;
3) 当子进程将快照写入临时文件结束后,会用这个临时文件替换原来的快照文件,然后子进程退出;
注:每次快照持久化都是将内存数据完整的写入磁盘一次,并不是增量的同步数据;
1、 insert操作性能对比
1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次写,平均用时如图2-1、图2-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
99800.40
102796.05
100020.00
103950.10
105086.17
76405.87
104733.98
100260.68
redis
69213.73
32784.74
37855.84
1964.88
1204.61
1032.06
636.27
396.13
                                      图2-1
图2-2
        说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);
2) CPU使用情况,如图3-1、图3-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
151.74
149.50
150.27
151.53
147.30
322.40
172.72
176.30
redis
92.33
51.18
54.77
3.64
2.15
1.81
1.19
0.85
                                图3-1
                                图3-2
说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);
3) MEM使用情况,如图4-1、图4-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
66.70
70.98
75.00
79.14
83.32
88.90
89.91
89.91
redis
78.37
77.44
77.51
70.20
63.14
64.95
62.92
52.86
                                图4-1
                                图4-2
说明:纵轴为占用内存平均百分比,横轴为老数据基础(单位:千万);
4) 每秒页面错误,如图5-1、图5-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
redis
0.00
40.45
25.44
88.05
87.17
67.92
65.75
71.76
                                图5-1
                                图5-2
说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:千万);
5) 磁盘IO读情况,如图6-1、图6-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
redis
0.00
1133.09
640.45
1765.67
1020.74
929.70
810.64
970.32
                                图6-1
                                图6-2
说明:纵轴为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);
6) 磁盘IO写情况,如图7-1、图7-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
redis
446.45
244.75
18.74
0.85
0.28
0.25
0.19
0.15
                                图7-1
                                图7-2
说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);
2、 select操作性能对比
1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次读,平均用时如图8-1、图8-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
104362.35
103541.11
104318.80
103584.01
105685.90
104668.20
104777.87
104362.35
redis
84246.00
71357.21
26028.11
17028.81
1110.66
5135.26
4237.40
2439.39
图8-1
                                图8-2
说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);
2) CPU使用情况,如图9-1、图9-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
119.46
118.08
116.41
119.65
120.86
119.19
114.96
115.94
redis
95.37
83.53
31.16
21.00
1.57
5.81
4.76
2.84
图9-1
                                图9-2
说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);
3) MEM使用情况,如图10-1、图10-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
68.76
72.89
77.02
81.14
85.27
89.91
89.91
89.91
redis
73.97
72.42
73.12
62.06
51.97
52.81
26.05
42.23
图10-1
                                图10-2
说明:纵轴为占用内存平均百分比,横轴为老数据基础(单位:千万);
4) 每秒页面错误,如图11-1、图11-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
redis
0.00
8.20
62.00
72.76
91.72
60.28
153.14
61.65
图11-1
                                图11-2
说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:千万);
5) 磁盘IO读情况,如图12-1、图12-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
redis
0.00
2938.22
1803.65
2311.26
1256.08
1037.88
1670.56
1017.99
图12-1
                                图12-2
说明:纵轴为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);
6) 磁盘IO写情况,如图13-1、图13-2示:
 
7.50
8.00
8.50
9.00
9.50
10.00
10.50
11.00
memca
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
redis
0.58
64124.22
0.51
0.38
0.16
0.26
0.32
0.20
图13-1
                                图13-2
说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。