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之外,並不能挖掘到更多的信息。