自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

momo

@momodajiangjun

  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 zookeeper的异常处理(Disconnected, SyncConnected, Expired)

最近系统中使用zookeeper支持三个功能:全量/增量索引的消息通知;搜索活跃节点检查;分布式锁做索引切换同步。线上服务对稳定性要求较高,包括各种异常情况,如网络中断导致连接断开,系统load过高导致zk 超时等。从使用角度,做了几个测试,总结如下:1. zk内部两个后台线程:心跳线程(SendThread),时间处理线程(EventThread),均为单线程,且互相独立。所以e

2013-08-04 14:06:52 13114

转载 c++和java中的atomic/volatile

看到两篇不错的文章,分别介绍atomic和olatile关键字在java和c++中的表现,很不错。long count = 0;for(int i=0; i<1000; i++) count++;这段代码在c++中,经过编译后,count会被优化到寄存器中,++的操作也都是针对寄存器的;如果加上volatile关键字,可以保证count不会被优化到寄存器,每次都走内存;如果使用a

2013-05-05 13:25:55 2734

原创 lucene的FieldCache与内存管理

为了支持变长字段和更丰富的数据类型,我们在搜索项目中对lucene的FieldCache做了部分扩展;但使用下来碰到了内存泄漏,所以这里对 lucene的FieldCache做下细致的了解。FieldCache使用WeakHashMap做核心的cache管理,key是IR对象内部的 frequency文件对象,value是对应字段的数组。虽然WeakHashmap像个核武器,声称可以自动释放对象;

2012-10-10 13:47:51 3325

原创 java中jmx/jconsole/jstat/jmap的关系

JMX是java5开始提供的对java应用进行监控的一套接口。实现方式是在jvm内部起一个mbeanserver通过网络对外开放调用接口,这样外部就可以做应用监控或者类似远程方法调用。java默认实现了jvm的一些监控,比如堆内存使用情况(MemoryMXBean),线程情况(ThreadMXBean),gc情况等,外部程序可以直接使用,比如jconsole实际上就是对这些bean的包装,只是把返

2012-09-23 14:29:00 3709

原创 关于CMS: abort preclean due to time

hotspot的jvm目前主要支持4种gc,分别是:SerialGC, ParallelGC, ParallelOldGC和CMS GC。对于离线任务,更关注吞吐量,一般推荐ParallelOldGC;对于实时响应的任务,比如web server类似,推荐CMS gc。详细的GC介绍可以参考bluedavy的介绍:http://rdc.taobao.com/team/jm/archives/6

2012-09-14 18:18:55 10806

原创 dumpAllThreads挂起程序的问题

ThreadMXBean.dumpAllThreads(true,true)因为要获取所有jvm线程的monitor和synchronizer信息,会挂起执行线程。对负载较大的服务器端程序,会引起latency飙升,需要特别注意。我们的搜索服务中有一个后台监控线程,定期调用这个方法,导致这个时间点的查询,响应时间飙升。不获取锁信息(dumpAllThreads(false, false) ),不会

2012-09-14 18:00:18 3519

转载 漫谈linux文件IO

这篇文章写的比较全面,也浅显易懂,备份下。转载自:http://blog.chinaunix.net/uid-27105712-id-3270102.html在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO。本篇文件打算详细全面,深入浅出。剖析文件IO的细节。从多个角度探索如何提高IO性能。本文尽量用通俗易懂的视角去阐述。不copy内

2012-08-23 16:40:18 3392

原创 c++11的std::memory_order

首先明确一点,std::atmoic和std::memory_order只有在多cpu多线程情况下,无锁编程才会用到。在x86下,由于是strong memory order的,所以很多时候只需要考虑编译器优化的memory order;保险起见,可以用std::atomic,他会同时处理编译器优化和cpu的memory reorder(虽然x86用不到)。在除非必要的情况下,不用使用std::m

2012-08-21 11:22:37 4540

转载 Memory Ordering at Compile Time

转载自:Memory Ordering at Compile Time这篇文章解释了我很多疑惑,绝对好文!关键点:1. 编译器优化时会调整代码顺序,但优化有一个原则:保证该程序单线程时运作正确。2. 写单线程程序时,一般不会注意到memory reorder,因为编译器优化原则。写多线程程序时,一般也不会对此特加注意,因为当使用mutex,semaphore时,编译器会在这些调

2012-08-21 11:06:58 2816

原创 ByteBuffer实现解析 Direct vs Heapped性能比较

