自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 问答 (1)
  • 收藏
  • 关注

Redis Cluster的FailOver失败案例分析

[b]场景:[/b] 使用redis clusterRC1部署集群,6台机器,每台部署16个实例,每个master使用一个slave,node_timeout为默认值(15s)。kill掉其中一个master发现failover完成不了。通过cluster nodes观察,该节点一直处于pfail状态。问题出在失败判定上,一直处于PFail,说明完成不了PFail->Fail的转换。...

2015-02-05 17:51:04 217

原创 Redis的Aof被阻塞原因调查

[size=large][b]背景[/b][/size] Redis是单进程的,为了发挥多核的优势,我们redis集群采用在单台机器上部署多个redis实例,同时对持久化方式做了改进,采用rdb和增量的aof相结合的方式,appendfsync配置为no。那这样会有一个时段同时进行aof和rdb,当aof和rdb同时进行时,监控系统报警说某些请求Timeout,我们超时设置为2s。另外...

2014-07-18 12:25:58 568

java中的mmap实现

[list][*][b][size=medium]什么是mmap[/size][/b] mmap对于c程序员很熟悉,对于java程序员有点陌生。简而言之,将文件直接映射到用户态的内存地址,这样对文件的操作不再是write/read,而是直接对内存地址的操作。 在c中提供了三个函数来实现 [list] [*]mmap 进行映射 [*]munmap...

2014-07-17 17:41:15 755

写给《数据库引擎 CoolHash 性能测试报告》

首先第一眼印象,单机使用磁盘IO的话能支持100w qps。我只能说这是神一样的开源了。首先来看一个概念IOPS,每秒的IO次数,内存大概是1000w,SSD盘 35000,sas盘180,stat盘90这些数据我摘抄自《大规模分布式存储系统》,180的IOPS如何能支持100w的qps,还有CoolHash如果在一台机器上开启多个工人是并发随机IO,还是工人只负责写入内存,再用另外...

2014-07-11 14:33:03 164

写给高性能数据库引擎coolhash

前一段时间fourinone在ITEYE资讯上发表了一篇[url]http://www.iteye.com/news/29025-Fourinone-CoolHash[/url]高性能数据库引擎产品宣言,我回复评论说玩得酷,还要考得住,借用一些企鹅手机管家的台词,结果被fourinone十分不满意。又把我骂了一顿,我继续回击。面试的时候流行一句话,talk is cheap,show me ...

2014-05-27 16:54:10 229

原创 讨论一下淘宝的Fourinone

fourinone号称了集成了hadoop,zk,memcache,mq于一身的四不像超级神器,致力于分布式应用。别的我不懂,今儿聊一下fourinone中的分布式缓存以及分布式文件系统,说到分布式,不得不用到网络通讯,不得不提及RPC,fourinone号称只有100多K,不依赖任何第三方jar,那通讯怎么玩啊!自己用socket或者NIO实现,要知道用NIO实现一个网络通讯框架是很考验...

2014-05-06 18:54:05 109

原创 写给分布式神器Fourinone

fourinone号称了集成了hadoop,zk,memcache,mq于一身的四不像超级神器,致力于分布式应用。别的我不懂,今儿聊一下fourinone中的分布式缓存以及分布式文件系统,说到分布式,不得不用到网络通讯,不得不提及RPC,fourinone号称只有100多K,不依赖任何第三方jar,那通讯怎么玩啊!自己用socket或者NIO实现,要知道用NIO实现一个网络通讯框架是很考验...

2014-05-06 18:41:41 184

Redis Object的Idle Time

