`

Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(4)-版本差异

 
阅读更多

 

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
分享到:
评论
1 楼 c04s31602 2014-07-18  
非常好的文章,楼主的钻研精神值得学习。

相关推荐

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...

    java-memcached-2.6.6.jar

    java-memcached-2.6.6.jar

    java_memcached-release_2.5.1.jar Memcache java jar 包

    在本例中,我们关注的是`java_memcached-release_2.5.1.jar`这个文件,这是一个包含了Java Memcached客户端库的JAR(Java Archive)包,版本号为2.5.1。 Java Memcached客户端库由Danga Interactive开发,该公司是...

    java_memcached-release_2.6.3.rar 客户端所有包

    Java Memcached客户端是Java开发者用来与Memcached分布式内存缓存系统进行交互的工具。这个`java_memcached-release_2.6.3.rar`压缩包包含了用于Java客户端开发所需的全部依赖库,使得开发者能够轻松地在Java应用中...

    Memcached最新版Jar包

    Memcached最新版Jar包: spymemcached-2.11.6.jar spymemcached-2.11.6-javadoc.jar spymemcached-2.11.6-sources.jar https://github.com/dustin/java-memcached-client

    memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip

    这表明我们正在处理的是与Memcached相关的开发资源,一个是Windows上的Memcached服务器版本1.2.1,另一个是Java客户端库的release 1.6。 描述中提到,这些资源适用于基于Java的Memcached数据缓存的开发。这暗示我们...

    memcached linux安装说明+ java客户端调用例子

    在Linux系统上安装和配置memcached,并通过Java客户端进行调用是常见的操作流程,下面将详细介绍这一过程。 ### 一、memcached的Linux安装 1. **更新系统**: 首先确保你的Linux系统已经更新到最新版本,运行`sudo ...

    memcached安装及java应用使用memcached

    虽然描述部分是空的,但我们可以推测文章可能涵盖了安装memcached的基本步骤,以及Java开发者如何集成并利用memcached来提升应用性能。 **标签解析:** 1. **源码**:可能意味着文章会涉及memcached的源代码安装或...

    memcached的三种java客户端jar

    2.spymemcached,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。 3.xmemcached,XMemcached也使用得比较广泛,而且...

    Memcached-Java-Client-release_2.6.1.zip

    《Java与Memcached整合详解——基于Memcached-Java-Client 2.6.1》 在现代Web开发中,缓存技术是提升系统性能的重要手段之一。Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于缓解数据库负载,提高响应...

    java_memcached-release_2.5.1

    每一次对于客户端的性能提升,总会给服务集成平台性能带来不小的影响,但是每一次优化速度后,客户端可以优化的空间越来越小,这时候需要一些策略来配合,提升应用整体性能。当前主要采用了以下几点策略:

    java_memcached-release_2.6.3.zip

    Java Memcached 客户端是Java开发者用于与Memcached分布式内存缓存系统交互的一个库。在版本2.6.3中,它提供了高效且可靠的连接管理,以及对Memcached服务器的全面支持。这个压缩包“java_memcached-release_2.6.3....

    java memcached-session 配置

    Java Memcached-Session配置在Tomcat环境中主要用于将Web应用程序中的用户会话数据持久化到分布式缓存系统Memcached中,从而提高系统的可扩展性和性能。Memcached是一个高性能、分布式的内存对象缓存系统,用于在...

    memcached 1.2.6 1.2.5

    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 ...

    在Linux上安装Memcached服务

    在Linux系统上安装Memcached服务是一项基础的系统管理和运维任务,Memcached是一款高性能的分布式内存对象缓存系统,常用于加速动态Web应用。本指南将详细介绍如何在Linux上下载、安装和启动Memcached服务。 首先,...

    memcached 完整的项目,服务端(win) 客户端 包括jar包

    4. **故障恢复**:当 Memcached 服务端宕机后,Java 客户端可能会遇到连接问题,需要有适当的重试机制。 总之,Memcached 项目为开发者提供了一个高效、易用的缓存解决方案,通过 Java 客户端可以轻松地在 Java ...

    MemCached开发java客户端的使用

    这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,

    memcached-1.2.1-win32_java_memcached-release_1.6.rar

    服务端 memcached的windows版本直接解压缩到文件夹 c:&gt;memcached.exe -d install c:&gt;memcached.exe -l 127.0.0.1 -m 32 -d start 通过两个命令启动服务器 ...java 版本的memcached客户端 下载jar包自己参照API实现

    Memcached学习笔记

    ### Memcached学习笔记 #### 一、Memcached简介 Memcached是一种高性能的分布式内存对象缓存系统,主要用于在动态应用程序中减少数据库负载,提高访问速度。最初由Danga Interactive为优化LiveJournal.com网站的...

Global site tag (gtag.js) - Google Analytics