ByteBuffer封装了一个实现类,可以方便的把java基础数据类型(short, int, long, float, double)转换成byte数组形式,反之亦然;做二进制数据的生成和读取时,会特别有用。实现上,整型数可以通过移位获取各个字节,然后写到byte数组中即可;而浮点型没办法直接获得字节数据,只能通过Float.floatToIntBits(详细参见java api)类似的方法

2012-04-25 12:03:09 2803 1

转载 std string的内存共享和Copy-On-Write技术

转载自:http://blog.csdn.net/haoel/article/details/24058看到google leveldb的代码大量使用std::string,想知道这个基础数据结构怎么实现的,看了下stl的string源代码,太烦了;找到这篇文章,写的很清楚,记录下。读完照例总结下:string对象间是会共享内存(与share memory是不同的概念)的,修改时使用了

2012-03-14 19:19:59 3028

原创 分布式系统中的异步IO与线程池

关于异步IO及链接复用分布式搜索系统中,一般都有merge和search两种角色,分别部署在不同的机器上。由于数据量巨大,每台search只能加载部分索引数据,多台search机器合在一起组成全量索引。一个查询为了获得正确结果,需要把这个查询发给所有的search机器,经过检索后,再把所有search机器的结果聚合在一起,产生最终的正确结果;这个分发再聚合的过程,就是由merge来实现的。

2012-02-21 21:12:15 2638

转载 新浪微博技术架构分析

转载自:http://www.fbair.net/bbs/simple/?t467.html中国首届微博开发者大会在北京举行,这是国内微博行业的首场技术盛宴。作为国内微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展。图为微博平台首席架构师杨卫华演讲。以下为演讲实录:大家下午好,在座的大部分都是技

2012-01-12 17:38:18 4860

转载 如何“打败”CAP定理

这篇文章,为大家提供了一个新的思路;想到核心组搞的oceanbase,实现原理跟这个如出一辙,把CRUD变成CR,数据分成不可变批量和实时增量两个部分。有时间看下oceanbase。文 / Nathan Marz    译 / 方建CAP定理是数据系统设计的基本理论,目前几乎所有的数据系统的设计都遵循了这个定理。但CAP定理给目前的数据系统带来了许多复杂的、不可控的问题,使得数

2011-12-20 17:21:25 2321

转载 Page cache和buffer cache的区别与联系(ZT)

转载自:http://blog.chinaunix.net/space.php?uid=15724196&do=blog&id=128152Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间,page cache和buffer cach

2011-12-11 20:16:25 2313

转载 vmtouch-系统pagecache查看和操纵器

这个工具很好使,对查找定位问题很有帮助,特别是对大量使用mmap的系统,比如搜索引擎中的索引。vmtouch的源文件只有一个c文件,很简单;主要使用了两个系统函数1. int mincore(void *start, size_t length, unsigned char *vec):  get information on whether pages are in core判断文件

2011-12-09 11:21:15 3765

原创 搜索引擎中的字符串归一化

搜索引擎中对于Q查询,都会涉及到字符串归一化这个步骤,以提高结果召回率。字符串的归一化包括三个方面:繁体转简体;全角字符转半角;大写字母转小写。建倒排时,会先对字符串做归一化处理,然后再分词取term;用户查询时,也会对查询串做同样的操作,这样就能找到对应的倒排链。在返回查询结果给前端时,会按照查询串对原文做飘红,这里就涉及到一个问题,原文是没有归一化的;为了解决这个问题,我们自己写了个n

2011-12-01 17:56:04 5257

转载 关于单CPU,多CPU上的原子操作

比如test_and_set一个变量(是个单指令操作),在单CPU下是安全的,在CPU切换时,要么这个指令已经结束,要么还没开始执行。但是对于多CPU,有可能多个CPU都对一个变量做set,并成功。spinlock锁总线就是为了保证,多个cpu不能同时操作一块内存。 mutex的锁在做锁判断的时候,也会去锁一次总线;只是后面的处理逻辑与mutex不同。 逻辑上,所有原子操作都显式使用或隐含使用了一

2011-11-15 10:06:07 3106

转载 Doclist压缩方法简介

转载自:http://www.searchtb.com/2011/07/doclist-compress.html 特别关注P4Delta压缩算法。本文是作者在学习doclist压缩时的一点总结,希望以尽可能简单明了的方式描述各个算法的思想和适用场景,帮助同学们理解和比较。本文并不涉及具体的算法实现,代码请大家自行google。这里需要强调的是“所谓的改进顺序”只是作者yy出来

2011-10-31 11:46:18 3364

