分享

java memcached client的优化

 击碎星辰 2010-07-05
java memcached client 是一个第三方提供的访问 memcached 的 library,所以我对他的性能一直抱怀疑的态度。在碰到增加线程不能提高速度并且client CPU 99%的情况之后更坚定了我的看法。经过分析他的代码,找到了两个主要问题:

1. synchronized 的问题
java memcached client源文件的大量方法里面都直接使用 synchronized 如 getConnection(), checkin() 等,而SockIOPool类似一个Singleton, 因此造成多线程失去了意义。同时 synchronized 方法里面又大量使用了 Hashtable 等synchronized保护的集合类。

2. InputStream 不优化的用法:

未加Buffer
private DataInputStream in = new DataInputStream( sock.getInputStream() );

一次读一字节
while (in.read(b, 0, 1) != -1)...
虽然说局域网的网速不存在问题,但是这样操作的话速度可想而知。

改了这些问题之后,访问速度每秒由6,666变成15,000左右。

上面两个是主要的,其他还有一些小问题,比如 socket 每次使用都需要从两个hashtable中checkin, checkout,也会造成大量的同步锁等待,这个问题还没改,因为他的整个思路都是基于这个的,改了这个地方基本上要全部重写了。

另外如果再使用Java NIO,加上同步锁的一些问题得到改善的话,估计每秒可优化到20,000次左右

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多