充分利用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作为Java环境下Memcached的优秀客户端,通过提供强大的功能和优化的性能,使得开发人员能够更好地利用Memcached提升应用的响应速度和整体效率。在使用Xmemcached时,结合其特性和版本1.3.3的...
在2.4.6这个版本中,xmemcached继续优化了性能和稳定性,为开发分布式缓存应用提供了强大支持。本文将深入探讨xmemcached 2.4.6的关键特性和应用场景,以及如何有效地利用这个库来提升系统的性能。 一、xmemcached...
XMemcached作为一款高度优化的memcached客户端,不仅支持memcached的所有功能,还提供了许多额外的功能,如动态节点管理、与Spring框架的集成等,使其成为现代Web应用程序的理想选择。通过本文的详细介绍,希望能...
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), ...
**Xmemcached官方中文手册** 是...总的来说,这份**Xmemcached官方中文手册** 是学习和使用Xmemcached不可或缺的参考资料,无论你是初学者还是有经验的开发者,都能从中受益匪浅,提升你的缓存管理和系统性能优化技能。
xmemcached是一款高性能、轻量级的Java客户端库,专为Memcached缓存系统设计,其1.4.3版本提供了丰富的功能和优化,旨在提升应用的性能和可扩展性。在本文中,我们将详细探讨xmemcached的核心特性和使用方法,帮助...
- `xmemcached-1.3.3-javadoc.jar`提供了API文档,详细解释了每个类和方法的功能和用法,是开发过程中重要的参考资料。 ### 5. 结论 xmemcached作为Java环境下优秀的Memcached客户端,以其高效、稳定和易用性赢得...
xmemcached-1.2.6.2
2. **命令编码与解码**:xmemcached 内部实现了高效的命令编码和解码机制,确保数据在传输过程中的准确性和效率。 3. **异步操作支持**:除了同步 API,xmemcached 还提供异步操作接口,以非阻塞的方式处理请求,...
xmemcached.chm帮助文档
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 模型来说,有 效率高(特别在高并发下...
虽然spymemcached和xmemcached提供了高级功能和优化,但有些开发者可能更倾向于使用原生的Memcached协议进行通信。这通常需要自己处理连接管理和并发控制,但可以提供更高的灵活性和对底层细节的控制。使用原生接口...
- **简化开发流程**:考虑到许多项目已经使用Spring框架作为依赖注入容器,XMemcached提供了对Spring的支持。此外,XMemcached还支持与Hibernate-Memcached集成,后者允许将Memcached用作Hibernate的二级缓存。 **8...
6. **优化与最佳实践** - **合理设置缓存大小**: 根据服务器资源和应用需求调整缓存大小,避免内存溢出。 - **合理设置过期时间**: 根据数据更新频率和重要性设置过期时间,以平衡缓存命中率和数据新鲜度。 - **...
基于java nio实现的高性能可扩展的memcached客户端。虽然Java的memcached库已经很多,但是这些Java开源memcached库并没有一个是基于NIO框架编写,因此...xmemcached的项目主页在:http://code.google.com/p/xmemcached/
1. 性能优化:xmemcached 2.4.5在性能上进行了进一步的优化,提高了与Memcached服务器的通信效率,降低了延迟,使得数据存取更加迅速。这得益于对内部代码的重构和并发处理能力的增强。 2. 异步API增强:在2.4.5...
xmemcached-1.4.2最新版,可用。memcached java客户端