- 浏览: 1910919 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
jquery打印指定的div -
GentlemanQc:
...
quartz系列(二)spring3.2.5与quartz2.1.7集群版集成简要说明 -
静夜独窗:
你好,能说一下server.xml增加的配置是怎么影响性能的吗 ...
tomcat7.0性能优化-挑战极限精简版 -
beyondfengyu:
beyondfengyu 写道如果每个客户进程的时间不同步,时 ...
java并发(二十二)分布式锁 -
beyondfengyu:
如果每个客户进程的时间不同步,时间超前的进程是不是更容易得到锁 ...
java并发(二十二)分布式锁
一 服务器配置
1)cpu
2颗 Intel(R) Xeon(R) CPU E5620@2.40GHz
processor : 15
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
stepping : 2
cpu MHz : 1596.000
cache size : 12288 KB
physical id : 1
siblings : 8
core id : 10
cpu cores : 4
apicid : 53
initial apicid : 53
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt aes lahf_lm arat epb dts tpr_shadow vnmi flexpriority ept vpid
bogomips : 4799.88
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
2)内存
64G
free -g
total used free shared buffers cached
Mem: 62 28 33 0 0 16
-/+ buffers/cache: 11 51
Swap: 31 0 31
3)硬盘
768G的SSD + 1TB的SATA磁盘
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-lv_root
197G 10G 177G 6% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/mapper/VolGroup00-lv_application
686G 6.6G 645G 2% /application
/dev/sda2 1008M 55M 902M 6% /boot
/dev/sda1 1022M 23M 1000M 3% /boot/efi
/dev/mapper/VolGroup01-lv_data0
916G 19G 851G 3% /data0
二 环境
局域网做压力测试,利用
10.10.160.154作为客户端
10.10.160.155作为memcached的服务器端
memcached启动参数
memcached -d -m 8192m -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80
思路:采用8G内存作为测试环境。增长因子1.25,chunk初始大小为80B。其中算上chunk的自身数据结构48B,总的起始大小为128B。参考新浪微博高并发的经验,链接数设置为1024。
三 测试结果
客户端在128线程同时并发写入读取的时候性能最好
get稳定在19.4W #/second
打开注释:memcachedClient.get(key);
set稳定在17.2W #/second
打开注释:memcachedClient.set(key, 0, System.currentTimeMillis());
另外在4台客户端同时对服务器进行压力测试的时候,服务器处理能力可以提升到50W #/second这基本上是单台单线程server的极限。
测试set的时候,服务器状态
四 测试代码
思路:开个128的线程池。每个线程无限循环像memcached服务器无限循环调用。key为随机生成String key = new Random().nextFloat() + "" + j,value采用当前的时间戳System.currentTimeMillis()。然后每个线程都有自己的原子计数器,另外启动一个线程,每秒钟计算各线程原子计数器的总和。同时输出总的平均值。
五 其他
测试的log和代码,都放到了附件里,请大家一起讨论。
互相尊重研究成果,有疑问可以交流,谢谢。
作者简介
昵称:澳洲鸟,猫头哥
姓名:朴海林
QQ:85977328
MSN:6301655@163.com
转载请注明出处
都是个人心得和感悟,有机会多多交流
1)cpu
2颗 Intel(R) Xeon(R) CPU E5620@2.40GHz
processor : 15
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
stepping : 2
cpu MHz : 1596.000
cache size : 12288 KB
physical id : 1
siblings : 8
core id : 10
cpu cores : 4
apicid : 53
initial apicid : 53
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt aes lahf_lm arat epb dts tpr_shadow vnmi flexpriority ept vpid
bogomips : 4799.88
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
2)内存
64G
free -g
total used free shared buffers cached
Mem: 62 28 33 0 0 16
-/+ buffers/cache: 11 51
Swap: 31 0 31
3)硬盘
768G的SSD + 1TB的SATA磁盘
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-lv_root
197G 10G 177G 6% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/mapper/VolGroup00-lv_application
686G 6.6G 645G 2% /application
/dev/sda2 1008M 55M 902M 6% /boot
/dev/sda1 1022M 23M 1000M 3% /boot/efi
/dev/mapper/VolGroup01-lv_data0
916G 19G 851G 3% /data0
二 环境
局域网做压力测试,利用
10.10.160.154作为客户端
10.10.160.155作为memcached的服务器端
memcached启动参数
memcached -d -m 8192m -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80
思路:采用8G内存作为测试环境。增长因子1.25,chunk初始大小为80B。其中算上chunk的自身数据结构48B,总的起始大小为128B。参考新浪微博高并发的经验,链接数设置为1024。
三 测试结果
客户端在128线程同时并发写入读取的时候性能最好
get稳定在19.4W #/second
打开注释:memcachedClient.get(key);
set稳定在17.2W #/second
打开注释:memcachedClient.set(key, 0, System.currentTimeMillis());
另外在4台客户端同时对服务器进行压力测试的时候,服务器处理能力可以提升到50W #/second这基本上是单台单线程server的极限。
测试set的时候,服务器状态

