MemcacheQ 测试报告
硬件环境:
CPU: Intel(R) Xeon(R) CPU E5410 @2.33GHz 双核
内存:2G
操作系统: Red Hat EnterpriseLinux Server release 5.3 (Tikanga)
启动命令:
memcacheq -d -r -u co_test -p 21201 -H/home/co_test/memcacheq/data -N -v -L 1024 -B 1024 > /home/co_test/memcacheq/logs/mq_error.log2>& 1
只set 数据的情况:
字符大小:256字节
数据文件以1.75GB的数据增长
发送前是否清空 | 发送前是否重启 | 压测线程数(连接数) | 压测每线程操作次数 | 总用时 | 平均每秒 | load average(MAX) | CPU%(最大值) | 内存(稳定值) |
否 | 否 | 10 | 100000 | 263.721 | 3791.8861 | 0.57, 0.21, 0.08 | 15 | 128756 |
否 | 否 | 10 | 100000 | 266.307 | 3755.0646 | 0.67, 0.21, 0.08 | 12.3 | 129112 |
否 | 否 | 10 | 100000 | 262.341 | 3811.8327 | 0.39, 0.17, 0.09 | 32.3 | 128756 |
否 | 是 | 20 | 50000 | 292.535 | 3418.3944 | 1.10, 0.40, 0.14 | 14.3 | 129132 |
否 | 否 | 20 | 50000 | 301.095 | 3321.2109 | 0.64, 0.22, 0.11 | 34.7 | 129028 |
否 | 否 | 25 | 40000 | 286.092 | 3495.3791 | 0.48, 0.15, 0.05 | 15.3 | 129276 |
否 | 否 | 25 | 40000 | 307.965 | 3247.1222 | 0.49, 0.18, 0.06 | 12.3 | 129276 |
是 | 是 | 40 | 25000 | 288.325 | 3468.3083 | 0.57, 0.24, 0.09 | 12.3 | 129080 |
否 | 否 | 40 | 25000 | 309.369 | 3232.3859 | 0.62, 0.22, 0.08 | 51.6 | 129236 |
否 | 否 | 50 | 20000 | 302.399 | 3306.8892 | 0.48, 0.14, 0.07 | 18.7 | 128416 |
否 | 否 | 50 | 20000 | 289.35 | 3456.0221 | 0.34, 0.09, 0.03 | 13.7 | 129496 |
否 | 否 | 5 | 200000 | 273.966 | 3650.088 | 0.64, 0.33, 0.12 | 13.3 | 129496 |
否 | 否 | 5 | 200000 | 274.553 | 3642.284 | 0.65, 0.28, 0.11 | 16 | 129208 |
是 | 是 | 1 | 1000000 | 337.448 | 2963.4195 | 0.41, 0.17, 0.20 | 10 | 128808 |
否 | 否 | 1 | 1000000 | 339.209 | 2948.035 | 0.51, 0.20, 0.15 | 10.3 | 128928 |
第9次的stats命令结果:
stats
STAT pid 30515
STAT uptime 6782
STAT time 1299387607
STAT version 0.2.0
STAT pointer_size 64
STAT rusage_user 11.552722
STAT rusage_system 14.424901
STAT curr_connections 5
STAT total_connections 87
STAT connection_structures 46
STAT get_cmds 0
STAT get_hits 0
STAT set_cmds 2000000
STAT set_hits 2000000
STAT bytes_read 570000034
STAT bytes_written 16001152
STAT threads 4
END
只get 数据的情况:
数据文件以100MB-200MB的数据减少
压测线程数(连接数) | 压测每线程操作次数 | 总用时 | 平均每秒 |
10 | 100000 | 113.727 | 8792.9867 |
10 | 100000 | 106.166 | 9419.2114 |
20 | 50000 | 130.378 | 7670.0057 |
20 | 50000 | 116.046 | 8617.2725 |
25 | 40000 | 127.295 | 7855.7681 |
25 | 40000 | 122.529 | 8161.3332 |
40 | 25000 | 142.626 | 7011.3444 |
40 | 25000 | 132.994 | 7519.1362 |
50 | 20000 | 145.906 | 6853.7277 |
50 | 20000 | 141.735 | 7055.4203 |
100 | 10000 | 83.735 | 11942.4375 |
100 | 10000 | 144.978 | 6897.5983 |
5 | 200000 | 107.44 | 9307.5205 |
5 | 200000 | 104.144 | 9602.0894 |
1 | 1000000 | 213 | 4694.8357 |
第7次的stats的命令结果:
stats
STAT pid 12213
STAT uptime 41695
STAT time 1299379865
STAT version 0.2.0
STAT pointer_size 64
STAT rusage_user 193.500093
STAT rusage_system 119.579473
STAT curr_connections 5
STAT total_connections 250
STAT connection_structures 46
STAT get_cmds 7000000
STAT get_hits 7000000
STAT set_cmds 4000000
STAT set_hits 4000000
STAT bytes_read 1245000718
STAT bytes_written 2062009860
STAT threads 4
END
Set/get同时的情况:
字符大小:256字节
数据文件以1.5GB左右的数量增长
次数 | set压测线程数(连接数) | set压测每线程操作次数 | set总用时 | set平均每秒 | get压测线程数(连接数) | get压测每线程操作次数 | get总用时 | get平均每秒 |
1 | 2 | 500000 | 330.398 | 3026.6527 | 1 | 1000000 | 373.059 | 2680.5411 |
2 | 4 | 250000 | 325.536 | 3071.8569 | 2 | 500000 | 315.817 | 3166.3907 |
3 | 5 | 200000 | 379.681 | 2633.7899 | 4 | 250000 | 331.266 | 3018.7221 |
4 | 8 | 125000 | 348.767 | 2867.2437 | 5 | 200000 | 316.703 | 3157.5325 |
5 | 10 | 100000 | 379.064 | 2638.0769 | 8 | 125000 | 327.748 | 3051.1246 |
6 | 20 | 50000 | 349.725 | 2859.3895 | 10 | 100000 | 327.592 | 3052.5776 |
7 | 25 | 40000 | 404.956 | 2469.4041 | 20 | 50000 | 356.22 | 2807.2539 |
8 | 40 | 25000 | 413.067 | 2420.9148 | 25 | 40000 | 377.16 | 2651.3946 |
9 | 50 | 20000 | 450.61 | 2219.2140 | 40 | 25000 | 401.931 | 2487.9892 |
10 | 80 | 12500 | 450.634 | 2219.0958 | 50 | 20000 | 421.922 | 2370.1063 |
11 | 100 | 10000 | 468.383 | 2135.0049 | 80 | 12500 | 420.243 | 2379.5756 |
第2次stats结果:
stats
STAT pid 20984
STAT uptime 9211
STAT time 1300018069
STAT version 0.2.0
STAT pointer_size 64
STAT rusage_user 17.593099
STAT rusage_system 23.797487
STAT curr_connections 5
STAT total_connections 16
STAT connection_structures 11
STAT get_cmds 2000000
STAT get_hits 2000000
STAT set_cmds 2000000
STAT set_hits 2000000
STAT bytes_read 600000025
STAT bytes_written 596000370
STAT threads 4
END
结论:
1. memcacheq采用的是memcached协议,由于需要写文件,所以set效率比不上memcached,get效率也比memcached降低了3-4倍;
2. memcacheq安装和使用上还是比较简单的,测试过程中也没有出现过服务端挂掉的现象,只是生成的日志文件过大,每100万条256字节的消息要占用近1.75GB的磁盘,测试不了几次就会占满磁盘的10G空间导致客户端程序报错,而此时memcacheq服务依然正常;
3. get数据并不能减小持久化文件的大小,重启后持久化文件也不会变小,即使所有消息都出队列,持久化文件仍然存在,且占用空间较大,基本上为每100万次256字节的入和出的处理后,会增加1.5-1.6G的持久化数据量;
4. memcacheq重启过程中不会重建索引文件,所以不会产生重启的效率问题;
5. 在磁盘空间足够大的情况下,memcacheq还是一个比较不错的选择,只是需要定期的手动清空或通过flush的命令进行清空。
6. Memcacheq的缺点是其资料较少,使用也不太广泛,除了从官网那一个页面有安装和配置的信息和知道其持久化是采用的Berkeley之外,并不能挖掘到更多的信息。