Memcached Java Client 版本差异
公司目前使用的是2.5.1版本的memcached java client.目前官方最新版本是2.6.1,是基于全新的performance分支,由Schooner中国团队开发。
• 王新根,new.root@gmail.com;
• 李蒙,jowett.lee@gmail.com,IT eye博客地址是:http://menglee.iteye.com 。
与老版本的相比的重大改善:
1. 较之老版本,在性能上有300%左右的提升;
2. 兼容老版本,用户无须修改自己的源代码;
3. 支持多个memcached协议,包括text,udp和binary协议;
4. 支持SASL认证机制;
5. 重新实现的连接池,修复了之前的连接数太多所导致的OutOfMemory异常;
6. 加入了slf4j logger支持,使得开发人员可以方便的记录日志;
7. 支持自定义的对象序列化方法。
对上面官方描述的重大改善,我下面挑选了2个比较实用的改善进行测试验证,毕竟试了才知道,呵呵。
验证:连接池BUG修复
验证:重新实现的连接池,修复了之前的连接数太多所导致的OutOfMemory异常。
验证测试的环境我还是使用上面的性能测试基础环境和代码。
测试环境配置
在上面性能测试基础环境中,我关掉了2个memcached服务,只留下一个11211端口的服务。
Memcached java client客户端参数配置,配置一个服务和连接池配置最大连接数量为5。客户端配置如下:
测试类参数
测试类参数:线程数:20,每个线程处理10000次。基本可以执行个1,2分钟,够监控连接情况了。
2.5.1版本测试
查看测试前memcached服务状态
telnet localhost 11211
Stats
运行测试
异常了:
Exception in thread "pool-1-thread-16" java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:633)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:98)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:288)
查看运行中memcached服务状态:
从测试结果看,大并发的时候,2.5.1版本配置的连接池最大5连接,但是实际是118-10=108个,连接池完全失控,客户端报错java.lang.OutOfMemoryError。BUG!!
2.6.1版本测试
还是先查看下运行测试前,memcached服务器状态:
回到了当前连接为10,不晓得为什么!官方说该参数是当前连接数量,但是我现在明显没有连接,就有10个,而且服务器刚启动就10个,先不管,反正无连接的时候就是10(我用netstat –a看了,的确没有连接)。
运行2.6.1版本的测试
OK,一切正常了,客户端无异常,服务器状态一直都是显示当前连接为15,说明,只有5个连接到memcached服务器,和配置符合。
测试结论:2.5.1的连接池溢出BUG在2.6.1中的确修复了。
验证:性能提升300%
2.6.1版本的测试已经在上面的“性能测试”模块进行了说明,这里使用相同的配置和代码测试2.5.1版本的情况,然后进行对比。
测试服务器就还是小本,服务开3个,分别128M,64M,64M.
Memcahced java client 配置如下:
memcached-servers=localhost:11211,localhost:11212,localhost:11213
memcached-weights=3,1,1
memcached-initConn=5
memcached-minConn=5
memcached-maxConn=250
测试类配置:
/** 线程数 */
static int THREAD_COUNT = 20;
/** 每线程执行次数 */
static int PER_THREAD_COUNT = 10000;
测试结果:
36316 - Test thread: 20; total times: 404056ms;count/thread: 60000
36316 - add success : 197583; success rate: 98.7915%
36316 - set success : 198272; success rate: 99.136%
36316 - get success : 198473; success rate: 992365.06%
36316 - gets success : 198214; success rate: 99.106995%
36316 - cas success : 198821; success rate: 99.4105%
36318 - del success : 199198; success rate: 99.599%
36318 - Average time: 0.33671334
36318 - add TPS: 4952.211162283959; time: 40386ms
36318 - set TPS: 3645.2447781868555; time: 54866ms
36318 - get TPS: 3217.2961842867253; time: 62164ms
36319 - gets TPS: 2691.0294533173665; time: 74321ms
36319 - cas TPS: 2337.5135867977233; time: 85561ms
36319 - del TPS: 2673.510854454069; time: 74808ms
36319 - Average TPS: 2474.9044686875086
2.6.1版本的测试Average TPS:6624.183569375075
2.5.1版本的测试Average TPS: 2474.9044686875086
效率提升:6624.183569375075/2474.9044686875086=2.68倍
不错,的确优化提升了。
后续会提供源代码的分析比对,现在时间不多,先到这里了。
- 大小: 47.3 KB
- 大小: 247.2 KB
- 大小: 4 KB
- 大小: 3.7 KB
- 大小: 235.5 KB
- 大小: 4.7 KB
- 大小: 4.4 KB
- 大小: 13.8 KB
分享到:
相关推荐
NULL 博文链接:https://acooly.iteye.com/blog/1120347
java-memcached-2.6.6.jar
memcache客户端jar包: 1,java_memcached-release_2.6.6.jar 2,commons-pool-1.5.6.jar 3,slf4j-api-1.6.1.jar 4,slf4j-simple-1.6.1.jar
2.spymemcached,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。 3.xmemcached,XMemcached也使用得比较广泛,而且...
每一次对于客户端的性能提升,总会给服务集成平台性能带来不小的影响,但是每一次优化速度后,客户端可以优化的空间越来越小,这时候需要一些策略来配合,提升应用整体性能。当前主要采用了以下几点策略:
Memcached学习笔记2.docMemcached学习笔记2.doc
Jellycan Code | memcached Home The Good Egg SimpleIni SimpleOpt MemCacheClient Moji memcached show_menu2 menusys StringWrapper ML Fancy Excerpt LangSelect Visual Studio CommentsThis page contains a ...
用于hibernate集成memcached作为二级缓存所需要的包,1.2.2版本
这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,
服务端 memcached的windows版本直接解压缩到文件夹 c:>memcached.exe -d install c:>memcached.exe -l 127.0.0.1 -m 32 -d start 通过两个命令启动服务器 ...java 版本的memcached客户端 下载jar包自己参照API实现
java_memcached-release_2.6.3.rar 客户端所有包,用于java客户端开发。
Memcache java jar 包 java_memcached-release_2.5.1.jar
redis安装:.msi文件打开直接安装即可,注意选择添加patt选项 memcached: memcached-win64-1.4.4-14 + PHP7-memcache-dll-master(7.1~7.3) + memcached.dll ... memcached.exe -d install(开启关闭服务:start/stop)
Cache :: Memcached :: AnyEvent-AnyEvent兼容的Memcached客户端 概要 use Cache::Memcached::AnyEvent; my $memd = Cache::Memcached::AnyEvent->new({ servers => [ '127.0.0.1:11211' ], compress_threshold =...
memcachedclient-2.0.1.jar 之前在网上搜了很久没搜到,所以找到了跟大家分享
NULL 博文链接:https://da-zhuang.iteye.com/blog/2234078
memcached-java-operator memcached-java-operator
本资源含有基于java的memcached 的数据缓存开发所需的 memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip 快来一起学习吧
Memcached-Java-Client-3.0.2.jar
R-Memcached memcached 的 Java 客户端的中间件