xianbei notes

世界因我而变
posts - 12, comments - 10, trackbacks - 0, articles - 0

导航

2012年11月23日

摘要:1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作。缺省设置:0,禁用Block Debug模式2) /proc/sys/vm/dirty_background_ratio该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。缺省设置:103) /proc/sys/vm/dirty_expire_centisecs该文件表示如果脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘。缺省设置:3000(1/100秒)4) /proc/sys/ 阅读全文

posted @ 2012-11-23 09:24 先贝 阅读 (3554) 评论 (0) 编辑

摘要:转自: http://iloutuoli.blogspot.kr/2011/11/sysctl-vmovercommitmemory.htmlvm.overcommit_memory 表示内核在分配内存时候做检查的方式。这个变量可以取到0,1,2三个值。对取不同的值时的处理方式都定义在内核源码 mm/mmap.c 的 __vm_enough_memory函数中。取 1 的时候 :此时宏为 OVERCOMMIT_ALWAYS,函数直接 return 0,分配成功。取 2 的时候:此时宏为 OVERCOMMIT_NEVER,内核计算:内存总量×vm.overcommit_ratio/10 阅读全文

posted @ 2012-11-23 09:09 先贝 阅读 (1364) 评论 (0) 编辑

2012年2月13日

摘要:linux下面程序崩溃时会产生core文件,该文件记录的内容是当时的事故现场,通过gbd调试程序可以加载core文件,从而将事故过程还原。core dump的设置和 proc 虚拟文件系统下两个文件相关,分别是 /proc/sys/kernel/core_pattern 和 /proc/sys/kernel/core_users_pid1、core_pattern文件是设置core文件存储的路径以及文件名,默认设置为 core,这时最新的core文件会覆盖旧的,同时对core文件产生的宿主无法判断。可以通过一些参数进行设置,支持的参数如下:%p ---- 进程id%u ---- 用户id%g 阅读全文

posted @ 2012-02-13 14:54 先贝 阅读 (361) 评论 (0) 编辑

2011年11月1日

摘要:[转自 http://www.taobaodba.com/html/554_mysql_avoid_swap_2.html]之前介绍了MySQL如何避免使用swap的四个方法。这里需要补充一下原理和实现机制,对于Linux api不感兴趣的同学可以直接跳过。一、操作系统设置swap的目的程序运行的一个必要条件就是足够的内存,而内存往往是系统里面比较紧张的一种资源。为了满足更多程序的要求,操作系统虚拟了一部分内存地址,并将之映射到swap上。对于程序来说,它只知道操作系统给自己分配了内存地址,但并不清楚这些内存地址到底映射到物理内存还是swap。物理内存和swap在功能上是一样的,只是因为物理存 阅读全文

posted @ 2011-11-01 18:05 先贝 阅读 (820) 评论 (0) 编辑

摘要:[转自 http://www.taobaodba.com/html/552_mysql_avoid_swap.html]Linux有很多很好的内存、IO调度机制,但是并不会适用于所有场景。对于DBA来说Linux比较让人头疼的一个地方是,它不会因为MySQL很重要就避免将分配给MySQL的地址空间映射到swap上。对于频繁进行读写操作的系统而言,数据看似在内存而实际上在磁盘是非常糟糕的,响应时间的增长很可能直接拖垮整个系统。这篇blog主要讲讲我们作为DBA,怎样尽量避免MySQL惨遭swap的毒手。首先我们要了解点基础的东西,比如说为什么会产生swap。假设我们的物理内存是16G,swap是 阅读全文

posted @ 2011-11-01 10:02 先贝 阅读 (185) 评论 (0) 编辑

2011年3月23日

摘要:今天晚上终于把测试服务器搞定,饥渴难耐,马上准备试试redis。 1、make prefix=/usr/redis/ 2、make test 报错,tclsh8.5 not found,去这里下载安装 3、make install 这里会生成五个文件:redis-server(服务)、redis-cli(客户端)、redis-check-dump(数据文件检查)、redis-check-aof(日志检查)、redis-benchmark(性能测试) 4、启动服务 nohup redis-server ./conf/redis.conf & 关于配置文件,后续文章专门介绍 5、启动客户端 阅读全文

posted @ 2011-03-23 01:20 先贝 阅读 (1459) 评论 (0) 编辑

2011年2月26日

摘要:slab是memcache用来管理item的内容存储部分。 分配内存时,memcache把我们通过参数m设置的内存大小分配到每个slab中 1、slab默认最多为200个,但是由于item的最大为1MB,而且每个slab里面存储的item的尺寸是根据factor来确定的,所以能够分配的slab的个数小于200。 2、关于增长因子factor参数(配置时参数名为f),默认为1.25,即每个slab所能存储的item的大小是根据factor的大小来变化的。 3、每个slab中含有一个或多个trunk,trunk中存储的就是item,item的最大为1M,所以trunk最大为1M 4、每个slab. 阅读全文

posted @ 2011-02-26 21:19 先贝 阅读 (3832) 评论 (4) 编辑

2011年1月18日

摘要:items是memcache用来管理item的封装,采用的hash表和LRU链的形式,关于hash表的操作见我前几天的文章 memcache源码分析之assoc  关于item内容的存储机制简介  item的内容存储是在slab中管理的,为了对内存进行有效的管理,slab采用的是分桶的大小来存储item的内容的,简单举例解释一下,初始化时会有不同块大小的桶,比如桶1里面的内存块都是80b的,专门用来存储item内容大小接近80b的。桶2的内存块是100b的,专门用来存储内容大小接近100b的item,桶3是120b的,用来存储大小接近120b的item,等等。所以,如果有一个item的内容大小 阅读全文

posted @ 2011-01-18 00:14 先贝 阅读 (5751) 评论 (1) 编辑

2011年1月10日

摘要:memcache对item信息的存储是采用的hash表的形式,而item的内容则是存储在slab中,本篇文章只介绍item在hash表中的存储。关于slab的存储介绍请关注后续文章。 item经过hash后存储在一个桶中,这个桶是hash表的一个元素,在同一个桶中,item是通过链表来存储的。 这部分的初始化工作在memcached.c的main函数中,初始化时,分配了2^16个元素的hash表,如果hash表比较大了,需要重新申请内存扩充。 那什么时候需要扩充呢,当每个item被加入到hash表中时,程序会去计算item的数量,如果item的数量大于2^16的1.5倍,即开始扩充,这部分的代 阅读全文

posted @ 2011-01-10 00:20 先贝 阅读 (4390) 评论 (3) 编辑

2011年1月2日

摘要:考虑了同事们提出的意见,增加了对代码的分析,有些写错的地方一并修改过来。 一直想把memcache源代码读完再写文章,结果由于项目紧,没有电脑等原因,进行的一直断断续续,效果很差。所以改成分模块来写。 这篇文章是关于stats的。但是并不是memcache平常使用的stats命令,而是facebook的一个牛人增加的关于键的命名空间的stats代码(大家不要混淆:)),也就是说你可以把各种要存储的键名前面加个前缀(prefix),来标识一定的命名空间,这样各种键名字在本命名空间里面是不能重复的(当然也可以重复,但是会把过去的覆盖,:)),但是在整个memcache里面可以重复设置,通过这段代码 阅读全文

posted @ 2011-01-02 20:33 先贝 阅读 (1673) 评论 (2) 编辑