- 浏览: 730853 次
- 性别:
- 来自: 重庆
-
文章分类
- 全部博客 (113)
- 移动支付 (1)
- 系统安全 (1)
- JAVA-Team研发环境 (2)
- 配置管理 (3)
- 开发 (3)
- 页面脚本开发 (5)
- 系统脚本开发 (1)
- 数据库 (6)
- 分布式 (8)
- JAVA基础及算法 (7)
- 开发集成及部署 (4)
- activeMQ (0)
- Thrift (1)
- memcached (11)
- linux (16)
- LVS (4)
- 日志 (4)
- hadoop (7)
- tcpdump (1)
- wireshark (1)
- test (0)
- Android BaseActivity (0)
- 云存储 (1)
- HTTP (3)
- S3 (1)
- xml (2)
- 序列化 (1)
- 部署 (0)
- 系统架构 (9)
- 存储 (0)
- 设计模式 (1)
- Spring (2)
- J2EE (4)
- maven (3)
- MYSQL (2)
- LDAP (2)
- JQuery (1)
- easyui (1)
- web前端 (1)
- tomcat (1)
- nosql (2)
- 开发技巧 (1)
- JPA (1)
- hibernate (1)
- Quartz (1)
最新评论
-
xinglianxlxl:
对我有用,非常感谢
xstream初步使用 -
liangbo11:
eclipse都无法启动
JDK扩展DCEVM让WEB程序完全不重启调试 -
Love_wh1314:
果然是这个问题。。。维护别人的代码,开始还以为自己改错了,结 ...
JQuery 实践问题 - toLowerCase 错误 -
tonyyan:
谢谢分享!
MAVEN Scope使用 -
908311595:
多谢楼主分享
xstream初步使用
Memcached JJAVA Client 性能测试
测试方案
机器环境
我的小本本,thinkPad410,4G内,i5cpu虚拟4核(也就是假4核),64位windows7盗版操作系统,另外还开了很多其它服务和软件,测试前的内存显示已用2.3G,不过还是剩的很多。
软件环境
在本地WINDOWS7下安装了3个memcached服务,分别给了128M,64M,64M内存。测试代码待ECLIPSE下直接运行。如果有好的环境,下次在跑跑看。
测试方法
10线程,每个线程10000次调用,每次分别调用5个业务方法,并且KEY都不同
依次:add,set,get,gets,cas,delete
测试代码
因为是测试代码些的很乱很随意了,见谅。以下测试代码依赖前面介绍的“我的代码”。
public class MemcachedClientTest { /** 线程数 */ static int THREAD_COUNT = 10; /** 每线程执行次数 */ static int PER_THREAD_COUNT = 10000; static String KEY = "key"; static String VALUE = "value"; static String NEW_VALUE = "newValue"; /** 成功数 */ int addSuccess; int setSuccess; int getSuccess; int getsSuccess; int casSuccess; int delSuccess; /** 执行时间 */ int addTotal; int setTotal; int getTotal; int getsTotal; int casTotal; int delTotal; int total; public static final Logger logger = LoggerFactory.getLogger(MemcachedClientTest.class); public static void main(String[] args) throws Exception{ MemcachedClient memcachedClient = new MemcachedClientJava(); MemcachedClientTest test = new MemcachedClientTest(memcachedClient); test.startTest(); } private MemcachedClient memcachedClient; private MemcachedClientTest(MemcachedClient memcachedClient) { super(); this.memcachedClient = memcachedClient; } public void startTest() throws Exception{ CountDownLatch latch = new CountDownLatch(THREAD_COUNT); ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT); for (int i = 1; i <= THREAD_COUNT; i++) { executor.execute(new Task("Thread-"+i,latch)); } latch.await(); executor.shutdown(); //total = addTotal+setTotal+getTotal+getsTotal+casTotal; total -= THREAD_COUNT * PER_THREAD_COUNT; //减去线程等待 logger.info("Test thread: " + THREAD_COUNT + "; total times: " + total + "ms" + ";count/thread: "+PER_THREAD_COUNT * 6); logger.info("add success : " + addSuccess + "; success rate: " + (addSuccess * 1.0f / (THREAD_COUNT * PER_THREAD_COUNT)) * 100 + "%"); logger.info("set success : " + setSuccess + "; success rate: " + (setSuccess * 1.0f / (THREAD_COUNT * PER_THREAD_COUNT)) * 100 + "%"); logger.info("get success : " + getSuccess + "; success rate: " + (getSuccess * 1.0f / THREAD_COUNT) * 100 + "%"); logger.info("gets success : " + getsSuccess + "; success rate: " + (getsSuccess * 1.0f / (THREAD_COUNT * PER_THREAD_COUNT)) * 100 + "%"); logger.info("cas success : " + casSuccess + "; success rate: " + (casSuccess * 1.0f / (THREAD_COUNT * PER_THREAD_COUNT)) * 100 + "%"); logger.info("del success : " + delSuccess + "; success rate: " + (delSuccess * 1.0f / (THREAD_COUNT * PER_THREAD_COUNT)) * 100 + "%"); logger.info("Average time: " + (total * 1.0f / (THREAD_COUNT * PER_THREAD_COUNT * 6))); logger.info("add TPS: " + (THREAD_COUNT * PER_THREAD_COUNT * 1.0) / (addTotal * 1.0 / 1000) + "; time: " + addTotal + "ms"); logger.info("set TPS: " + (THREAD_COUNT * PER_THREAD_COUNT * 1.0) / (setTotal * 1.0 / 1000) + "; time: " + setTotal + "ms"); logger.info("get TPS: " + (THREAD_COUNT * PER_THREAD_COUNT * 1.0) / (getTotal * 1.0 / 1000) + "; time: " + getTotal + "ms"); logger.info("gets TPS: " + (THREAD_COUNT * PER_THREAD_COUNT * 1.0) / (getsTotal * 1.0 / 1000) + "; time: " + getsTotal + "ms"); logger.info("cas TPS: " + (THREAD_COUNT * PER_THREAD_COUNT * 1.0) / (casTotal * 1.0 / 1000) + "; time: " + casTotal + "ms"); logger.info("del TPS: " + (THREAD_COUNT * PER_THREAD_COUNT * 1.0) / (delTotal * 1.0 / 1000) + "; time: " + delTotal + "ms"); logger.info("Average TPS: " + (THREAD_COUNT * PER_THREAD_COUNT * 5 * 1.0) / (total * 1.0 / 1000)); memcachedClient.flushAll(); } class Task implements Runnable{ private String name; CountDownLatch latch; public Task(String name,CountDownLatch latch) { super(); this.name = name; this.latch = latch; } public void run() { long start = System.currentTimeMillis(); for (int i = 0; i < PER_THREAD_COUNT; i++) { String key = name+KEY+i; long singleStart = System.currentTimeMillis(); if(memcachedClient.add(key, VALUE)){ addSuccess++; } addTotal += System.currentTimeMillis() - singleStart; singleStart = System.currentTimeMillis(); if(memcachedClient.set(key, NEW_VALUE)){ setSuccess++; } setTotal += System.currentTimeMillis() - singleStart; singleStart = System.currentTimeMillis(); if(memcachedClient.get(key) != null){ getSuccess++; } getTotal += System.currentTimeMillis() - singleStart; singleStart = System.currentTimeMillis(); CacheItem item = memcachedClient.gets(key); if(item.getValue() != null){ getsSuccess++; } getsTotal += System.currentTimeMillis() - singleStart; singleStart = System.currentTimeMillis(); if(memcachedClient.cas(key, NEW_VALUE, item.getUnique())){ casSuccess++; } casTotal += System.currentTimeMillis() - singleStart; singleStart = System.currentTimeMillis(); if(memcachedClient.delete(key)){ delSuccess++; } delTotal += System.currentTimeMillis() - singleStart; try { Thread.sleep(1); } catch (Exception e) { // TODO: handle exception } } long time = System.currentTimeMillis() - start; total += time; logger.debug(name + " - time:" + time); latch.countDown(); } } }
测试结果
20325 - Test thread: 10; total times: 75481s;count/thread: 60000
20325 - add success : 98137; success rate: 98.13699%
20326 - set success : 98192; success rate: 98.192%
20326 - get success : 98216; success rate: 982159.94%
20326 - gets success : 98237; success rate: 98.237%
20326 - cas success : 98675; success rate: 98.675%
20327 - del success : 98915; success rate: 98.915%
20327 - Average time: 0.12580167
20327 - add TPS: 18639.32898415657; time: 5365ms
20327 - set TPS: 8730.574471800244; time: 11454ms
20327 - get TPS: 7048.2097547223; time: 14188ms
20327 - gets TPS: 7649.938800489596; time: 13072ms
20327 - cas TPS: 7330.303474563847; time: 13642ms
20327 - del TPS: 6236.357966947303; time: 16035ms
20327 - Average TPS: 6624.183569375075
成功率都在98%以上,在我的小本本上还不错,平均TPS:6624。
发表评论
-
Memcached学习笔记
2011-07-10 02:04 2813公司很多项目都会使用缓存,而且都是在分布式环境中使用,比较全面 ... -
Memcached学习笔记 — 第六部分-Memcached缓存模型
2011-07-10 01:51 2131缓存机制: Slab Allocation ... -
Memcached学习笔记 — 第五部分-Memcached分布式实现
2011-07-10 01:43 8608memcached 虽然称为 “ 分布式 ” ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(5)-主要API解析
2011-07-10 01:38 4583找了很久都找不到官 ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(4)-版本差异
2011-07-09 22:38 5047Memcached Java Client 版本差异 ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(3)-Spring整合
2011-07-09 22:22 5075Memcached Java Client Spring ... -
Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用
2011-07-09 03:28 10390介绍 Memcached java client ... -
Memcached学习笔记 — 第三部分:Memcached协议详解
2011-07-09 02:46 14979Memcached 支持两种主要的协 ... -
Memcached学习笔记 — 第二部分:Memcached服务器安装
2011-07-09 02:17 7124Windows版本安装 windows 上安装 ... -
Memcached学习笔记 — 第一部分:Memcached基础
2011-07-09 02:07 3010本文是基于网上资料和自己的理解整理的学习笔记, ...
相关推荐
Memcached是一种广泛使用的分布式内存缓存系统,它能够...通过这篇学习笔记,你应该对gwhalin Memcached Java客户端有了初步了解,接下来可以结合实际项目,深入学习和实践,充分发挥Memcached在高并发场景下的优势。
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf
内容概要:本文详细介绍了基于瞬时无功功率理论的三电平有源电力滤波器(APF)仿真研究。主要内容涵盖并联型APF的工作原理、三相三电平NPC结构、谐波检测方法(ipiq)、双闭环控制策略(电压外环+电流内环PI控制)以及SVPWM矢量调制技术。仿真结果显示,在APF投入前后,电网电流THD从21.9%降至3.77%,显著提高了电能质量。 适用人群:从事电力系统研究、电力电子技术开发的专业人士,尤其是对有源电力滤波器及其仿真感兴趣的工程师和技术人员。 使用场景及目标:适用于需要解决电力系统中谐波污染和无功补偿问题的研究项目。目标是通过仿真验证APF的有效性和可行性,优化电力系统的电能质量。 其他说明:文中提到的仿真模型涉及多个关键模块,如三相交流电压模块、非线性负载、信号采集模块、LC滤波器模块等,这些模块的设计和协同工作对于实现良好的谐波抑制和无功补偿至关重要。
内容概要:本文探讨了在工业自动化和物联网交汇背景下,构建OPC DA转MQTT网关软件的需求及其具体实现方法。文中详细介绍了如何利用Python编程语言及相关库(如OpenOPC用于读取OPC DA数据,paho-mqtt用于MQTT消息传递),完成从OPC DA数据解析、格式转换到最终通过MQTT协议发布数据的关键步骤。此外,还讨论了针对不良网络环境下数据传输优化措施以及后续测试验证过程。 适合人群:从事工业自动化系统集成、物联网项目开发的技术人员,特别是那些希望提升跨协议数据交换能力的专业人士。 使用场景及目标:适用于需要在不同通信协议间建立高效稳定的数据通道的应用场合,比如制造业生产线监控、远程设备管理等。主要目的是克服传统有线网络限制,实现在不稳定无线网络条件下仍能保持良好性能的数据传输。 其他说明:文中提供了具体的代码片段帮助理解整个流程,并强调了实际部署过程中可能遇到的问题及解决方案。
基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档