原创 hadoop map-reduce数据过程

对上一篇的补充,介绍map-reduce之间数据的流通,主要代码都在MapTask.java和ReduceTask.java两个文件中。mapper的output.collect有两个分支,如果reduce number=0,则调用outputformat的recordwriter直接把key-value写到hdfs上。如果不为0,则key-value首先被记录在内存中(io.sort.mb)

2011-10-24 00:10:26 3086 1

原创 hadoop streaming 技术整理

这两年零零散散用hadoop做了些项目,也看了些hadoop相关资料,每回都是现学现用。这回做kbuild项目,要用到hadoop streaming,发现很多东西又忘了,趁这次机会把hadoop相关的知识再过一遍整理下。hadoop由两部分构成,分布式文件系统hdfs,和并行计算框架map-reduce。做应用开发,都是跟map-reduce打交道;hdfs逻辑上相对来说比较简单,可以参考:

2011-10-23 21:34:50 1699

原创 calloc在4u和5u上性能差异的分析

年初在维护一个http server程序的时候,发现5u下性能比4u下降了一倍不止。最后通过程序埋点的方法确认,问题出在calloc调用上。程序上有一段逻辑,每来一个链接,通过calloc申请一块2M的空间,在5u下calloc性能下降厉害。当时通过malloc+字段实例化的方式

2011-09-19 10:30:54 2069 1

原创 mmap的数据可靠性分析

UPS项目打算用mmap做增量数据管理,对数据可靠性有一定要求,简单做了些实验,结果与大家分享下。1.      对mmap内存的写操作,会直接进入系统page-cache;msync调用负责把脏的page-cache持久化到硬盘。2.      Page-cache操作

2011-08-11 17:24:17 3182 1

转载 linux IO行为:page cache and pdflush

转载自: http://niyunjiu.iteye.com/blog/824161, http://www.westnet.com/~gsmith/content/linux-pdflush.htmThe Linux Page Cache and pdflush:T

2011-08-09 20:28:00 2234

原创 大IO操作引起ksearch性能波动的问题分析

1. log 分析 主要是影响了系统cache,读log文件导致searcher的mmap内存被swap到硬盘,引起超时。侧重于IO层面2. 大log文件 删除主要是kernel整理硬盘快,进入了内核态,而且执行时间较长;导致用户态的searcher操作发生堵塞,引起超时。侧重于

2011-07-25 10:42:35 743

转载 http长连接200万尝试及调优

对于一个server,我们一般考虑他所能支撑的qps,但有那么一种应用, 我们需要关注的是它能支撑的连接数个数,而并非qps,当然qps也是我们需要考虑的性能点之一。这种应用常见于消息推送系统,也称为comet应用,比如聊天室或即时消息推送系统等。comet应用详细介绍可见我之前

2011-07-21 09:30:16 824

原创 搜索中的排序优化

搜索引擎中有一个分页的需求,按照某个字段排序,从start位置开始,返回num个doc;算法接口: void sort_result(dococument docs[], int size, int start, int num, int sort_field)使用3种不同算法分

2011-07-17 19:35:07 984

原创 一种无锁的并发读写机制

转自:http://blog.csdn.net/gantleman/article/details/6254266多线程程序中操作的原子性0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的

2011-07-10 16:02:11 4279 2

原创 ksearch系统开发过程中遇到的KFC性能问题

前天ksearch性能压测过程中发现一个很奇怪的问题,跟了3天,case做了无数个,终于发现问题所在,还是KFC(KuaFu Communication)的问题。然后想起来,去年实时搜索上线前夕,也遇到一个很奇怪的问题,最后定位出来也是KFC的问题,异常郁闷,所以这里记录一下。k

2011-07-09 23:59:00 1359 1

原创 cassandra的系统结构分析

针对0.6系列版本cassandra总体的设计感觉偏向于不需要人工介入的大规模集群,有个几百台上千台,局部有些抖动不会影响整体的服务;如果集群规模较小,几十台的规模,而且在线上run,它提供的很多操作都相当有风险,而且p2p的通信也感觉过重了。分布式存储cas

2011-07-05 23:04:54 1542 2

原创 cassandra的存储/更新/检索

<br />针对cassandra 0.6系列版本,介绍一下他的存储,更新和检索。<br />

2011-07-05 22:33:01 1538

转载 redis的事件机制