四 测试代码
思路:开个128的线程池。每个线程无限循环像memcached服务器无限循环调用。key为随机生成String key = new Random().nextFloat() + "" + j,value采用当前的时间戳System.currentTimeMillis()。然后每个线程都有自己的原子计数器,另外启动一个线程,每秒钟计算各线程原子计数器的总和。同时输出总的平均值。
package com.panguso.phl; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor.AbortPolicy; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import net.rubyeye.xmemcached.MemcachedClient; import net.rubyeye.xmemcached.MemcachedClientBuilder; import net.rubyeye.xmemcached.XMemcachedClientBuilder; import net.rubyeye.xmemcached.command.BinaryCommandFactory; import net.rubyeye.xmemcached.utils.AddrUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PerformanceTest { private static Logger logger = LoggerFactory.getLogger(PerformanceTest.class); private static int corePoolSize = 128; private static int maximumPoolSize = 128; private static long keepAliveTime = 0; private static TimeUnit unit = TimeUnit.NANOSECONDS; private static BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(1024); private static ThreadFactory threadFactory = Executors.defaultThreadFactory(); /** * AbortPolicy 如果总线成熟超过maximumPoolSize + workQueue ,则跑异常java.util.concurrent.RejectedExecutionException */ private static RejectedExecutionHandler handler = new AbortPolicy(); //ExecutorService 为线程池的接口 private static ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); private static int concurrent = 32; private static long size = Long.MAX_VALUE; private static List<AtomicLong> counts = new ArrayList<AtomicLong>(); private static AtomicInteger count = new AtomicInteger(0); private static long sum = 0; private static AtomicInteger sumCount = new AtomicInteger(1); public static void main(String[] args) throws Exception { if (args.length > 0) { concurrent = Integer.valueOf(args[0]); size = Integer.valueOf(args[1]); } for (int i = 0; i < concurrent; i++) { counts.add(new AtomicLong(0)); } logger.info("concurrent=" + concurrent); logger.info("size per thread=" + size); final MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("10.10.160.155:11211")); builder.setCommandFactory(new BinaryCommandFactory()); final MemcachedClient memcachedClient = builder.build(); for (int i = 0; i < concurrent; i++) { executor.execute(new Runnable() { @Override public void run() { AtomicLong current = counts.get(count.getAndIncrement()); for (long j = 0; j < size; j++) { String key = new Random().nextFloat() + "" + j; try { memcachedClient.set(key, 0, System.currentTimeMillis()); // memcachedClient.get(key); } catch (Throwable e) { logger.error(e.getMessage(), e); } current.incrementAndGet(); } } }); } while (true) { Thread.sleep(1000); long tmp = 0; for (int i = 0; i < counts.size(); i++) { tmp += counts.get(i).getAndSet(0); } sum += tmp; logger.info("count=" + tmp + ",average=" + sum / sumCount.getAndIncrement()); logger.info("count=" + tmp); } // memcachedClient.shutdown(); } }
五 其他
测试的log和代码,都放到了附件里,请大家一起讨论。
互相尊重研究成果,有疑问可以交流,谢谢。
作者简介
昵称:澳洲鸟,猫头哥
姓名:朴海林
QQ:85977328
MSN:6301655@163.com
转载请注明出处
评论
7 楼
85977328
2015-01-22
这个跟CPU是否超线程有关系
6 楼
85977328
2015-01-22
4楼,贴一下你的CPU
5 楼
85977328
2015-01-22
我这个是16线程
4 楼
fdrshuster
2015-01-19
这个机器配置(物理机器),单机单线程能到17W set,我觉得有点诧异。可以参考一下
http://wenku.baidu.com/link?url=3XHLT0cE9T0xtohPKGhq1shCScckHivtY7FF8KbxcBPm3pyXR5UKQoV7l-BIzNfQCjGcKYFo7xupEWkYF-aNyqqHJBEcu0kA3uhYZgjnTRO
这位同学用的的8核,千兆网络环境下set才到10w。我觉得KEY/VALUE大小差不多规模。结果不应该有这么大的差距。我自己实测其实也接近这个结论。不知道楼主是怎么得出这个测试结论的。
http://wenku.baidu.com/link?url=3XHLT0cE9T0xtohPKGhq1shCScckHivtY7FF8KbxcBPm3pyXR5UKQoV7l-BIzNfQCjGcKYFo7xupEWkYF-aNyqqHJBEcu0kA3uhYZgjnTRO
这位同学用的的8核,千兆网络环境下set才到10w。我觉得KEY/VALUE大小差不多规模。结果不应该有这么大的差距。我自己实测其实也接近这个结论。不知道楼主是怎么得出这个测试结论的。
3 楼
85977328
2013-10-10
2896223031 写道
性能测试学学学
都是个人心得和感悟,有机会多多交流
2 楼
2896223031
2013-09-25
性能测试学学学
1 楼
85977328
2013-09-25
发表评论
-
redis(四)vs memcache
2017-07-04 14:35 910redis使用单核,memcahe可以使用多核 平均每一个核上 ... -
本地缓存(一)ehcache/jcs/cache4j/jcs的性能测试与使用场景分析
2015-09-05 22:02 4507前言 之前在网上看过几篇本地缓存的性能测 ... -
memcached(十九)并发原语CAS与GETS操作
2014-06-28 23:43 13452最近笔者自己的项目中,遇到了乐观锁的需求。但是redi ... -
memcached(十八)缓存业务逻辑
2014-03-13 14:05 2165在高并发的网站只用,缓存的作用之一,就是保存持久层的查询结果。 ... -
memcached(十七)协议命令格式
2014-01-16 23:06 2015memcached的管理使用的是telnet 登录服务器 te ... -
memcached(十六)缓存基本知识
2014-01-12 23:52 1616缓存简介 缓存,让数据更接近于使用者; 工作机制是:先从缓存中 ... -
memcached(十五)binary vs text protocols
2014-01-12 11:30 6388memcached服务端支持2种传输协议,还有一种XMemca ... -
memcached(十四)memcached单次请求性能分析
2014-01-12 01:46 2445试验环境和IP 服务器:10.10.64.83 客户端:10. ... -
memcached(二十)Dogpile效应
2015-10-03 09:34 1900Redis/Memcached高并发访问下的缓存失效时 ... -
memcached(十三)memcached内存占用分析
2013-12-06 21:30 1656最近又在研究memcached,如果想进一步研究如何使 ... -
redis(三)主要数据结构
2013-11-26 10:06 1192值的长度不能超过1GB 计数器 原子递增:incr map ... -
redis(二)主从复制
2013-11-26 10:05 1392一、Redis的Replication: Redis ... -
redis(一)初识
2013-11-26 10:03 1451官网 http://redis.io/ 中国社区 http:/ ... -
memcached(十二)1.4的stats命令
2013-11-08 10:52 2560STAT pid ... -
memcached(十一)memcached-session-manager
2013-11-08 23:08 1761介绍 memcached-session-manager是将t ... -
memcached(十)simple-spring-memcached
2013-11-08 22:22 3754简介 simple-spring-memcached是spri ... -
memcached(九)客户端高级-Java
2013-11-08 10:13 3077简介 目前常用的Java客户端有3种。 MemcachedC ... -
memcached(八)一致性哈希高级应用
2013-11-07 09:44 5295简介 一致性哈希 ... -
memcached(七)failure模式和standby节点
2013-11-06 23:37 2282关于failure模式,可以看下memcached官方 ... -
memcached(三)内存管理
2013-11-05 21:16 5029基本概念:slab,pa ...
相关推荐
1. **分布式存储**:memcached不存储在单个服务器上,而是将数据分发到多台服务器,实现负载均衡。 2. **Key-Value存储**:memcached采用键值对(Key-Value)的方式存储数据,便于快速查找和操作。 3. **内存存储**...
2. 分布式架构:Memcached支持多台服务器分布式部署,通过一致性哈希算法实现数据的均匀分布,避免了单点故障问题。 3. LRU(Least Recently Used)策略:当内存满时,Memcached会使用LRU策略淘汰最近最少使用的数据...
当数据量超过单个服务器的内存限制时,可以将Memcached 部署在多台服务器上,通过一致性哈希策略将数据均匀分配到各个节点,从而实现数据的分布式存储和访问。 ### 3. 性能优化 - **内存管理**:Memcached 使用...
4. **负载均衡**:在多台服务器上部署Memcached,使用一致性哈希实现负载均衡,确保数据的均匀分布。 总的来说,Memcached是提高Web应用性能的有效工具,通过理解其工作原理、合理配置和运用最佳实践,可以在许多...
Memcached支持分布式部署,可以在多台服务器之间共享缓存数据。这意味着,即使单个服务器的内存有限,也可以通过增加更多的服务器来扩展缓存容量,以应对大规模的并发访问需求。这种分布式特性使得Memcached成为高...
- Memcached本身采用单线程模型,但可以通过多实例部署实现横向扩展。 ##### 事件处理机制 - **事件驱动**:Memcached的核心处理逻辑基于事件驱动,这使得它能够高效地处理大量并发连接。 #### 五、总结 通过对...
- **单线程模型**: 为了减少线程上下文切换带来的开销,Memcached采用单线程模型处理请求。由于网络I/O是异步的,这并不影响其并发性能。 6. **扩展性** - **分布式**: Memcached支持多实例部署,通过一致性哈希...
4. **多线程模型**:memcached采用单进程多线程模型,每个连接分配一个工作线程,提高了并发处理能力。 **二、memcached的使用** 1. **安装部署**:在Linux环境下,可以通过编译源码安装memcached,配置参数包括...
例如,连接Memcached服务器: ```php $memcached = new Memcached(); $memcached->addServer('localhost', 11211); ``` 5. 存储和获取数据: ```php $memcached->set('key', 'value'); $value = $memcached->get('...
4. **多线程**:服务器端采用多线程模型,每个连接由单独的线程处理,提高了并发性能。 5. **压缩**:虽然内存中的数据是未压缩的,但如果需要,Memcached可以对存储的数据进行压缩,节省内存空间。 **应用场景** ...
2. **连接与操作**:Java客户端库提供了API来连接memcached服务器,执行基本的缓存操作,如设置、获取、删除键值对。这些操作通常是异步的,以保证高并发下的性能。 3. **API接口**:常见的Java客户端库如...
MemCached通过将数据分散存储在多台服务器上,实现了数据的分布式管理,从而提高了系统的可扩展性和可用性。这种架构允许通过添加更多的硬件节点来线性提升整个缓存系统的处理能力,而不必将所有数据都集中在单一...
- **基于IP隧道的负载均衡**:允许后端服务器部署在不同的地理位置,通过IP隧道技术将请求导向距离用户最近的服务器,提高响应速度。 #### 五、Web缓存技术 缓存技术是提高Web性能的重要手段之一,主要作用包括: ...
3. **负载均衡**:在多台服务器上部署memcached,通过一致性哈希等策略实现负载均衡。 4. **安全考虑**:虽然memcached是内网服务,但也应关注安全性,例如限制对外访问、设置防火墙规则。 总结来说,"memcached-...
2. **分布式存储**:Memcached 支持分布式部署,可以在多台服务器上运行多个实例,通过一致性哈希或其他分配策略,将数据分散存储,形成一个巨大的内存缓存池。 3. **非阻塞网络 IO**:采用 libevent 库处理网络...
例如,Facebook曾经拥有超过20台Memcached服务器,每台服务器配备四核AMD64处理器,总缓存数据量达到3TB。 #### 二、Memcached使用详解 **1. 安装:** Memcached的安装过程较为简单,通常需要以下步骤: - 下载...
在IT领域,构建高并发高性能服务器是至关重要的技术挑战,特别是在大数据时代,处理大量用户请求、实时数据交换以及保持高效的服务响应成为系统设计的核心。本资料包提供的"高并发高性能服务器"源码提供了深入理解这...