Eric Cheung

Mine?Yours?-Ours!

2009年4月22日星期三

孕养日记4

孕养日记4
04/22/2009

宝宝已经有5个月零1周了!
现在老婆的肚子越来越大了,有的时候能够看到小宝宝在动(妈妈的肚皮有稍微的起伏)。老婆已经形成了每天上午10点钟左右出门活动的习惯,她还发现几乎每到10点钟的时候,宝宝都会在肚子里踢她几下,实在有趣。老婆基本上是在小区的活动场地那儿大概活动1个小时,有时候太阳好的时候老婆会把肚皮露出来也让宝宝晒晒春天的太阳,这时候宝宝动得就更频繁、幅度更大了,可能是太兴奋了,抑或是太阳太刺眼了?
一个月前,我在网上订了《格林童话》、《安徒生童话》、《弟子规》、《三字经》、《千字文》、《千家诗》几本书,自那以后每到睡觉前我几乎都坚持给尚在妈妈肚子里的小宝宝讲故事或是读古诗,说实话,每天晚上读一篇童话故事也挺累的(太长),有时候,偷懒的话,我就直接读几首古诗(因为短),不过也有几次实在太累了就没有读古诗(坚持做一件事确实不易啊)。尤其令我高兴的是,几乎每次我给宝宝讲故事的时候,宝宝会动几下,不知道宝宝是不是高兴的还是嫌爸爸打扰了他(她)的休息。有一次我把耳朵贴在老婆的肚子上给宝宝讲故事,宝宝动了几下,我的耳朵能明显地感到,可能是我压得太重了吧。
3周前,我带着老婆去了昌平区的北郊医院做了产科检查,我们本来打算回我老家生孩子,所以以前也没有在北京做检查(对了,只在北医三院做了是否怀孕的检测),只是过年回东北的时候在家做过一次B超,其它的检查基本没做(我相信老婆的身体素质,而且老婆也几乎没有妊娠反应,家务活一直都做)。现在之所以在北郊医院做了检查,其实是为了怕孩子提前出生,所以以防万一才到医院建了档案(医院一般不接收未在本医院建立档案的产妇生产)。
整个检查耗时6个小时,拿回家的报告单有7、8张,还有1张检查报告单要2周后再来取,花费了RMB1500,检查了很多项目,当医生开出检查项目的时候我都傻了,长长的3张收费单上列出了许多看不懂的检查项目,不过现在的检查报告挺人性化的,每项检查结果都有标注出参考值,让我们这些平头老百姓也能看得懂基本上。检查的时候最恼人的就是老婆做B超的时候,医生不允许我进去,这钱花得够冤的,大概是医生怕看出来胎儿性别吧,不过像我们这些老百姓哪有这么高超的眼力啊。
最后,检查的结果是:除了稍微缺钙(其实比标准值少0.01)和缺铁外,其它一切正常。大夫给开了钙片和硫酸亚铁片。整个检查给我的感觉就是:大夫的作用几乎没有,都是检测仪器在给人看病。关于缺铁的事,老婆确实有时感觉头晕,不过稍具一般常识的人可能都会知道是缺铁的缘故,所以平时我也注意给老婆多吃菠菜、油菜、海带和肉类等,因为我不太赞同药补的。
希望我的宝宝能够快快长大!

2009年3月1日星期日

孕养日记3

孕养日记3
03/01/2009

老婆前天去医院做了B超检查,胎儿一切正常,还告诉我说岳母还看到了胎儿的头,弄得我心里痒痒地想看到孩子。昨天老婆和李想(小舅子)一起去了鞍山,说是给小弟买高三的辅导资料的,同时咨询了一下火车票预售期已经是10天了,现在买票已经不太紧张了。老婆打算大概12号回北京。
今天,老婆给我发短信说胎儿在肚子里老吐泡泡玩,还总踢她,真有意思啊!我真想摸摸他。我跟老婆开玩笑说是孩子在尿尿。她还说胎儿现在长得很快,可能老婆已经有小肚子了吧。
等老婆回来后就能摸到孩子了!就可以和他说话了。

