xmemcached 0.60 优化过程 -买球官网平台

`

xmemcached 0.60 优化过程

    博客分类:
  • java


   充分利用jprofile等工具观察性能瓶颈,才能对症下药,盲目的优化只是在浪费时间,并且效果可能恰恰相反
1、 观察到countdownlatch.await占据最多cpu时间,一开始认为是由于jprofiler带来的影响,导致这个方法调用时间过长,从而忽 略了这一点,导致后面走了不少弯路。实际上await方法占用50%的cpu,而网络层和序列化开销却比较低,这恰恰说明这两者的效率低下,没办法充分利 用cpu时间,后来观察spymemcached的cpu占用情况,await占用的时间低于30%,优化后的结果也是如此。

2、因为没有深入理解这一点,我就盲目地开始优化,先从优化协议匹配算法开始,匹配bytebuffer一开始用简单匹配(o(m*n)复杂 度),后来替代以kmp算法做匹配,想当然以为会更快,比较了两者效率之后才发现kmp的实现竟然比简单匹配慢了很多,马上google,得知比之kmp 算法效率高上几倍的有bm算法,马上实现之,果然比kmp和简单匹配都快。换了算法后,一测试,有提升,但很少,显然这不是热点。然后开始尝试改线程模型并测试,一开始想的是往上加线程,毕竟序列化是计算密集型,搞cpu个数的线程去发送command,调整读buffer的线程数,测试效率没有提升甚至 有所降低,期间还测试了将协议处理改成批处理模式等,全部以失败告终。

3、此时才想起应该观察下spymemcached的cpu使用情况,才有了上面1点提到的观察,记的在测试yanf4j的echo server的时候,我发现读buffer线程数设为0的事情下比之1的效率更高,也就是说仅启动一个线程处理select、op_write和 op_read的事件,对于echo这样简单的任务来说是非常高效的,难道memcached也如此?立马设置为0并测试,果然提升很多,与 spymemcached的tps差距一下减小了2000多,进一步观察,由于xmemcached构建在yanf4j的基础上,为了分层清晰导致在发送 和接收消息环节有很多冗余的操作,并且我还多启动了一个线程做command发送和优化get、set操作,如果能磨平这些差异,扩展yanf4j,避免了队列同步开销,这样也不用额外启动线程,效率是否更高呢?得益于yanf4j的模块化,修改工作顺利进行,最后的测试结果也证明了我的猜测,效率已经接近 spymemcached甚至超过。



分享到:
评论

相关推荐

    xmemcached-1.2.4的官方源码。 xmemcached xmemcached is a high performance, easy to use blocking multithreaded memcached client in java. it's nio based (using my opensource nio framework :yanf4j), ...

    repository\com\googlecode\xmemcached\xmemcached 2.4.6

    xmemcached-1.2.6.2

    xmemcached-1.3.3-src.tar.gz,xmemcached-1.3.3,readme.md,pom.xml,src,test,resources,test.properties,log4j.properties,sampleapplicationcontext.xml,applicationcontext.xml,golden_compass.txt,java,net,...

    xmemcached中文开发手册,提供的版本较老,但针对2.0的版本次文档同样适用,可以入门

    xmemcached.chm帮助文档

    xmemcached-1.4.3.jar

    spring xmemcached aop切面 需要xmemcached-1.2.5 spring-2.5.6 class="net.rubyeye.xmemcached.utils.xmemcachedclientfactorybean" destroy-method="shutdown"> ${xmemcached_servers} <!-- ...

    测试类包括xmemcached客户端与memcached client for java两者,可运行比较性能。 xmemcached简介: xmemcached是基于 java nio的memcached客户端,java nio相比于传统阻塞 io 模型来说,有 效率高(特别在高并发下...

    xmemcached 接口文档,方便开发和学习

    基于java nio实现的高性能可扩展的memcached客户端。虽然java的memcached库已经很多,但是这些java开源memcached库并没有一个是基于nio框架编写,因此...xmemcached的项目买球官网平台主页在:http://code.google.com/p/xmemcached/

    xmemcached一个java实现的分布式缓存xmemcached一个java实现的分布式缓存xmemcached一个java实现的分布式缓存xmemcached一个java实现的分布式缓存

    xmemcached-1.4.2最新版,可用。memcached java客户端

    ehcache、xmemcached、redis 整合spring注解demo

    xmemcached是一个新java memcached client。也许你还不知道memcached是什么?可以先看看这里。简单来说,memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态web应用以减轻数据库负载,现在也有...

    xmemcached 2.4.5 和 xmemcached 2.3.2 两个版本号的

    xmemcached使用的jar,需要的可以下载

    memcache.spymemcached,和xmemcached 三种缓存实例

global site tag (gtag.js) - google analytics