- 浏览: 889312 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (306)
- c#历程 (8)
- java (51)
- ruby & rails (40)
- web开发 (5)
- 工作流 (4)
- 数据库技术 (7)
- 数据结构与算法 (12)
- 设计模式 (5)
- 涂鸦 (36)
- erlang (8)
- my open-source (1)
- 源码解读 (6)
- [网站分类]1.网站买球买球官网平台官网平台首页原创java技术区(对买球买球官网平台官网平台首页文章的要求: 原创、高质量、经过认真思考并精心写作。blogjava管理团队会对买球买球官网平台官网平台首页的文章进行管理。) (0)
- [网站分类]4.其他技术区 (12)
- [网站分类]3.非技术区 (1)
- [网站分类]2.java新手区 (0)
社区版块
- ( 33)
- ( 1529)
- ( 28)
最新评论
-
hw7777777:
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?1、 ...
基于java nio的memcached客户端——xmemcached -
since1978:
多久过去了时间能抹平一切
无路用的人 -
fangruanyjq:
[img][/img]引用
用osworkflow写一个请假例子(提供代码下载) -
thinkingmysky:
楼主,你确定,java memached client能处理并 ...
memcached java client性能测试的几点疑问和说明 -
hellostory:
aaa5131421 写道07年2月hibernate已经出来 ...
dozer与beanutils
最近发布了2.6.1版本,号称性能提升了300%,这是相对于原始主干代码来说。这个改进是由国人做的一个分支,首先得向他们致敬,great job。
我这里想谈的主要是里的性能测试,从他们的测试结果来看java memcached client的性能确实非常优秀。但是我认为这个测试并不能算非常公平的测试,有几点需要开发者来澄清和说明一下。
抛开硬件声明不谈,软件上的配置没有说明,比如各个软件的版本,测试的各个client的参数设置没有说明。为了证明可以做到比测试中的更优秀,我也做了个简单测试,我测试的场景如下:
并发n个(1,10,50,100,300)线程存取memcached数据,数据大小为64字节,存取次数随并发程度递增,读写比例为4:1。测试的客户端用java memcached client 2.6.1和xmemcachd 1.3.3。memcached版本为1.4.5,内存开大为4g。两者的配置如下
java memcached client
basicconfigurator.configure(); sockiopool pool = sockiopool.getinstance(); pool.setminconn(10); pool.setmaxconn(20); pool.setmaxidle(60 * 60 * 1000); pool.setservers(servers.split(" ")); pool.initialize();
memcachedclientbuilder builder = new xmemcachedclientbuilder(addrutil .getaddresses(servers)); builder.setconnectionpoolsize(20);
连接数都设置成20个,我们看下测试的结果。
java memcached client
warm up threads=1,repeats=40000,valuelength=64,tps=9207,miss=0,fail=0,hit=32004,all=40000,hitrate=1.00 threads=10,repeats=40000,valuelength=64,tps=51788,miss=0,fail=0,hit=320040,all=400000,hitrate=1.00 threads=50,repeats=40000,valuelength=64,tps=90019,miss=0,fail=0,hit=1600200,all=2000000,hitrate=1.00 threads=100,repeats=40000,valuelength=64,tps=90610,miss=0,fail=0,hit=3200400,all=4000000,hitrate=1.00 threads=300,repeats=40000,valuelength=64,tps=86025,miss=0,fail=0,hit=9601200,all=12000000,hitrate=1.00
:
threads=1,repeats=40000,valuelength=64,tps=6513,miss=0,fail=0,hit=32004,all=40000,hitrate=1.00 threads=10,repeats=40000,valuelength=64,tps=38763,miss=0,fail=0,hit=320040,all=400000,hitrate=1.00 threads=50,repeats=40000,valuelength=64,tps=102081,miss=0,fail=0,hit=1600200,all=2000000,hitrate=1.00 threads=100,repeats=40000,valuelength=64,tps=124928,miss=0,fail=0,hit=3200400,all=4000000,hitrate=1.00 threads=300,repeats=40000,valuelength=64,tps=149125,miss=0,fail=0,hit=9601200,all=12000000,hitrate=1.00
可以看到,在1个或者10个线程并发的时候,xmc确实比java memcached client差,但是随着并发程度的升高,xmc都超过了java memcached client,顶峰可以达到接近15万的tps。那么,如果java memcached client使用更多的连接池呢,比如200个连接,结果如下
java-memcached startup warm up threads=1,repeats=40000,valuelength=64,tps=9248,miss=0,fail=0,hit=32004,all=40000,hitrate=1.00 threads=10,repeats=40000,valuelength=64,tps=50881,miss=0,fail=0,hit=320040,all=400000,hitrate=1.00 threads=50,repeats=40000,valuelength=64,tps=87111,miss=0,fail=0,hit=1600200,all=2000000,hitrate=1.00 threads=100,repeats=40000,valuelength=64,tps=87563,miss=0,fail=0,hit=3200400,all=4000000,hitrate=1.00 threads=300,repeats=40000,valuelength=64,tps=85685,miss=0,fail=0,hit=9601200,all=12000000,hitrate=1.00
从结果来看,并没有明显的改善。
软件配置是我想说的第一个测试中没提到的因素。第二个因素是java memcached client 2.6.1去掉了数据压缩功能,那么在测试大数据的时候,是否将其他客户端的数据压缩功能关掉,这个因素对测试结果的影响很大。我将xmemcached的压缩阈值设置成1m,准备再测试看看,结果稍候奉上。
评论
但 系统运行一段时间后,就会报错,一直是 try reconnect memcache,部分异常见下:
java.util.concurrent.timeoutexception: timed out(5000) waiting for operation
at net.rubyeye.xmemcached.xmemcachedclient.latchwait(xmemcachedclient.java:2528)
at net.rubyeye.xmemcached.xmemcachedclient.fetch0(xmemcachedclient.java:574)
at net.rubyeye.xmemcached.xmemcachedclient.get0(xmemcachedclient.java:971)
at net.rubyeye.xmemcached.xmemcachedclient.get(xmemcachedclient.java:929)
at net.rubyeye.xmemcached.xmemcachedclient.get(xmemcachedclient.java:940)
at net.rubyeye.xmemcached.xmemcachedclient.get(xmemcachedclient.java:962)
只要出现了这样的一次 mem就不能使用了,但mem的服务端是好的(但不排除服务有些参数设置不当)。您能不能帮忙给看看这个问题,我qq 490836924 。
现在公司里也有2个memcache客户端实现,从他们的性能测试来看,xmemcached的性能还是很难超越。
呵呵,我一直在xmemcached,挺好用的。
从上面的比较测试来看,xmemcached找到了提升的空间地方(1-10并发数时的性能)。
嗯,我就是伯岩
这个很难提升,低并发的时候,nio比bio要多不少的context switch。
呵呵,我一直在xmemcached,挺好用的。
从上面的比较测试来看,xmemcached找到了提升的空间地方(1-10并发数时的性能)。
相关推荐
用好cache,优化应用 服务集成平台5.6的性能测试进入尾声,这期的优化也算告一段落。这次主要的优化工作还是在三个方面:应用服务器(apache,jboss)配置,业务流程,cache client包...当前主要采用了以下几点策略:
最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具memcached(当然该工具并不仅仅局限于数据库的缓存)。先简单的介绍下什么是memcached。...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
java编写的显示器显示模式检测程序 2个目标文件 内容索引:java源码,系统相关,系统信息检测 用java编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 java波浪文字制作...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
5个目标文件,演示address ejb的实现,创建一个ejb测试客户端,得到名字上下文,查询jndi名,通过强制转型得到home接口,getinitialcontext()函数返回一个经过初始化的上下文,用client的gethome()函数调用home接口...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
bonecp很小,只有四十几k(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 c3p0 要六百多k。 异步输出框架 asynwriter 一个java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...