孕养日记2

孕养日记2
02/25/2009

至今天,老婆怀孕已经有3个月零13天了。她说胎儿最近长得挺快的,这让我很高兴。不过她又说有几天胎儿不太活动,我安慰她说:他是玩累了,休息了。
东北最近一直在下大雪,路上积雪过多,老婆说去街里的路都无法行走,打车也很困难,而家里的蔬菜也快消耗得差不多了。不过水果都还有,另外孕妇奶粉也快喝完了,不过最近的奶粉事件确实让我担心不小。但愿无妨。
老婆说如果天晴了的话,就去医院做B超检查一下胎位,然后就准备回北京来。我今天给她短信,告诉她让她继续在家待到3月中旬,等胎儿稳定了之后再回来,可她说自己在家里待着实在是太无聊了。
昨天我休息在家,中午的时候到了“丽家宝贝”孕婴专卖店把年前的赠品“婴童专用坐便器”拿了回来,一个大男人坐在公交车上手拿着“婴童专用坐便器”确实挺有意思的。

孕养日记1

孕养日记1
02/13/2009

老婆自冬天来临之后,一直大部分手指肚都反复地起皮,估计是干燥所致。2008年12月20日,我让她去小区(育新小区)楼下的同仁堂找个中医看看。中午时分,我在公司上班的时候,老婆给我短信,说她怀孕了,我非常激动,止不住地笑(不过没有放声),我也能感觉到老婆也是很兴奋。她说去看中医的时候,号脉后医生告诉她说怀孕了已经,手起皮是因为干燥缺水导致的,多喝水多吃蔬菜就没有问题了。之后老婆又去了楼下的北医三院做了怀孕检测,期间有个小护士还说中医真神奇,竟然可以号出喜脉来(看样子西医真有点闭门寡学了啊)。孕检结果是怀孕日期是2008年11月12日(公历),预产期是2009年8月19日(计算方法是月份-3,日期+7)。老婆的身体状况很好,这让我很放心。
不知道这个时候的孩子有多大呢?希望他快快长大。
晚上下班回家之后,老婆要吃腔骨,这个时候肯定是以她为主了。
第二天,我们去了清河的一个叫“丽家宝贝”的孕婴专卖店,买了一些衣服和其它物品。
1月份的时候,因为我们楼上住户每天的噪音很大,怕影响老婆休息,因此让老婆提前回东北老家了,这样岳母就可以专心照顾她了。不过我之前也挺担心的,毕竟前3个月非常重要也很危险,害怕长途坐车(虽然是卧铺,但是长途)会影响胎儿,咨询了医师后说没有大碍。不过回家的路途也是费了周折,当天晚上赶火车是11点钟的,结果火车要晚点到第二日凌晨3点,我们退了票,又买了第二天晚上的车票,害得我们白跑了一趟,让老婆累得不轻。
春节我回了东北过年。岳父是个爱抽烟的人,结果害得他只能到外屋抽完再进来。
我每晚睡觉前都在摸老婆的肚子,始终不见大,不过在2月初的时候已经能够摸到下腹部有硬的东西了,每次我都小心翼翼地,不敢使劲。前两天,老婆说她感觉到了胎儿在动,很有意思,而且已经有小梨般大小了。看样子,他要快速地长大占据他母亲的肚子了。
几乎每天我都提醒老婆多吃蔬菜、多喝粥(我特意给配了粥的原料,有黑米、糯米、大枣、莲子、百合、黑豆、豇豆、燕麦、小米、玉米渣、黑芝麻等)、多吃坚果、多活动,说得我自己都觉得烦了。

2008年12月3日星期三

Apache2.0性能优化—MPM的选择与配置[转]

致谢: 原文转自LinuxSir.org

Apache 2.0在性能上的改善最吸引人。在支持POSIX线程的Unix系统上,Apache可以通过不同的MPM运行在一种多进程与多线程相混合的模式下,增强 部分配置的可扩充性能。相比于Apache 1.3,2.0版本做了大量的优化来提升处理能力和可伸缩性,并且大多数改进在默认状态下即可生效。但是在编译和运行时刻,2.0也有许多可以显著提高性 能的选择。本文不想叙述那些以功能换取速度的指令,如HostnameLookups等,而只是说明在2.0中影响性能的最核心特性:MPM(Multi -Processing Modules,多道处理模块)的基本工作原理和配置指令。

