<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[momo]]></title><description><![CDATA[@momodajiangjun]]></description><link>https://blog.youkuaiyun.com/chenxinl</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chenxinl]]></copyright><item><title><![CDATA[zookeeper的异常处理(Disconnected, SyncConnected, Expired)]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/9746167</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/9746167</guid><author>chenxinl</author><pubDate>Sun, 04 Aug 2013 14:06:52 +0800</pubDate><description><![CDATA[最近系统中使用zookeeper支持三个功能：全量/增量索引的消息通知；搜索活跃节点检查；分布式锁做索引切换同步。
线上服务对稳定性要求较高，包括各种异常情况，如网络中断导致连接断开，系统load过高导致zk 超时等。从使用角度，做了几个测试，总结如下：


1. zk内部两个后台线程：心跳线程（SendThread），时间处理线程（EventThread），均为单线程，且互相独立。所以e]]></description><category></category></item><item><title><![CDATA[c++和java中的atomic/volatile]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/8886624</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/8886624</guid><author>chenxinl</author><pubDate>Sun, 05 May 2013 13:25:55 +0800</pubDate><description><![CDATA[看到两篇不错的文章，分别介绍atomic和olatile关键字在java和c++中的表现，很不错。

long count = 0;
for(int i=0; i<1000; i++)
    count++;这段代码在c++中，经过编译后，count会被优化到寄存器中，++的操作也都是针对寄存器的；如果加上volatile关键字，可以保证count不会被优化到寄存器，每次都走内存；如果使用a]]></description><category></category></item><item><title><![CDATA[lucene的FieldCache与内存管理]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/8028584</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/8028584</guid><author>chenxinl</author><pubDate>Wed, 10 Oct 2012 13:47:51 +0800</pubDate><description><![CDATA[为了支持变长字段和更丰富的数据类型，我们在搜索项目中对lucene的FieldCache做了部分扩展；但使用下来碰到了内存泄漏，所以这里对 lucene的FieldCache做下细致的了解。FieldCache使用WeakHashMap做核心的cache管理，key是IR对象内部的 frequency文件对象，value是对应字段的数组。虽然WeakHashmap像个核武器，声称可以自动释放对象；]]></description><category></category></item><item><title><![CDATA[java中jmx/jconsole/jstat/jmap的关系]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/8009661</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/8009661</guid><author>chenxinl</author><pubDate>Sun, 23 Sep 2012 14:29:00 +0800</pubDate><description><![CDATA[JMX是java5开始提供的对java应用进行监控的一套接口。实现方式是在jvm内部起一个mbeanserver通过网络对外开放调用接口，这样外部就可以做应用监控或者类似远程方法调用。java默认实现了jvm的一些监控，比如堆内存使用情况(MemoryMXBean)，线程情况（ThreadMXBean），gc情况等，外部程序可以直接使用，比如jconsole实际上就是对这些bean的包装，只是把返]]></description><category></category></item><item><title><![CDATA[关于CMS: abort preclean due to time]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7980218</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7980218</guid><author>chenxinl</author><pubDate>Fri, 14 Sep 2012 18:18:55 +0800</pubDate><description><![CDATA[hotspot的jvm目前主要支持4种gc，分别是：SerialGC, ParallelGC, ParallelOldGC和CMS GC。对于离线任务，更关注吞吐量，一般推荐ParallelOldGC；对于实时响应的任务，比如web server类似，推荐CMS gc。
详细的GC介绍可以参考bluedavy的介绍：http://rdc.taobao.com/team/jm/archives/6]]></description><category></category></item><item><title><![CDATA[dumpAllThreads挂起程序的问题]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7979692</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7979692</guid><author>chenxinl</author><pubDate>Fri, 14 Sep 2012 18:00:18 +0800</pubDate><description><![CDATA[ThreadMXBean.dumpAllThreads(true,true)因为要获取所有jvm线程的monitor和synchronizer信息，会挂起执行线程。对负载较大的服务器端程序，会引起latency飙升，需要特别注意。我们的搜索服务中有一个后台监控线程，定期调用这个方法，导致这个时间点的查询，响应时间飙升。不获取锁信息（dumpAllThreads(false, false) ），不会]]></description><category></category></item><item><title><![CDATA[漫谈linux文件IO]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7900653</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7900653</guid><author>chenxinl</author><pubDate>Thu, 23 Aug 2012 16:40:18 +0800</pubDate><description><![CDATA[这篇文章写的比较全面，也浅显易懂，备份下。转载自：http://blog.chinaunix.net/uid-27105712-id-3270102.html

在Linux 开发中，有几个关系到性能的东西，技术人员非常关注：进程，CPU，MEM，网络IO，磁盘IO。本篇文件打算详细全面，深入浅出。剖析文件IO的细节。从多个角度探索如何提高IO性能。本文尽量用通俗易懂的视角去阐述。不copy内]]></description><category></category></item><item><title><![CDATA[c++11的std::memory_order]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7889788</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7889788</guid><author>chenxinl</author><pubDate>Tue, 21 Aug 2012 11:22:37 +0800</pubDate><description><![CDATA[首先明确一点，std::atmoic和std::memory_order只有在多cpu多线程情况下，无锁编程才会用到。在x86下，由于是strong memory order的，所以很多时候只需要考虑编译器优化的memory order；保险起见，可以用std::atomic，他会同时处理编译器优化和cpu的memory reorder（虽然x86用不到）。在除非必要的情况下，不用使用std::m]]></description><category></category></item><item><title><![CDATA[Memory Ordering at Compile Time]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7889451</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7889451</guid><author>chenxinl</author><pubDate>Tue, 21 Aug 2012 11:06:58 +0800</pubDate><description><![CDATA[转载自：Memory Ordering at Compile Time

这篇文章解释了我很多疑惑，绝对好文！关键点：
1. 编译器优化时会调整代码顺序，但优化有一个原则：保证该程序单线程时运作正确。

2. 写单线程程序时，一般不会注意到memory reorder，因为编译器优化原则。写多线程程序时，一般也不会对此特加注意，因为当使用mutex,semaphore时，编译器会在这些调]]></description><category></category></item><item><title><![CDATA[ByteBuffer实现解析 Direct vs Heapped性能比较]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7497197</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7497197</guid><author>chenxinl</author><pubDate>Wed, 25 Apr 2012 12:03:09 +0800</pubDate><description><![CDATA[ByteBuffer封装了一个实现类，可以方便的把java基础数据类型（short, int, long, float, double）转换成byte数组形式，反之亦然；做二进制数据的生成和读取时，会特别有用。
实现上，整型数可以通过移位获取各个字节，然后写到byte数组中即可；而浮点型没办法直接获得字节数据，只能通过Float.floatToIntBits（详细参见java api）类似的方法]]></description><category></category></item><item><title><![CDATA[std string的内存共享和Copy-On-Write技术]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7354244</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7354244</guid><author>chenxinl</author><pubDate>Wed, 14 Mar 2012 19:19:59 +0800</pubDate><description><![CDATA[转载自：http://blog.youkuaiyun.com/haoel/article/details/24058
看到google leveldb的代码大量使用std::string，想知道这个基础数据结构怎么实现的，看了下stl的string源代码，太烦了；找到这篇文章，写的很清楚，记录下。

读完照例总结下：string对象间是会共享内存（与share memory是不同的概念）的，修改时使用了]]></description><category></category></item><item><title><![CDATA[分布式系统中的异步IO与线程池]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/6601025</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/6601025</guid><author>chenxinl</author><pubDate>Tue, 21 Feb 2012 21:12:15 +0800</pubDate><description><![CDATA[关于异步IO及链接复用
分布式搜索系统中，一般都有merge和search两种角色，分别部署在不同的机器上。由于数据量巨大，每台search只能加载部分索引数据，多台search机器合在一起组成全量索引。一个查询为了获得正确结果，需要把这个查询发给所有的search机器，经过检索后，再把所有search机器的结果聚合在一起，产生最终的正确结果；这个分发再聚合的过程，就是由merge来实现的。]]></description><category></category></item><item><title><![CDATA[新浪微博技术架构分析]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7196985</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7196985</guid><author>chenxinl</author><pubDate>Thu, 12 Jan 2012 17:38:18 +0800</pubDate><description><![CDATA[转载自：http://www.fbair.net/bbs/simple/?t467.html



中国首届微博开发者大会在北京举行，这是国内微博行业的首场技术盛宴。作为国内微博市场的绝对领军者，新浪微博将在此次大会上公布一系列针对开发者的扶持政策，以期与第三方开发者联手推动微博行业的整体发展。图为微博平台首席架构师杨卫华演讲。

以下为演讲实录：

大家下午好，在座的大部分都是技]]></description><category></category></item><item><title><![CDATA[如何“打败”CAP定理]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7063117</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7063117</guid><author>chenxinl</author><pubDate>Tue, 20 Dec 2011 17:21:25 +0800</pubDate><description><![CDATA[这篇文章，为大家提供了一个新的思路；想到核心组搞的oceanbase，实现原理跟这个如出一辙，把CRUD变成CR，数据分成不可变批量和实时增量两个部分。有时间看下oceanbase。



文 / Nathan Marz    译 / 方建
CAP定理是数据系统设计的基本理论，目前几乎所有的数据系统的设计都遵循了这个定理。但CAP定理给目前的数据系统带来了许多复杂的、不可控的问题，使得数]]></description><category></category></item><item><title><![CDATA[Page cache和buffer cache的区别与联系(ZT)]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7061716</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7061716</guid><author>chenxinl</author><pubDate>Sun, 11 Dec 2011 20:16:25 +0800</pubDate><description><![CDATA[转载自：http://blog.chinaunix.net/space.php?uid=15724196&do=blog&id=128152


Page cache和buffer cache一直以来是两个比较容易混淆的概念，在网上也有很多人在争辩和猜想这两个cache到底有什么区别，讨论到最后也一直没有一个统一和正确的结论，在我工作的这一段时间，page cache和buffer cach]]></description><category></category></item><item><title><![CDATA[vmtouch－系统pagecache查看和操纵器]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7056200</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7056200</guid><author>chenxinl</author><pubDate>Fri, 09 Dec 2011 11:21:15 +0800</pubDate><description><![CDATA[这个工具很好使，对查找定位问题很有帮助，特别是对大量使用mmap的系统，比如搜索引擎中的索引。
vmtouch的源文件只有一个c文件，很简单；主要使用了两个系统函数
1. int mincore(void *start, size_t length, unsigned char *vec):  get information on whether pages are in core
判断文件]]></description><category></category></item><item><title><![CDATA[搜索引擎中的字符串归一化]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/7031021</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/7031021</guid><author>chenxinl</author><pubDate>Thu, 01 Dec 2011 17:56:04 +0800</pubDate><description><![CDATA[搜索引擎中对于Q查询，都会涉及到字符串归一化这个步骤，以提高结果召回率。字符串的归一化包括三个方面：繁体转简体；全角字符转半角；大写字母转小写。
建倒排时，会先对字符串做归一化处理，然后再分词取term；用户查询时，也会对查询串做同样的操作，这样就能找到对应的倒排链。
在返回查询结果给前端时，会按照查询串对原文做飘红，这里就涉及到一个问题，原文是没有归一化的；为了解决这个问题，我们自己写了个n]]></description><category></category></item><item><title><![CDATA[关于单CPU，多CPU上的原子操作]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/6971925</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/6971925</guid><author>chenxinl</author><pubDate>Tue, 15 Nov 2011 10:06:07 +0800</pubDate><description><![CDATA[比如test_and_set一个变量（是个单指令操作），在单CPU下是安全的，在CPU切换时，要么这个指令已经结束，要么还没开始执行。但是对于多CPU，有可能多个CPU都对一个变量做set，并成功。spinlock锁总线就是为了保证，多个cpu不能同时操作一块内存。 mutex的锁在做锁判断的时候，也会去锁一次总线；只是后面的处理逻辑与mutex不同。 逻辑上，所有原子操作都显式使用或隐含使用了一]]></description><category></category></item><item><title><![CDATA[Doclist压缩方法简介]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/6920852</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/6920852</guid><author>chenxinl</author><pubDate>Mon, 31 Oct 2011 11:46:18 +0800</pubDate><description><![CDATA[转载自：http://www.searchtb.com/2011/07/doclist-compress.html 

特别关注P4Delta压缩算法。


本文是作者在学习doclist压缩时的一点总结，希望以尽可能简单明了的方式描述各个算法的思想和适用场景，帮助同学们理解和比较。本文并不涉及具体的算法实现，代码请大家自行google。这里需要强调的是“所谓的改进顺序”只是作者yy出来]]></description><category></category></item><item><title><![CDATA[hadoop map-reduce数据过程]]></title><link>https://blog.youkuaiyun.com/chenxinl/article/details/6899193</link><guid>https://blog.youkuaiyun.com/chenxinl/article/details/6899193</guid><author>chenxinl</author><pubDate>Mon, 24 Oct 2011 00:10:26 +0800</pubDate><description><![CDATA[对上一篇的补充，介绍map-reduce之间数据的流通，主要代码都在MapTask.java和ReduceTask.java两个文件中。
mapper的output.collect有两个分支，如果reduce number=0，则调用outputformat的recordwriter直接把key-value写到hdfs上。如果不为0，则key-value首先被记录在内存中（io.sort.mb）]]></description><category></category></item></channel></rss>