转载:http://wenku.baidu.com/view/38a195c02cc58bd63186bdcb ;
Memcached客户端性能评测报告
1. Memcached客户端简介
本次memcached客户端评测以JAVA开源客户项目为评测对象,分别选择Memcached-Java-Client、spymemcached、xmemcached、alisoft xplatform asf cache四个项目,其中分别由两个产品基于堵塞式IO和NOI实现的客户端、两个国内开源项目或两个国外开源项目。
选择的客户端简介如下:
n Memcached-Java-Client
Memcached-Java-Client是官方提供的基于传统阻塞io客户端。官方网址为http://www.whalin.com/memcached/。
n alisoft xplatform asf cache
alisoft xplatform asf cache是阿里开源的memcached集群的客户端,它是基于Memcached-Java-Client的衍生版本。配置简单,使用也简单,有很详细的中文文档。官方网址为http://code.google.com/p/memcache-client-forjava/。
n spymemcached
spymemcached是基于Java NOI、单线程、异步处理的高性能memcached客户端,spymemcached对数据的操作采用异步处理方式,对于相同的缓存数据查询操作可以自动进行归并,避免多次服务器请求。spymemcached官网网址为:http://code.google.com/p/spymemcached/。
n xmemcached
Xmemcached是基于Java NOI、线程安全、同步处理的高性能memcached客户端,支持memcached所有的二进制协议(从1.2.0开始)和文本协议,并且支持对Kestrel(一个scala写的MQ)的兼容访问。官方网址为http://code.google.com/p/xmemcached/,基本入门指南见http://code.google.com/p/xmemcached/wiki/User_Guide_zh。
2. 测试场景说明
2.1. 测试环境说明
n 测试机环境
CPU:双核2.53G
MEM:2G
OS:Linux Ubuntu 11.10 3.0.0-16-generic
n Memcached
Memcached版本为1.4.13。
n JDK
JDK版本为1.7。
n 客户端
所有客户端均采用最新版本,具体版本如下:
u Memcached-Java-Client 2.6.3
u Spymemcached 2.8.0
u Xmemcached 1.3.5
u alisoft xplatform asf cache 2.5.1
2.2. 测试用例
Memcached在测试机启动两个服务端口11211和11212。客户端同时连接两个memcached服务。
性能测试采用三种不同的测试用例。
用例1:随机生成100个32位长度的字符串,使用UUID作为key值,分别进行数据写入、数据读取、数据删除操作。
用例2:随机生成长度为50的HashMap对象(约4k数据量),使用UUID作为key值,分别进行数据写入、数据读取、数据删除操作。
用例3:在100并发线程下,对数据进行新增、获取、删除操作,数据的字节数从64Byte依次累加到51200字节(500k),具体测试数据包括,64、128、256、512、1024、2048、5120、10240、20480、51200、102400、204800、512000。
针对两个测试用例,使用nanobench进行压力测试,使用不同的线程数共进行1000次请求(针对Memcached-Java-Client客户端在实际测试过程中,如使用1000次请求,系统出现too many open files错误,最后降低为500次请求)。
3. 测试结果分析
3.1. 写入性能分析
数据写入性能分析情况如下:
简单对象写入TPS分析
复杂对象写入TPS分析
简单对象写入内存占用分析
复杂对象写入内存占用分析
在较高并发情况下,xmemcached性能优于Spymemcached,在低并发情况下,Spymemcached略优于xmemcached。
在数据写入方面,总体性能排名如下:xmemcachedàspymemcachedà alisoft xplatform asf cacheàMemcached-Java-Client;内存占用方面:xmemcachedàMemcached-Java-Client à alisoft xplatform asf cacheàspymemcached。
3.2. 读取性能分析
数据读取性能分析情况如下:
简单对象读取TPS分析
复杂对象读取TPS分析
简单对象读取内存占用分析
复杂对象读取内存占用分析
在数据读取方面,总体性能排名如下:xmemcachedàspymemcachedàMemcached-Java-Client à alisoft xplatform asf cache;在内存占用方面: xmemcachedàspymemcachedà Memcached-Java-Client à alisoft xplatform asf cache。
3.3. 删除性能分析
数据输出性能分析情况如下:
简单对象删除TPS分析
复杂对象删除TPS分析
简单对象删除内存占用分析
复杂对象删除内存占用分析
在数据删除方面,总体性能排名如下:spymemcachedàxmemcachedà alisoft xplatform asf cache à Memcached-Java-Client;在内存占用方面: xmemcachedàspymemcachedà Memcached-Java-Client à alisoft xplatform asf cache。
备注:从数据上来看在较低线程数的情况下,spymemcached性能明显优于xmemcached,在高负载的情况下,spymemcached性能略优于xmemcached,但spymemcached由于采用异步调用模式(即删除指令发出后,数据并没有被真正删除,后台采用异步提交的方式进行处理),实际数据删除操作并没有处理完成。
3.4. 数据长度变化性能分析
在测试过程中,考虑alisoft xplatform asf cache、Memcached-Java-Client表现性能差强人意,不在对数据长度变化进行测试。调整测试内容为:spymemcached、xmemcached分别在二进制和ASCII协议下的性能变化情况。
数据长度变化TPS影响分析
数据长度变化内存占用影响分析
实际测试结果显示,Xmemcached在整体性能上略占优势。在传输协议的对比结果上有些出乎意料,二进制协议并没有表现出优势,在大多数情况下,ASCII协议具备更好的性能。
对于缓存的数据内容上,数据的长度在10k以内具备较好的性能,对于超过50k的数据,不建议在memcached中进行存储。(结合DB2的4k、8k、16k、32k表空间,如不处理lob字段,数据均在可承受范围之内)
3.5. 总体评价
依据上述测试结果,基于堵塞式IO的memcached客户端alisoft xplatform asf cache和Memcached-Java-Client 在性能上与基于NIO的客户端xmemcached、spymemcached存在较大的差距,基于堵塞式IO的memcached客户端在测试过程中均不定期出现“打开文件数过多”的错误,需要占用更多网络读写资源。
xmemcached除在删除方面性能与spymemcached有一定的差距外,在数据写入、数据读取方面两者没有明显的差距。但在内存控制上,xmemcached具备较明显的优势(在测试过程中,spymemcached在对复杂对象操作过程中出现OOM的错误,有调整JVM的PermSize和内存进行解决);xmemcached本身是基于spymemcached改进而来,几乎具备spymemcached的功能。因此建议在系统应用中选用xmemcached作为memcached客户端。
4. 附录
4.1. 详细测试数据
n 简单对象压力测试结果
操作 |
线程数 |
SpyMemcached |
Xmemcached |
jmc |
asf |
||||
TPS |
MEM |
TPS |
MEM |
TPS |
MEM |
TPS |
MEM |
||
写(set) |
10 |
510.51 |
88102 |
310.97 |
5258 |
120.25 |
59633 |
136.08 |
6020 |
20 |
478.6 |
81439 |
344.12 |
4917 |
106.97 |
53436 |
121.61 |
13328 |
|
50 |
540.68 |
114517 |
388.45 |
9360 |
101.16 |
51011 |
116.76 |
3139 |
|
100 |
462.62 |
82393 |
458.75 |
17255 |
99.87 |
55550 |
100.87 |
11762 |
|
200 |
631.51 |
102839 |
590.35 |
11751 |
89.42 |
18940 |
97.19 |
91386 |
|
300 |
519.25 |
81165 |
637.52 |
13310 |
93.65 |
105222 |
135.91 |
78627 |
|
400 |
541.38 |
65699 |
724.8 |
25330 |
95.48 |
91411 |
115.31 |
242422 |
|
500 |
619.05 |
148441 |
948.45 |
26502 |
94.37 |
46319 |
96.63 |
45344 |
|
读(get) |
10 |
210 |
21539 |
364.7 |
6724 |
242.15 |
131399 |
141.4 |
15082 |
20 |
256.77 |
74909 |
453.64 |
3483 |
190.03 |
132258 |
137.42 |
7285 |
|
50 |
360.22 |
45428 |
522.57 |
8901 |
139.78 |
29540 |
142.23 |
12445 |
|
100 |
489.43 |
76244 |
540.31 |
21706 |
115.72 |
17710 |
149.68 |
16728 |
|
200 |
600.58 |
47630 |
686.78 |
8022 |
135.21 |
89817 |
129.89 |
44619 |
|
300 |
748.08 |
63623 |
916.77 |
11510 |
154.5 |
119221 |
136.83 |
47124 |
|
400 |
1068.16 |
51982 |
1081.32 |
55875 |
182.78 |
130141 |
105.33 |
148399 |
|
500 |
1252.92 |
67872 |
1210.39 |
55683 |
211.66 |
113543 |
94.25 |
156141 |
|
删除(delete) |
10 |
1920 |
60949 |
452.55 |
3302 |
257.21 |
44434 |
327.27 |
5213 |
20 |
2014.29 |
64557 |
512.64 |
6456 |
226.46 |
42114 |
287.08 |
8106 |
|
50 |
1532.33 |
79291 |
604.34 |
9010 |
231.84 |
49590 |
280.05 |
3536 |
|
100 |
1784 |
126154 |
618.21 |
7675 |
201.95 |
39735 |
229.65 |
38890 |
|
200 |
1557.98 |
50025 |
781.64 |
82647 |
242.11 |
35557 |
234.2 |
122619 |
|
300 |
1675.35 |
125495 |
835.51 |
7265 |
325.72 |
59770 |
262.08 |
100943 |
|
400 |
1202.99 |
36298 |
899.95 |
23311 |
256.35 |
66451 |
241.43 |
191719 |
|
500 |
1261.06 |
56263 |
1075.2 |
23440 |
161.15 |
63833 |
146.83 |
197955 |
n 大对象压力测试结果
操作 |
线程数 |
SpyMemcached |
Xmemcached |
jmc |
asf |
||||
TPS |
MEM |
TPS |
MEM |
TPS |
MEM |
TPS |
MEM |
||
写(set) |
10 |
259.24 |
467583 |
222.18 |
255304 |
144.48 |
20764 |
162.02 |
246856 |
20 |
235.75 |
497143 |
235.54 |
15381 |
133.58 |
85895 |
154.8 |
26305 |
|
50 |
237.82 |
482584 |
276.87 |
91160 |
142.85 |
74635 |
140.88 |
257407 |
|
100 |
232.69 |
442517 |
291.82 |
103691 |
118.41 |
15813 |
137.34 |
77771 |
|
200 |
232.1 |
391364 |
335.66 |
17936 |
132.09 |
79607 |
152.05 |
243591 |
|
300 |
250.66 |
392310 |
404.91 |
63163 |
141.37 |
79068 |
152.17 |
174972 |
|
400 |
259.27 |
342082 |
486.08 |
96368 |
120.97 |
97293 |
143.89 |
189039 |
|
500 |
246.1 |
273606 |
449.88 |
155568 |
131.08 |
78614 |
150.08 |
25611 |
|
读(get) |
10 |
178.64 |
174495 |
224.47 |
249417 |
171.26 |
32600 |
160.03 |
246387 |
20 |
183.59 |
140674 |
245.79 |
167597 |
161.99 |
160280 |
138.22 |
253770 |
|
50 |
226.32 |
12239 |
256 |
87253 |
152.9 |
145711 |
80.36 |
255730 |
|
100 |
261.46 |
82222 |
300.66 |
43833 |
157.5 |
159957 |
69.26 |
75928 |
|
200 |
346.15 |
105795 |
307.76 |
52438 |
164.14 |
147615 |
147.08 |
91865 |
|
300 |
349.61 |
53670 |
383.89 |
80387 |
182.28 |
147911 |
124.45 |
93083 |
|
400 |
430.09 |
28327 |
496.69 |
77513 |
177.31 |
145364 |
148.15 |
127157 |
|
500 |
572.84 |
53478 |
487.23 |
94533 |
180.33 |
148534 |
151.33 |
145180 |
|
删除(delete) |
10 |
3174.86 |
64150 |
827.66 |
47583 |
506.36 |
98913 |
663.43 |
223488 |
20 |
3004.99 |
66000 |
923.66 |
60185 |
470.39 |
115510 |
667.98 |
228045 |
|
50 |
4450.18 |
63606 |
950.02 |
54976 |
345 |
104234 |
542.52 |
230123 |
|
100 |
3904.91 |
60183 |
862.95 |
67825 |
426.18 |
110897 |
498.82 |
247312 |
|
200 |
3175.47 |
65761 |
1094.5 |
63657 |
374.3 |
112631 |
531.68 |
238339 |
|
300 |
2046.76 |
71115 |
1289.17 |
59543 |
500.16 |
92836 |
526.47 |
242203 |
|
400 |
1897.26 |
75532 |
1399.28 |
50389 |
418.81 |
107433 |
519.47 |
243653 |
|
500 |
2071.35 |
67690 |
1159.58 |
48333 |
497.9 |
149904 |
513.8 |
243406 |
n 字节数变化压力测试结果
字节数 |
SpyMemcached-bin |
SpyMemcached-txt |
Xmemcached-bin |
Xmemcached-txt |
||||
TPS |
MEM |
TPS |
MEM |
TPS |
MEM |
TPS |
MEM |
|
64 |
2917.58 |
5108 |
2810.18 |
13032 |
3262.03 |
8945 |
4199.25 |
9171 |
128 |
4292.9 |
12312 |
2895.1 |
14109 |
4531.3 |
10094 |
4133.94 |
10406 |
256 |
3592.17 |
14588 |
3196.91 |
16812 |
3038.37 |
11091 |
6550.86 |
11841 |
512 |
3233.89 |
5017 |
4160.2 |
21820 |
7860.32 |
13821 |
7131.74 |
14266 |
1024 |
7361.02 |
30589 |
2470.53 |
8164 |
5109.72 |
17938 |
5703.03 |
3614 |
2048 |
3233.6 |
46527 |
7798.11 |
51387 |
7222.36 |
29494 |
8547.69 |
28575 |
5120 |
3358.58 |
43874 |
5514.08 |
108159 |
5406.71 |
26134 |
6850.01 |
57482 |
10240 |
4440.62 |
84220 |
4117.94 |
23733 |
4584.6 |
37675 |
5092.56 |
110802 |
20480 |
660.46 |
151707 |
778.49 |
139424 |
755.55 |
17418 |
850.55 |
136711 |
51200 |
274.85 |
136410 |
271.22 |
118354 |
289.41 |
113544 |
285.84 |
112371 |
102400 |
118.4 |
80257 |
123.24 |
123402 |
138.35 |
96368 |
139.74 |
155225 |
204800 |
57.59 |
168415 |
58.11 |
125883 |
64.68 |
140794 |
64.86 |
164982 |
512000 |
20.91 |
323064 |
21.76 |
378767 |
24 |
226116 |
24.78 |
113326 |
TPS:每秒通过率
MEM:内存占用情况(单位K)
jmc:Memcached-Java-Client
asf:alisoft xplatform asf cache
4.2. 第三方评测结果
n Memcached-Java-Client官方评测报告
https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE
n XMemcached官方评测报告
http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html