毫不夸张地说,MPM的引入是Apache 2.0最重要的变化。大家知道,Apache是基于模块化的设计,而Apache 2.0更扩展了模块化设计到Web服务器的最基本功能。服务器装载了一种多道处理模块,负责绑定本机网络端口、接受请求,并调度子进程来处理请求。扩展模 块化设计有两个重要好处:
◆ Apache可以更简洁、有效地支持多种操作系统;
◆ 服务器可以按站点的特殊需要进行自定制。

在用户级,MPM看起来和其它Apache模块非常类似。主要区别是在任意时刻只能有一种MPM被装载到服务器中。

指定MPM的方法

下面以Red Hat Linux 9为平台,说明在Apache 2.0中如何指定MPM (Apache采用2.0.45)。先解压缩源代码包httpd-2.0.45.tar.gz,生成httpd-2.0.45目录(Apache 1.3源代码包的命名规则是apache_1.3.NN.tar.gz,而2.0版则是httpd-2.0.NN.tar.gz,其中NN是次版本号)。

进入httpd-2.0.45目录,运行以下代码:
$ ./configure –help|grep mpm

显示如下:
–with-mpm=MPM
Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}

上述操作用来选择要使用的进程模型,即哪种MPM模块。Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM, perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec 机制做得更好。leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以 Apache官方也并不推荐使用。因此,我们主要阐述prefork和worker这两种和性能关系最大的产品级MPM ( 有关其它的MPM详细说明,请参见Apache官方文档:http://httpd.apache.org/docs-2.0/mod/)。

prefork的工作原理及配置

如果不用“–with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。它所采用的预派生子进程方式也是 Apache 1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不 同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。

若使用prefork,在make编译和make install安装后,使用“httpd -l”来确定当前使用的MPM,应该会看到prefork.c(如果看到worker.c说明使用的是worker MPM,依此类推)。再查看缺省生成的httpd.conf配置文件,里面包含如下配置段:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0

prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建 一 个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足 MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销 以增加性能。

MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过 大,但如果设的值比MinSpareServers小,Apache会自动把其调整为MinSpareServers+1。如果站点负载较大,可考虑同时 加大MinSpareServers和MaxSpareServers。

MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild” 个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
◆ 可防止意外的内存泄漏;
◆ 在服务器负载下降的时侯会自动减少子进程数。

因此,可根据服务器的负载来调整这个值。笔者认为10000左右比较合适。

MaxClients是这些指令中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值 150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置 和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。如果把这个值设为大于256,那么 Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache 1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找 256,就会发现“#define HARD_SERVER_LIMIT 256”这行。把256改为要增大的值(如4000),然后重新编译Apache即可。在Apache 2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。下面是笔者的prefork配置段:

StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1000
MaxRequestsPerChild 10000

上述配置中,ServerLimit的最大值是20000,对于大多数站点已经足够。如果一定要再加大这个数值,对位于源代码树下server/mpm/prefork/prefork.c中以下两行做相应修改即可:
#define DEFAULT_SERVER_LIMIT 256
#define MAX_SERVER_LIMIT 20000

worker的工作原理及配置

相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。

在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd.conf中有以下配置段:

StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0

worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最 多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。

ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:
#define DEFAULT_THREAD_LIMIT 64
#define MAX_THREAD_LIMIT 20000

这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负 载 很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是 20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行:
#define DEFAULT_SERVER_LIMIT 16
#define MAX_SERVER_LIMIT 20000

需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且 MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的 worker配置段:

StartServers 3
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0

通过上面的叙述,可以了解到Apache 2.0中prefork和worker这两个重要MPM的工作原理,并可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。

阅读Apache2.0官方文件获取详细资料.


Linux-Boot-Step

2008年11月14日星期五