转自:http://www.hoterran.info/redis_eventlibrary   相当清晰 每个cs程序尤其是高并发的网络服务端程序都有自己的网络异步事件处理库,redis不例外。事件库仅仅包括ae.c、ae.h,还有3个不同的多路复用(本文仅描述epoll)的wrapper文件,事件库封装了框架调用的主循环函数,暴露了时间、文件事件注册和销毁函数,典型的依赖反转模

2011-06-23 18:02:00 1669

转载 socket文件的作用

转贴自:http://socol.iteye.com/blog/621392 socket文件,只有在本级通信(AF_UNIX)时才会用到;对于远程TCP通信(AF_INET)来说,是不存在sock文件一说的。 socket文件更大意义是作为一个标记,并非所有的通信数据都通过该文件流通。

2011-06-23 15:39:00 3012

转载 腾讯微博的架构

转自:http://www.heyues.com/tag/php%E5%A4%A7%E4%BC%9Appt/ 潘少林,腾讯微博的架构总结1:关于腾讯:加班很多,昨晚加班,上午加班,中午过来,演讲完还得加班。腾讯最大的诱惑:10亿给员工无息贷款买房。总结2:存储:微博上碎片的小信息的存储,采用腾讯自己开发的一套存储系统,TLV格式(介绍),就是type+length+va

2011-06-22 22:14:00 2645

原创 redis的内存使用

前一阵听人说redis的内存利用率不高,平均下来每个keyvalue的附加空间占用过多;特别对小keyvalue来说,比例较高。 dump中心那边有用redis做附表存储查询:每个value包含17个字段,几乎都是int类型,用protocolbuffer存储,平均字节数在100左右;一台机器插入8KW条记录,占用内存18G,平均每条记录占用字节200+。 下周去了解下redis的内存管理,看看这

2011-06-18 10:54:00 3263

转载 gcc详解

-g是指产生系统format的debug信息,gdb,dbx等调试工具都能识别;-ggdb产生的debug信息更加丰富,但只有gdb能识别。添加了debug信息后,可执行文件的大小会明显增大。-g/-ggdb可以和-O选项一起使用,目前我们线上发布程序都是把这两个一起用。一方面经过-O后,程序性能可以保证;同时有-g信息,如果程序core了,可以简单的定位问题大致出在哪

2011-06-15 21:38:00 819

原创 各种各样的树

<br />最近对存储/更新/检索 比较感兴趣,树是传统数据库实现索引的主要方式,所以抽空整理学习一下。<br /> <br />最基本的二叉查找树: http://zh.wikipedia.org/wiki/%E4%BA%8C%E5%85%83%E6%90%9C%E5%B0%8B%E6%A8%B9 <br />左右节点,内部节点和叶子节点都会存储数据;实现简单,遍历方便,平均高度是logN,但可能退化成N。<br />实际情况一般使用BST的变种,比如红黑树,AVL树,他们可以保证logN的高度。STL中

2011-05-30 16:15:00 855

原创 关于文件cache和持久化问题

FILE系列函数:fopen,fclose,fflush,setbuf,fwrite,fread通过fopen打开的文件,默认在用户空间会开一个buf,一般是4K或8K, fwrite的数据会写到这块用户空间的buf中, 此时数据对外不可见,因为还在进程的buf空间中; 满了之后

2011-05-24 11:20:00 1767

转载 strace gdb与ptrace

学习, 转贴自: http://blog.csdn.net/Javadino/archive/2008/09/06/2891413.aspx引子:1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。这表明这个进程处于什么状态?2.strace可以方便的帮助我们记录进程所执行的系统调用,它是如何跟踪到进程执行的?3.gdb是我们调试程序的利器,可以设置断点,单步跟踪程序。它的实现

2011-05-24 10:20:00 4791

原创 做技术不同层次的要求

摘自饭否招聘!1. 技术经理负责技术团队的团队建设,日常管理,进度协调并亲自参与难点问题攻关。要求:互联网公司三年以上研发经验,一年以上管理经验有极强的责任感,对团队的结果负责,总是出现在需要的地方出色的沟通能力和组织协调能力结果导向,同时也关注过程;追求优雅但不固守陈规2. 架构师负责产品的技术架构,领导技术发展方向。要求:互联网公司三年以上研发经验,立志于技术发展路线完整的参与过一个数据量高速增长的系统的设计和研发对构建高性能,高可用,可扩展的网络服务有相当的认识和经验有服众的技术特长,全面的技术视野并

2011-05-16 15:54:00 700

Nginx源代码分析与导读

源码结构 重要概念与基础设施 事件驱动架构 HTTP处理流程 邮件代理流程

2011-05-25

空空如也

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

TA关注的人

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