1. 获取object的idletime的算法    if (server.lruclock >= o->lru) {        return (server.lruclock - o->lru) * REDIS_LRU_CLOCK_RESOLUTION;    } else {        return ((REDIS_LRU_CLOCK_MAX - o...

2014-03-03 12:15:55 1268

2013技术博客汇总贴

马年第一帖,记录一下过去的2013看过的技术bloglinux  1.  理解inode       http://www.ruanyifeng.com/blog/2011/12/inode.html  2.  下厨房mysql数据丢失事故总结       http://tech.xiachufang.com/?p=18  3.   posix_fadvise清除缓存的误解...

2014-02-27 10:25:44 105

Netty的Nio写优化

  今天又看了一遍boyan的《Nip trick and trip》,又有一些新的收获。比以前看地更深刻了。其中有一处写到Nio的写优化,当Nio的channel设置为nonblocking时,写操作不再阻塞,而是直接返回0,表示当时socket的写缓冲区已满不可写。通常的处理办法是返回本次loop并继续注册op_read或者op_write。这样会带来线程切换的开销,使当前select阻塞,...

2013-07-12 16:26:39 435

wait-notify的另一种情况

wait-notify用在经典的生产者-消费者模型。一般代码都是先初始化consumer,然后再初始化producer,程序正常运行。这是带有wait()先进入同步语句块,带有notifyAll()的后进入同步语句块。现在反过来带有notifyAll()先进入同步语句块,儿带有wait()的后进入语句块,这时候程序会一直阻塞,觉得很蹊跷,带着这个对synchronized,wait,notify...

2013-06-19 15:17:53 92

用CountDownLatch和AtomicReference解决cache失效大并发透传DB的思路

  cache失效大并发透传DB,在TimYang的一篇博文Memcache mutex设计模式介绍过。提到了两种方案。其中第一方案的sleep时长不好把握。if (memcache.get(key) == null) { // 3 min timeout to avoid mutex holder crash if (memcache.add(key_mutex, ...

2013-06-18 18:33:40 220

基于Netty打造HttpClient实现股票实时推送

   Netty也研究了一段时间,实践是对知识掌握的试金石。有些东西只是看了面儿上的东西我觉得懂了,如不去深入,一旦要用它去做点什么东西却又觉得无从下手。学车的时候,学员问教练我怎么算是学会开车了,教练告诉他当你倒着开和向前开一样自如的时候就算学会了。怎么算掌握了一项技术呢?我的观点,多阅读源码,然后去实践,如此反复,读源码就像倒车。      为啥用Netty去实现呢?首先提供了Http...

2013-01-11 18:21:02 676

基于Netty实现CometStreaming方式的聊天室

       这段时间在研究web服务器消息推送,除了html5的websocket,comet是一项很好的方案。comet不是一项专门的技术,更像是一个解决方案。说来也简单,服务端需要能把connection hold,浏览器也需要特殊的支持保持从服务端获取数据,幸好用xmlhttprequest,ajax的实现也是靠它。comet一般有两种方式long poll和streaming。长轮询是c...

2013-01-06 17:18:21 253

Java并发编程JUC源码学习之ThreadPoolExecutor

 ThreadPool的优点,比如资源的控制以及不用频繁的创建线程等就不用多说了。主要来讨论一下ThreadPoolExecutor的几个关键参数以及对task的添加以及线程的管理。它有这么个重要的参数corePoolSize、maximumPoolSize、keepAliveTime和taskqueue。corePoolSize   线程池维持处于Keep-alive状态的线程数量。如果设...

2012-12-11 23:30:32 87

Netty笔记:ReplayingDecoder中buffer使用的一点小陷阱

   ReplayingDecoder的原理是阻塞IO,当没有读到足够的数据时,会抛出RelayError,进入以后的LOOP中不断check是否有足够的数据。因此每次读取时我们倒要check一下buffer的数据。为此Netty提供了ReplayingDecoderBuffer这样一个代理类封装原有的buffer。以readInt为例,首先要检查是否有4个字节可读。不满足抛出ReplayErro...

2012-12-11 10:27:57 345

Netty笔记:ReplayingDecoder

  为什么需要ReplayingDecoder,它和FrameDecoder有什么不同呢?ReplayingDecoder是一种特殊FrameDecoder,它能实现在IO阻塞的情况下实现无阻塞的解码。听起来比较拗口而且不好理解,举个例子来说,假设你在用netty设计一个文件传输的模块,采用的Header-Content的协议,在Header中说明文件的长度,我们用一个int来容纳长度,Conte...

2012-12-08 12:57:47 300

Nio框架需要注意的两个问题(2)

    书接上回,上次说到了selector的register和select会有锁冲突,这次再来考虑write的问题。1. channel.write(Bytebuffer)是不是总是可写,当socket的writeBuffer满的时候会返回0,说明不能再写进任何字节。假设要写入一个很大的ByteBuffer,有可能需要分多次写。2. channel上执行write操作需要获得锁保证同步,...

2012-11-27 17:35:13 77

Nio框架需要注意的两个问题(1)

研究了一段时间Nio框架,有Netty和Tomcat的Nio Connector总结了一些共性的问题的解决方案。   1. Selector的register和select有锁冲突,例如tomcat的Nio Connector,他采用的Acceptor和Poller的模式,Acceptor只负责接收socket,Poller是负责读写的IO线程,这种模式不用于nginx,Poller...

2012-11-26 13:32:47 99

spring使用注解暴露remoting服务

  spring提供了多种序列化方式的基于http协议的rometing服务并且在使用的接口方式,服务端使用Exporter,客户端使用FactoryBean,例如hessian的HessianExporter和HessianProxyFactoryBean。exporter有两个参数比较关键一个是serviceInterface,另外一个是service bean本身。无论是HessianExp...

2012-11-20 13:28:31 281

Netty笔记:FrameDecoder

     FrameDecoder是Netty Protocol Decode最关键的Decoder,几乎所有和协议解码相关的Decoder都继承自它,那到底解决了什么问题?为什么需要这样的一个部件呢?TCP的传输是基于流的,每个数据包都有可能被分片和然后重组,这时候我们就需要协议去界定一个数据包,通常来说用来方式来确定数据包的边界,一个是基于长度,简单一点就是规定数据包的长度,例如规定每个数据包...

2012-09-29 11:14:35 396

原创 话说Connect reset异常

     起因是这样的,线上log经常出现Connection Reset异常,从堆栈上分析是solr进行sharding request时发生的,solr部署在tomcat上。从现场来看,原因很明白Server端发出RST包。但具体原因是什么就得经过一番分析了,    经过google百度以及和网友沟通,发现会有以下场景导致RST:    1. 设置SoLinger,并设置停留时间为...

2012-09-25 16:20:58 737

关于select()方法最大轮询数限制的更正

 昨日和公司同事分享Netty入门的时候,讨论了如下两个问题:    1. Select的最大轮询数限制是1024    2. 当超过1024以后还能注册吗? 或者如何突破1024的限制     我昨天又查阅了一番文档,select最大轮询数不一定是1024,而是FD_SET这个参数,如FD_SET设置为128,则最大轮询数为128。一般为FD_SET的值设置为1024,...

2012-08-23 10:46:08 879

图解LinkedHashMap的LRU

数据结构支持: 双向循环链表改造过程:1,在LinkedHashMap的初始化过程添加一个dumy的header双向链表头2,在Entry添加before和after过程演示:1.  dumy的header      before(header)<----header --->after(header)2.   插入第一个entry        ...

2012-05-23 15:40:01 78

原创 ReentrantLock为啥会出现不公平的场景

      不公平锁产生的原因的是acquire在enqueue之前,这样后来的线程有可能会较在等待队列中的等待者之前获得锁。barging这个词可以理解为闯入,插队。不公平锁会导致某些线程总是不排队就获得锁,而同时排在队尾的线程总是出现饥饿状态。那么如何获取公平锁呢,Doug Lee页给出了方案,很简单在acquire的时候,首先检查当前线程是否在队列中(对首),如在队列中即可获得,如不...

2012-05-22 12:31:11 164

httpclient3.1的relaseConnection的misunderstand

releaseConnection是close connection,基于连接池的认识,我们首先会想到是释放链接,至于是否close就不得而知了。近日发现线上系统出现了close wait的socket,close wait是由于被动关闭的一方没有执行socket.close()导致,由此可见我们code中存在没有正确关闭socket。类似的code是这样的HttpClient h...

2012-05-17 15:54:15 248

原创 NIO[SelectableChannel.register和Selector.select会有锁等待冲突]

 结论: register得放在select之前进行Thread Dump信息:"Poller-1" prio=6 tid=0x040f0400 nid=0x408 runnable [0x044df000]   java.lang.Thread.State: RUNNABLE        at sun.nio.ch.WindowsSelectorImpl$SubSele...

2012-05-09 09:40:12 435

原创 spring+mybatis利用interceptor(plugin)实现数据库读写分离

1. 前提    好长时间不写博客了,应该吐槽,写点什么东西了!最近在研究数据库读写分离,分表分库的一些东西。其实这个问题好早之前就想好,只是以前使用hibernate,难点是不好判断什么样的sql走读库,什么样的sql走主库?用正则匹配开头或许可以,/^select 没想出什么好的解决方法,mybatis就不一样了,mappedstatement有commandtype属性,象select,...

2012-04-24 22:28:26 225

扩展hibernate Criteria的Order使其支持sql片段(oracle)

       Criteria的Order功能简洁,只支持按照某个属性(字段)的排序,如果想要实现order by min(id) 这样的应用场景就没戏儿了,起初我想用interceptor的onPrepareStatement()修改sql,但受困于spring管理事务,如用interceptor就得所用的session都使用interceptor,而不能做到灵活使用。我们知道projectio...

2012-01-10 11:32:38 108

说一下多线程中用到的join

     join:调用线程等待被调用线程执行结束方可执行下面的操作,使用的场景如下,主线程需要调用一个线程A去异步执行一个操作,同时主线程必须等到线程A执行完毕才能执行,join就派上用场了。    具体实现也简单,通过一个线程来判断线程A时候执行完成,用isAlive()判断,如果依然在执行(存活),调用线程A的wait()使主线程等待。 public final synchro...

2012-01-04 17:02:57 93

浅谈tomcat的ThreadLocalLeakPreventionListener实现原理

为什么需要threadlocalLeakPerventionListener    当context reload的时候,如果正在执行的worker线程引用了threadlocal中的变量,会造成整个webclassloader回收不了造成内存泄露,具体请移步tomcat的wiki http://wiki.apache.org/tomcat/MemoryLeakProtection,wiki上...

2011-12-30 23:30:34 331

如何修改tomcat的server信息增加服务器的安全

 server信息是保存在response的header中,例如tomcat7的header是Server:Apache-Coyote/1.1。既然是放在header中,很容易想到加一个filter,在filter中修改response添加server的header信息,出发点是好的,但是现实很残酷,走不通,恰巧在tomcat user maillist中看到一个人问到这个问题,就此记录...

2011-12-07 09:49:33 151

说一说hibernate的Get和Load

    N多面试题里,只要涉及hibernate就会这样的问题,说一说hibernate的Get和Load到底哪个效率高?我也曾经被这样面过,也被这样的面试题BS过,当时的答案无非就是从谷歌百度上搜一把记下,比如Get不用使用一级缓存和二级缓存,直接从数据库中load。而load采用proxy,走一级缓存和二级缓存,诸如此类的。但是事实上这样吗?proxy和从缓存中有神马关系啊?使用proxy就能...

2011-11-24 10:01:11 52

对Cookie的一点认识

1. Cookie是怎么在服务器和浏览器之间传递的?(以Tomcat为参考)response.addCookie()将cookie写到客户端request.getCookies()获取浏览器端的cookie但底层是怎么实现的?查看一下Tomcat的源码得知:原来是把Cookie对象拼成一定格式的字符串放在header中,header的名字叫set-cookie.有一点尤其重要可以有...

2011-11-21 09:18:52 93

BoneCP数据源记录SQl比hibernate的show sql好用

如何使用1. 配置logStatementsEnabled为true    <property name="logStatementsEnabled" value="true"/> 2 .配置log日志log4j.logger.com.jolbox=DEBUG,SQLLOGlog4j.appender.SQLLOG=org.apache.log4j.D...

2011-11-17 15:35:24 64

StringBuffer与StringBuilder浅析

1. 为什么要用StringBuffer和StringBuilder? String c = "aaa" +"bbb"与sb.append("aaa").append("bbb")有什么区别,类似这样的问题大家应该都很熟悉,它经常出现在面试题,我想答案大家都已经很清楚,用+会创建多个String,因为String是存放在常量池中的,而且是不可以变的,"aaa"变不成"aaabbb"

2011-11-17 13:23:58 53

初始化(Map,List)容器类的容量会有一定的性能提升

 容器类底层的数据结构大多使用数组,我们知道数组是不能动态修改它的size,假如非要修改的话,只要初始化另外一个更大容量的数据,并将原来的数据复制过去。对容器类的插入操作,首先就得check是否容量满足,如不满足先扩展 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments m...

2011-11-15 13:39:22 180

SpringMVC 拦截器实现分析

SpringMVC的拦截器不同于Spring的拦截器,SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet,所以只需要在DispatcherServlet上做文章即可,DispatcherServlet也没有代理,同时SpringMVC管理的Controller也不有代理。哪不难想到我们在执行controller之前做某些动作,执行...

2011-11-15 13:15:17 56

利用springMVC的interceptor实现页面性能监控(Filter亦可)

   调优第一步,找出耗时比较长的页面进行优化。利用interceptor能轻易搞定。interceptor提供了preHandle和postHandle以及afterCompletion三个方法。preHandle调用controller具体方法之前调用,postHandle完成具体方法之后调用,afterCompletion完成对页面的render以后调用,至此整个页面渲染完成。也就是说我们在...

2011-11-15 13:00:43 138

原创 Tomcat的ThreadLocalLeakPreventionListener工作原理

当context stop的时候,如果thread pool的thread没有正常停止的话,而且ThreadLocal中引用了webclassloader加载的对象,有很有可能造成内存泄露,一个解决办法就是杀掉所有的threadpool的线程。Tomcat的ThreadLocalLeakPreventionListener就是这样一个原理 Engine engine = (Engine) cont...

2011-11-14 18:28:45 320

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除