Linux集群负载均衡

集群原理
linux集群系统包括集群节点和集群管理器两部分。集群节点有时简称为节点、服务器或 服务器节点,是提供处理资源的系统,它进行集群的实际工作。一般来讲,它必须进行配置才能成为集群的一部分,也必须运行集群的应用软件。应用软件可以是专 用于集群的软件,也可以是设计用于分布式系统的标准软件。linux集群管理器则是将节点捆绑在一起,以构成单一系统外观的逻辑结构,它用于将任务分解到 所有的节点。

集群因多种不同的原因而有着不同的类型,建立linux集群的最直接原因是共享CPU资源,在多个机器之间平衡负载,获得更多的系统可靠性,或在主机失败时提供后备系统(切换)。

通过对相关软件的分析,实现集群负载的功能是通过流量管理实现的,具体有以下几种实现方法:直接路由(Direct Forwarding)、网络地址转换(NAT)和隧道技术(Tunneling)。

直接路由(Direct Forwarding)是当参与集群的计算机和作为控制管理的计算机在同一个网段时可以使用此法。控制管理的计算机接收到请求包时,直接送到参与集群的节点。它的优点是返回给客户的流量不经过控制主机,速度快、开销少。

可能大家比较熟悉网络地址转换(NAT)这种方法。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址,外界看起来包是来自地 址转换器本身。当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。它的优点是节省IP地址,能对内部进行伪装;缺点是效率低,因为返回给请 求方的流量要经过转换器。

隧道技术(Tunneling)这种方式是linux集群的节点不在同一个网段时采用的转发机制,是将IP包封装在其它网络流量中。从安全角度考虑,应该使用隧道技术中的VPN,也可使用租用专线。

在计算机技术中,集群负载平衡是目前一个热门技术,也是一个高端应用。Internet/Intranet中使用集群负载平衡方案十分广泛,尤其是大中型网站都难离这种技术。直接路由、网络地址转换、隧道技术会根据应用需要而被采用。 

男女之间的10种“边缘”关系

男女关系越来越多元化的今天,颠覆传统的主力——大学校园里,更多种的异性关系出现了。这些无法定义的情感,以前叫“暧昧”,但随着人们对蓝颜知己的态度越来越宽容,今天这些擦边球故事里的哥哥妹妹们更喜欢管它叫“边缘”。

边缘关系之一:哥哥妹妹(姐姐弟弟)

边缘指数:****

招牌口号:“某某是我哥,我们是亲人。”“她是我老乡,比我小三届呢,小妹妹……”

潜在危机:“弟弟妹妹”对“哥哥姐姐”的感情,往往更为沉重和复杂,很容易陷入其中难以自拔,一旦“哥哥姐姐”开始恋爱,“弟弟妹妹”难免会成为绊脚石

边缘关系之二:死党

边缘指数:****

招牌口号:“我和她谁跟谁啊,完全是亲哥们!”“我早就认他做我姐姐啦。”

潜在危机:每天无拘无束玩在一处的亲密朋友,一旦有突发事件使其意识到对方是异性的事实,关系难免不出现化学反应

边缘关系之三:红颜蓝颜

边缘指数:*****

招牌口号:“女生的心和身体是可以分开的,我们之间,就一个纯字。”“男女生之间没有纯洁的友谊?那只怪你没找到红颜知己。”

潜在危机:和死党比起来,以感情互动为基础的红颜蓝颜又多了一层边缘的成分。即使是最清白的蓝颜知己,也会引起恋人的警惕;其次,毕竟是一男一女,一旦“酒逢知己千杯少”,难免突破最后一道防线,这“知己”关系就难再继续。

边缘关系之四:粉丝

边缘指数:**

招牌口号:“人家就是我偶像!我愿意帮他/她。我只是欣赏他/她的才华…”

潜在危机:不平衡的关系不容易顺利转型。通常这种带有奉献与仰慕性质的边缘感情会随着时间而淡化;不过也不排除出现意外的情况

边缘关系之五:异性合住

边缘指数:***

招牌口号:“一个人住负担太重,而且我怕黑,有个男生也好照应。”“她的重要意义体现在每个月除了方便面不知道还能吃啥的时候。”

潜在危机:房子本身就已经十分边缘,单身男女共住一房?即使并非一室,也太接近。小心咯,不要被别有用心的人利用,伤了感情还搅乱了生活
边缘关系之六:网络情人

边缘指数:*****

招牌口号:“我们在比特的世界里相爱,离开网络,这份爱就无法生存。”
潜在危机:因为彼此爱的,

边缘关系之七:青梅竹马

边缘指数:*****

潜在危机:最接近亲情的关系,反而危险,每当谈恋爱不顺的时候,难免会回归的港湾,除了家还有哪儿?这种边缘已经无需口号做掩饰。

边缘关系之八:损友

边缘指数:**

招牌口号:“我们以踩得对方心服口服为最终目的!小样的看谁牛……”

潜在危机:有竞争就有刺激的快感(此快感非彼快感,不许想歪),嬉笑怒骂间培养出来的默契不容小觑,谁说俩人不会某天突然就损出感觉了呢

边缘关系之九:兼职司机/保镖

边缘指数:****

招牌口号:“反正他有车,正好顺路送我而已。”

潜在危机:这种关系可是衍生绯闻的源头哦!也许你只是搭了谁谁的顺风车而已,但别人怎么知道,车的终点是哪里呢?

边缘关系之十:约会拍档

边缘指数:****

招牌口号:“一个人玩有什么好玩,我不过是给自己找了个玩伴而已。”

潜在危机:如果这种关系稳定而确定、建立在共同的兴趣爱好上,可以称之为志同道合。但如果只是一方寂寞了需要消遣,而另一个属于纯粹的“n陪”,那就有说不清道不明的嫌疑了

PHP 获取POST数据的另一种方法

在研究网易登录的时候,发现网易的登录的POST数据为如下形式:

callCount=1
scriptSessionId=${scriptSessionId}187
c0-scriptName=UserBeanNew
c0-methodName=checkPassportVN
c0-id=0
c0-param0=string:ssologin
c0-param1=string:cf8956a6cf1cbbebe85ddde5156afee8
c0-param2=boolean:false
c0-param3=string:0
c0-param4=boolean:false
c0-param5=boolean:false
c0-param6=boolean:false
batchId=662190

因为如果是表单提交的数据的话,POST数据一般是xx=XX&yy=YY&.. 的形式,这样正好方便解到数组里面;但是网易的POST明显不是这种格式,还在想是怎么发起的这个http请求,后来才意识到使用ajax的方式时,POST数据完全可以使外部组织的。至于服务器端怎么解释就是另外一回事儿了。

网易的服务器端是java写的,至于java怎么获取这部分数据就不管了,如果是PHP,怎么获取这种格式的数据呢?一般来讲,使用PHP获取POST数据都是从POST数组中获取的,但是,这种格式显然不能按照xx=XX&yy=YY&.. 格式来解释成数组了,那么PHP又怎么获取这部分数据呢,至少PHP一定有办法获取这部分数据,只是我目前还不知道而已(或者是忘记了);
后来百度一下,发现可以通过 php://input 来获取。

女人最需要的是什么

女人最需要的是什么?其实很多人都在找寻这个结果,不光男人不知道,有的时候女人也不知道自己想要的究竟是什么,女人有的时候很复杂,有的时候女人也可以是非常简单的。男人们总认为女人很难理解。其实是男人没有真正的理解女人。

    女人最需要的是什么?

    女人最需要:男人的理解、关怀、赞美、体贴和爱护。

    女人最需要:挺拔的身材、漂亮的脸蛋、秀丽的长发。

    女人最需要:内在的气质、幽雅的谈吐、温柔的品性。

    女人最需要:稳定的工作、幸福的家庭、自己的空间。

    女人最需要:同性的羡慕、异性的关注、晚辈的崇拜。

    1、礼物不在贵重,而在于真诚

    从女人的观点来看,最好的礼物是那些较平实的,而不是那些浮华夸张的。 有个丈夫专门收集情人卡,随时送给太太,每当她心情不好时,他就把一张卡放在她可能发现的地方,这使太太非常开心。

    2、不少女人真的怕自己不够漂亮

    女人需要明确的赞美:“我喜欢那个发型”,或者“你穿红衣服很好看”。这种赞美的话能给女人鼓励,使她注重打扮,使爱情不断得到滋润。

    3、女人也重视工作

    女人希望她们的丈夫或男友重视她们的工作,像他们重视自己的工作一样。每次太太谈论她自己的工作时,丈夫应竖着耳朵细听。不用说,由于在这方面沟通好了,他们之间的感情会越来越深厚。

    4、女人需要男人耐心倾听她说话

    男人心目中的交谈是研究问题、辩论是非,找出解决办法的途径。为了达到这个目的,他也许会一再打断女人的话,要她“明白”他的意思。然而,女人宁愿男人友善地倾听,而不愿他们老是发表意见,她们会说个不停,直到觉得心里恢复舒畅为止。

    5、女人不像男人那样容易堕入爱河

    女人择偶时,通常较重视各种实际的因素。女人也许亟需爱情,但她们内心仍有位品评专家在问:这个男人可靠吗?因此,男人除了要注意头发、衣服和礼貌等外,还要具有仁慈大方和忠实可靠的品德。

    6、女人希望跟丈夫成为朋友

    女人希望和她偕老的男人视为地位同等的人,尊重她的长处,容忍她的缺点,而且希望她也这样对待他。

    简单地说,她需要的是朋友、工作、了解她的伴侣。

好友或关注在社区产品中的设计

根据这个文章的分析,我觉得新浪作为一个综合性的门户网站,我们的目前的好友关系系统是一个以弱链接为主强链接为辅的关系系统。
 
————————————————————-
 
 

众所周知,“关系”的设计是社区产品中相当重要的一个环节,在设计关系的时候需要考虑到关系的成本,信息与关系的走向、关系的后续衍生产品和辅助功能等,不同类型的社区有着不同量级的关系设计,如果最初的架子没有搭建好,就会给后期的运营带来很大的麻烦。在此,将之前产品设计中领悟到的一些关于关系设计的问题总结整理,供大家参考。

1、谁与谁发生关系?

在社区产品,或者包含社区产品的大网站中,关系一般可以分为两个大的类型,:

(1)、用户与用户之间的关系

(2)、用户与内容之间的关系(包含用户产生的内容和网站本身产生的内容)。

以下我们先探讨关于用户与用户关系的设计问题

2、用户与用户之间的关系该如何设计,适用哪种类型的网站

要搞明白哪种关系适合哪种网站,首先要区分的是强链接与弱链接。

强链接:需要从强链接获取认同、纯关注、同情、炫耀、依靠等情感沟通,强链接类似家人、现实生活中的朋友、同学等,尽管可能你与对方不是处于同一个知识圈中,但依然可以找到很多个共同的公共话题和情感的交流。而且这种关系属于天然继承(亲人)或者环境造成(同学,同事)。

弱链接:需要从若链接获取知识、资讯、帮助、交流等,弱链接多产生在同一知识领域、共同的职业、同一爱好者群体、朋友的朋友(基于同一领域的)等。通过这些关系,可能对我们的工作、学习、爱好产生影响,在相互交互的过程中,双方换取资讯、知识、及对于某件事物的认识。

那么究竟哪些网站属于典型的强链接,哪些又属于弱链接呢?

SNS类网站,类似Facebook、Kaixin001.com  等基于实名注册和现实社交关系的基本上属于强链接关系。
豆瓣、last.fm等基于同一爱好或者文化基础的属于典型的弱链接模式,当然弱链接可能会转换为强链接。

在我们搞清楚强弱链接后,我们还需要知道的是,强弱链接的成本和信息披露的不同。

3、不同社区或网站适合什么类型的关系?

我们都知道,Facebook所采取的关系是好友,也就是需要对方同意后,方可以加为好友,加为好友后所获取的内容为对方的个人资料和个人状态的内容(照片、随笔、评论、日志、关系等)  。
而twitter采用的是关注,只需要主动关注即可成为关系,产生关系后,所得到的信息仅为对方的140字内容和少量个人介绍。

这两种关系的获取成本是截然不同的,
需要对方同意并加为好友的,首选需要得到主人的主观审核,并且获取了相对较多的内容,
而单纯关注性质的获取的成本就相对低廉的多,当然,得到的综合信息也会少很多(仅来自单一的产品形态)。

OK,由此可见:

若获取的内容为综合的,基于现实关系的(强链接)的,对关系双方资料有保护倾向的,需要采用好友的关系,也就是需要双方认证的。

若获取的内容为单一的,基于虚拟关系(弱链接)的,对关系双方不需要刻意保护的,需要采用关注的关系,也就是无需认证,最低成本获取关系的模式。

(弱链接在某些社区网站还用以标注收藏的作用)

那么获取关系后,信息的披露是如何的呢?

4、在获取关系后,信息该如何披露呢?

获取关系后的信息披露大致要考虑两点,

(1)、信息披露的主要内容

信息披露的内容其实主要是指双方在获取关系后,基于好友和关注究竟应该为用户推送什么内容呢(动态)。其实,在最上面的强弱链接的区别我们已经看出所需要披露的内容。

基于强链接的内容,我们更在意的是关系的交互,也就是对方做了什么,想了什么、更新了什么、那么对方是否更换头像、是否写了新的日志、是否拍了新的照片等,都会成为主要的信息推送内容。
而弱链接实际上我们更关注的不是对方,而是对方基于网站所产生的内容,也就是对方对于某个事物的表态、文章、照片、评价等。(类似豆瓣的推荐、我说、Mtime的随笔、分享,一句话影评,参加的活动等)

(2)、用户对信息的承载力,如何避免信息过载。

信息过载问题常常为我们所困扰,尤其是基于关系进行信息披露的,那么要解决或者尝试解决信息过载问题,首先要搞清楚的是用户对信息的承载能力问题,不同类型的关系和不同的用户,对于信息的承载力是不同的。

大致来说,关系越强,信息的承载力越强,关系越弱,信息的承载力就会越差劲。由此,我们可说,在强关系的动态中,我们可以更多的披露轻量级的动作,对于信息的流量不必控制太严格,当然,要严格注意个人隐私问题。
在弱关系的动态中,我们更需要注意的是信息的相关度和产生信息的量级问题(例如:产生内容的成本约大,可能信息的价值越高)

(3)、提醒在关系中的应用

提醒是社区类网站或网站社区功能中的主要组成部分,也是用户较低成本获取关系内容的方式。例如:站内信、特殊事件提醒、请求的提醒、回复内容的提醒、系统提醒都属于这种类型。

在提醒的设计方面,我们应更注重动作前移,也就是在提醒中的信息披露足以用户做出判断,并有相应的动作能够迅速完成对于信息的回应,这一体验将更有利于提高网站的黏性,增强关系。

以上是关于不同类型的社区或网站的社区功能中用户与用户之间的关系设计的一点小总结。

javascript 片段

http://www.google.cn/music/js/music_js-941234969.js

其中的一段,判断变量类型,居然也能这么复杂:

typeOf = function(a) {
    var 
typeof a;
    if (
== "object") if (a) {
        if (
instanceof Array || !(instanceof Object) && Object.prototype.toString.call(a) == "[object Array]" || typeof a.length == "number" && typeof a.splice != "undefined" && typeof a.propertyIsEnumerable != "undefined" && !a.propertyIsEnumerable("splice")) return "array";
        if (! (
instanceof Object) && (Object.prototype.toString.call(a) == "[object Function]" || typeof a.call != "undefined" && typeof a.propertyIsEnumerable != "undefined" && !a.propertyIsEnumerable("call"))) return "function"
    
} else return "null";
    else if (
== "function" && typeof a.call == "undefined") return "object";
    return 
c
};

用PHP计算身份证校验码

中国(大陆)公民身份证号码每一位所代表的意义,网上很多文章都有介绍,在此就不多说。其中身份证号码的最后一位是校验码,跟据前17位计算得到。算法大 概是这样:把前17位的每一个数字和一串加权因子相乘,再计算这些乘积的和;把这些乘积的和模11得到的数字作为序号,最后在一个校验码串中提取出与序号 相对应的字符。当然,网上也有不少的文章教大家计算这个校验码,下面我们将尝试用PHP语言来完成这一工作,也许可以用于PHP开发中,如校验用户的身份 证号码是否正确。

假设某中国(大陆)公民的身份证号码前17位是这个:44010221990101001(注:此人出生于2199年),那么我们跟据上面的算法尝试写几行PHP代码来完成校验码的计算。为了能让大家更容易理解,我使用了较简单的语句,请看代码:

<?php
//身份证号码前17位,可以从各种数据源中获得(如数据库、用户提交的表单等)
$body  = ‘44010221990101001’;

//加权因子
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

//校验码串
$ai = array(‘1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’, ‘2’);

//按顺序循环处理前17位
for ($i = 0;$i < 17;$i++) {
//提取前17位的其中一位,并将变量类型转为实数
$b = (int) $body{$i};

//提取相应的加权因子
$w = $wi[$i];

//把从身份证号码中提取的一位数字和加权因子相乘,并累加
$sigma += $b * $w;
}

//计算序号
$number = $sigma % 11;

//按照序号从校验码串中提取相应的字符。
$check_number = $ai[$number];

//输出
echo $body.$check_number;
?>

运行以上代码之后,可以算出该身份证的校验码为9。大家可以用自己身份证的前17位试试。

如果你明白上面的例子的话,就可以把这段代码的一些语句合并,去除没必要的变量,优化得到如下代码:

<?php
$body  = ‘44010221990101001’;
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$ai = array(‘1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’, ‘2’);
for ($i = 0;$i < 17;$i++) {
$sigma += ((int) $body{$i}) * $wi[$i];
}
echo $body.$ai[($sigma % 11)];
?>

pdflush后台例程

15.4    pdflush后台例程

由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时,脏页被写回磁盘:

·当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。

·当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘,以确保脏页不会无限期地驻留在内存中。

上面两种工作的目的完全不同。实际上,在老内 核中,这是由两个独立的内核线程(请看后面章节)分别完成的。但是在2.6内核中,由一群内核线程—pdflush后台回写例程—统一执行两种工作。说 pdflush是“dirty page flush”的缩写是不正确的,不用去管这个让人混淆的名称,我们来看看这两个目标是如何具体实现的。

首先,pdflush线程在系统中的空闲内存低于一 个特定的阈值时,将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时,释放脏页以重新获得内存。特定的内存阈值可以通过 dirty_background_ratio sysctl系统调用设置。当空闲内存比阈值:dirty_ background_ratio还低时,内核便会调用函数wakeup_bdflush()唤醒一个pdflush线程,随后pdflush线程进一步 调用函数background_writeout()开始将脏页写回磁盘。函数background_ writeout()需要一个长整型参数,该参数指定试图写回的页面数目。函数background_writeout()会连续地写出数据,直到满足以 下两个条件:

·已经有指定的最小数目的页被写出到磁盘。

·空闲内存数已经回升,超过了阈值dirty_background_ratio。

上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止,除非pdflush写回了所有的脏页,没有剩下的脏页可再被写回了。

了满足第二个目标,pdflush后台例程会被周期 性唤醒(和空闲内存是否过低无关),将那些在内存中驻留时间过长的脏页写出,确保内存中不会有长期存在的脏页。如果系统发生崩溃,由于内存处于混乱之中, 所以那些在内存中还没来得及写回磁盘的脏页就会丢失,所以周期性同步页高速缓存和磁盘非常重要。在系统启动时,内核初始化一个定时器,让它周期地唤醒 pdflush线程,随后使其运行函数wb_kupdate()。该函数将把所有驻留时间超过百分之dirty_expire_centisecs秒的脏 页写回。然后定时器将再次被初始化为百分之dirty_expire_ centisecs秒后唤醒pdflush线程。总而言之,pdflush线程周期地被唤醒并且把超过特定期限的脏页写回磁盘。

系统管理员可以在/proc/sys/vm中设置回写相关的参数,也可以通过sysctl系统调用设置它们。表15-1列出了与pdflush相关的所有可设置变量。

15.4.1    膝上型电脑模式

膝上型电脑模式是一种特殊的页回写策略,该策略主要 意图是将硬盘转动的机械行为最小化,允许硬盘尽可能长时间的停滞,以此延长电池供电时间。该模式可通过/proc/sys/vm/laptop_mode 文件进行配置,通常,上述配置文件内容为零,也就是说膝上型电脑模式关闭,如果需要启用膝上型电脑模式,则向配置文件中写入1。

膝上型电脑模式的页回写行为与传统方式相比只有一处变化。除了当缓存中的页面太旧时要执行回写脏页以外,pdflush还会找准磁盘运转的时机,把所有其他的物理磁盘I/O、刷新脏缓冲等统统写回到磁盘,以便保证不会专门为了写磁盘而去主动激活磁盘运行。

上述回写行为变化要求dirty_expire_centisecs和dirty_writeback_centisecs两阈值必须设置的更大,比如10分钟。因为磁盘运转并不很频繁,所以用这样长的回写延迟才能保证膝上型电脑模式可以等到磁盘运转机会写入数据。

多数Linux发布板会在电脑接上电池或拔掉电池时,自动开启或禁止膝上型电脑模式以及其他需要的pdflush可调节开关。因此机器可在使用电池电源时自动进入膝上型电脑模式;而在插上交流电源时恢复到常规的页回写模式。

15.4.2              bdflush和kupdated

在2.6版本前,pdflush线程的工作是分别由 bdflush和kupdated两个线程共同完成。当可用内存过低时,bdflush内核线程在后台执行脏页回写操作。与pdflush一样,它也有一 组阈值参数,当系统中空闲内存消耗到特定阈值以下时,bdflush线程就被wakeup_bdflush()函数唤醒。

bdflush和pdflush之间有两个主要区 别。第一个区别在下一节还会谈到,系统中只有一个bdflush后台线程,而pdflush线程的数目却可以动态变化;第二个区别是bdflush线程基 于缓冲,它将脏缓冲写回磁盘,相反,pdflush基于页面,它将整个脏页写回磁盘。当然,页面可能包含缓冲,但是实际I/O操作对象是整页,而不是块。 因为页在内存中是更普遍和普通的概念,所以管理页相比管理块要简单。

因为只有在内存过低和缓冲数量过大 时,bdflush例程才刷新缓冲,所以kupdated例程被引入,以便周期地写回脏页。它和pdflush线程的wb_kupdate()函数提供同 样的服务。bdflush和kupdate内核线程现在完全被pdflush线程取代了。

15.4.3              避免拥塞的方法:使用多线程

使用bdflush线程最主要的一个缺点就 是:bdflush仅仅包含了一个线程,因此很有可能在页回写任务很重时,造成拥塞。这是因为单一的线程有可能堵塞在某个设备的已拥塞请求队列上(正在等 待将请求提交给磁盘的I/O请求队列),而其他设备的请求队列却没法得到处理。如果系统有多个磁盘和较强的处理能力,内核应该能使得每个磁盘都处于忙状 态。不幸的是,即使还有许多数据需要回写,单个的bdflush线程也可能会堵塞在某个队列的处理上,不能使所有磁盘都处于饱和的工作状态。原因在于磁盘 的吞吐量是有限的—不幸的是它实在太小。正是因为磁盘的吞吐量很有限,所以如果只有惟一线程执行页回写操作,那么这个线程很容易苦苦等待对一个磁盘上的操 作。为了避免出现这种情况,内核需要多个回写线程并发执行,这样单个设备队列的拥塞就不会成为系统瓶颈了。

2.6内核通过使用多个pdflush线程来解决上述问题。每个线程可以相互独立地将脏页刷新回磁盘,而且不同的pdflush线程处理不同的设备队列。

通过一个简单的算法,线程的数目可以根据系统的运行 时间进行调整。如果所有已存在的pdflush线程都已持续工作1秒以上,内核就会创建一个新的pdflush线程。线程数量最多不能超过 MAX_PDFLUSH_THREADS—默认值是8。相反,如果一个pdflush线程睡眠超过1秒,内核就会终止该线程。线程的数量最少不得小于 MIN_PDFLUSH_THREADS—默认值是2。pdflush线程数量取决于页回写的数量和拥塞情况,动态调整。如果所有存在的pdflush线 程都忙着写回数据,那么一个新线程就会被创建,确保不会出现一个设备队列处于拥塞状态,而其他设备队列却在等待—而不是接收—回写数据的情况。如果堵塞消 除,pdflush线程的数量便会自动减少,以便节约内存。

这种方式看起来很理想,但是如果每一个 pdflush线程都挂起在同一个堵塞的队列上会怎么样呢?在这种情况下,多个pdflush线程的性能并不会比单个线程提高多少,反而会造成严重的内存 浪费。为了克服这种负面影响,pdflush线程利用了拥塞避免策略,它们会积极地试图写回那些不属于拥塞队列的页面。这样一来,pdflush线程通过 分派回写工作,阻止多个线程在同一个忙设备上纠缠。所以pdflush线程很“忙”—此时一个新线程会被创建—它们是真正地繁忙。

由于页回写性能的提高,以及pdflush线程的引入,2.6内核相比以前的内核,能够使更多磁盘饱和工作,即使处于繁重负载的情况下,pdflush线程也可以让多个磁盘保持高吞吐量。

RHEL 4 性能优化

一、前言

本文档针对OOP8生产环境,具体优化策略需要根据实际情况进行调整;本文档将在以下几个方面来阐述如何针对RedHat Enterprise Linux进行性能优化。

1)      Linux Proc文件系统,通过对Proc文件系统进行调整,达到性能优化的目的。

2)      Linux性能诊断工具,介绍如何使用Linux自带的诊断工具进行性能诊断。

加粗斜体表示可以直接运行的命令。

下划线表示文件的内容。

二、/proc/sys/kernel/优化

1)      /proc/sys/kernel/ctrl-alt-del

该文件有一个二进制值,该值控制系统在接收到ctrl+alt+delete按键组合时如何反应。这两个值分别是:

零(0)值,表示捕获ctrl+alt+delete,并将其送至 init 程序;这将允许系统可以安全地关闭和重启,就好象输入shutdown命令一样。

壹(1)值,表示不捕获ctrl+alt+delete,将执行非正常的关闭,就好象直接关闭电源一样。

 

缺省设置:0

建议设置:1,防止意外按下ctrl+alt+delete导致系统非正常重启。

2)      proc/sys/kernel/msgmax

该文件指定了从一个进程发送到另一个进程的消息的最大长度(bytes)。进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。

 

缺省设置:8192

3)      /proc/sys/kernel/msgmnb

该文件指定一个消息队列的最大长度(bytes)。

 

缺省设置:16384

4)      /proc/sys/kernel/msgmni

该文件指定消息队列标识的最大数目,即系统范围内最大多少个消息队列。

 

缺省设置:16

5)      /proc/sys/kernel/panic

该文件表示如果发生内核严重错误(kernel panic,则内核在重新引导之前等待的时间(以秒为单位)。

零(0)秒,表示在发生内核严重错误时将禁止自动重新引导。

 

缺省设置:0

6)      proc/sys/kernel/shmall

该文件表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes)。

 

缺省设置:2097152

7)      /proc/sys/kernel/shmmax

该文件表示内核所允许的最大共享内存段的大小(bytes)。

 

缺省设置:33554432

建议设置:物理内存 * 50%

 

实际可用最大共享内存段大小=shmmax * 98%,其中大约2%用于共享内存结构。

可以通过设置shmmax,然后执行ipcs -l来验证。

8)      /proc/sys/kernel/shmmni

该文件表示用于整个系统的共享内存段的最大数目(个)。

 

缺省设置:4096

9)      /proc/sys/kernel/threads-max

该文件表示内核所能使用的线程的最大数目。

 

缺省设置:2048

10)  /proc/sys/kernel/sem

该文件用于控制内核信号量,信号量是System VIPC用于进程间通讯的方法。

 

建议设置:250 32000 100 128

第一列,表示每个信号集中的最大信号量数目。

第二列,表示系统范围内的最大信号量总数目。

第三列,表示每个信号发生时的最大系统操作数目。

第四列,表示系统范围内的最大信号集总数目。

所以,(第一列)*(第四列)=(第二列)

 

以上设置,可以通过执行ipcs -l来验证。

11)  待续。。。

三、/proc/sys/vm/优化

1)      /proc/sys/vm/block_dump

该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作。

 

缺省设置:0,禁用Block Debug模式

2)      /proc/sys/vm/dirty_background_ratio

该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。

 

缺省设置:10

3)      /proc/sys/vm/dirty_expire_centisecs

该文件表示如果脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘。

 

缺省设置:30001/100秒)

4)      /proc/sys/vm/dirty_ratio

该文件表示如果进程产生的脏数据到达系统整体内存的百分比,此时进程自行把脏数据写回磁盘。

 

缺省设置:40

5)      /proc/sys/vm/dirty_writeback_centisecs

该文件表示pdflush进程周期性间隔多久把脏数据写回磁盘。

 

缺省设置:5001/100秒)

6)      /proc/sys/vm/vfs_cache_pressure

该文件表示内核回收用于directoryinode cache内存的倾向;缺省值100表示内核将根据pagecacheswapcache,把directoryinode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directoryinode cache;增加该值超过100,将导致内核倾向于回收directoryinode cache

 

缺省设置:100

7)      /proc/sys/vm/min_free_kbytes

该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。

 

缺省设置:724512M物理内存)

8)      /proc/sys/vm/nr_pdflush_threads

该文件表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。

 

缺省设置:2(只读)

9)      /proc/sys/vm/overcommit_memory

该文件指定了内核针对内存分配的策略,其值可以是012

0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2, 表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。

 

缺省设置:0

10)  /proc/sys/vm/overcommit_ratio

该文件表示,如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。

系统可分配内存=交换空间+物理内存*overcommit_ratio/100

 

缺省设置:50%

11)  /proc/sys/vm/page-cluster

该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。

 

缺省设置:323次方,8页)

12)  /proc/sys/vm/swapiness

该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

 

缺省设置:60

13)  legacy_va_layout

该文件表示是否使用最新的32位共享内存mmap()系统调用,Linux支持的共享内存分配方式包括mmap()PosixSystem VIPC

0, 使用最新32mmap()系统调用。

1, 使用2.4内核提供的系统调用。

 

缺省设置:0

14)  nr_hugepages

该文件表示系统保留的hugetlb页数。

15)  hugetlb_shm_group

该文件表示允许使用hugetlb页创建System VIPC共享内存段的系统组ID

16)  待续。。。

四、/proc/sys/fs/优化

1)      /proc/sys/fs/file-max

该文件指定了可以分配的文件句柄的最大数目。如果用户得到的错误消息声明由于打开

文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。

 

缺省设置:4096

建议设置:65536

2)      /proc/sys/fs/file-nr

该文件与 file-max 相关,它有三个值:

已分配文件句柄的数目

已使用文件句柄的数目

文件句柄的最大数目

该文件是只读的,仅用于显示信息。

3)      待续。。。

五、/proc/sys/net/core/优化

  该目录下的配置文件主要用来控制内核和网络层之间的交互行为。

1) /proc/sys/net/core/message_burst

写新的警告消息所需的时间(以 1/10 秒为单位);在这个时间内系统接收到的其它警告消息会被丢弃。这用于防止某些企图用消息淹没系统的人所使用的拒绝服务(Denial of Service)攻击。

 

缺省设置:505秒)

2) /proc/sys/net/core/message_cost

该文件表示写每个警告消息相关的成本值。该值越大,越有可能忽略警告消息。

 

缺省设置:5

3) /proc/sys/net/core/netdev_max_backlog

该文件表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

 

缺省设置:300

4) /proc/sys/net/core/optmem_max

该文件表示每个套接字所允许的最大缓冲区的大小。

 

缺省设置:10240

5) /proc/sys/net/core/rmem_default

该文件指定了接收套接字缓冲区大小的缺省值(以字节为单位)。

 

缺省设置:110592

6) /proc/sys/net/core/rmem_max

该文件指定了接收套接字缓冲区大小的最大值(以字节为单位)。

 

缺省设置:131071

7) /proc/sys/net/core/wmem_default

该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。

 

缺省设置:110592

8) /proc/sys/net/core/wmem_max

该文件指定了发送套接字缓冲区大小的最大值(以字节为单位)。

 

缺省设置:131071

9) 待续。。。

六、/proc/sys/net/ipv4/优化

1)      /proc/sys/net/ipv4/ip_forward

该文件表示是否打开IP转发。

0,禁止

1,转发

 

缺省设置:0

2)      /proc/sys/net/ipv4/ip_default_ttl

该文件表示一个数据报的生存周期(Time To Live),即最多经过多少路由器。

 

缺省设置:64

增加该值会降低系统性能。

3)      /proc/sys/net/ipv4/ip_no_pmtu_disc

该文件表示在全局范围内关闭路径MTU探测功能。

 

缺省设置:0

4)      /proc/sys/net/ipv4/route/min_pmtu

该文件表示最小路径MTU的大小。

 

缺省设置:552

5)      /proc/sys/net/ipv4/route/mtu_expires

该文件表示PMTU信息缓存多长时间(秒)。

 

缺省设置:600(秒)

6)      /proc/sys/net/ipv4/route/min_adv_mss

该文件表示最小的MSSMaximum Segment Size)大小,取决于第一跳的路由器MTU

 

缺省设置:256bytes

6.1 IP Fragmentation

1)      /proc/sys/net/ipv4/ipfrag_low_thresh
/proc/sys/net/ipv4/ipfrag_low_thresh

两个文件分别表示用于重组IP分段的内存分配最低值和最高值,一旦达到最高内存分配值,其它分段将被丢弃,直到达到最低内存分配值。

 

缺省设置:196608ipfrag_low_thresh

     262144ipfrag_high_thresh

2)      /proc/sys/net/ipv4/ipfrag_time

该文件表示一个IP分段在内存中保留多少秒。

 

缺省设置:30(秒)

6.2 INET Peer Storage

1)      /proc/sys/net/ipv4/inet_peer_threshold

INET对端存储器某个合适值,当超过该阀值条目将被丢弃。该阀值同样决定生存

时间以及废物收集通过的时间间隔。条目越多,存活期越低,GC 间隔越短。

 

缺省设置:65664

2)      /proc/sys/net/ipv4/inet_peer_minttl

条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低

存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies

单位测量。

 

缺省设置:120

3)      /proc/sys/net/ipv4/inet_peer_maxttl

条目的最大存活期。在此期限到达之后,如果缓冲池没有耗尽压力的话(例如:缓

冲池中的条目数目非常少),不使用的条目将会超时。该值以 jiffies为单位测量。

 

缺省设置:600

4)      /proc/sys/net/ipv4/inet_peer_gc_mintime

废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。 该值

jiffies为单位测量。

 

缺省设置:10

5)      /proc/sys/net/ipv4/inet_peer_gc_maxtime

废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。 该值

jiffies为单位测量。

 

缺省设置:120

6.3 TCP Variables

1)      /proc/sys/net/ipv4/tcp_syn_retries

该文件表示本机向外发起TCP SYN连接超时重传的次数,不应该高于255;该值仅仅针对外出的连接,对于进来的连接由tcp_retries1控制。

 

缺省设置:5

2)      /proc/sys/net/ipv4/tcp_keepalive_probes

该文件表示丢弃TCP连接前,进行最大TCP保持连接侦测的次数。保持连接仅在

SO_KEEPALIVE套接字选项被打开时才被发送。

 

缺省设置:9(次)

3)      /proc/sys/net/ipv4/tcp_keepalive_time

该文件表示从不再传送数据到向连接上发送保持连接信号之间所需的秒数。

 

缺省设置:72002小时)

4)      /proc/sys/net/ipv4/tcp_keepalive_intvl

该文件表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有相应的TCP连接的时间。

 

缺省设置:75(秒)

5)      /proc/sys/net/ipv4/tcp_retries1

  该文件表示放弃回应一个TCP连接请求前进行重传的次数。

  

  缺省设置:3

6)      /proc/sys/net/ipv4/tcp_retries2

  该文件表示放弃在已经建立通讯状态下的一个TCP数据包前进行重传的次数。

  

  缺省设置:15

7)      /proc/sys/net/ipv4/tcp_orphan_retries

在近端丢弃TCP连接之前,要进行多少次重试。默认值是 7 个,相当于 50

16分钟,视 RTO 而定。如果您的系统是负载很大的web服务器,那么也许需

要降低该值,这类 sockets 可能会耗费大量的资源。另外参考

tcp_max_orphans

8)      /proc/sys/net/ipv4/tcp_fin_timeout

对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能

会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在

2.2版本的内核中是 180 秒。您可以设置该值,但需要注意,如果您的机器为负

载很重的web服务器,您可能要冒内存被大量无效数据报填满的风险,

FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1,因为它们最多只吃 1.5K

的内存,但是它们存在时间更长。另外参考 tcp_max_orphans

 

缺省设置:60(秒)

9)      /proc/sys/net/ipv4/tcp_max_tw_buckets

系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,

time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯

粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果

网络条件需要比默认值更多,则可以提高它(或许还要增加内存)

 

缺省设置:180000

10)  /proc/sys/net/ipv4/tcp_tw_recyle

打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求,请不要随

意修改这个值。

 

缺省设置:0

11)  /proc/sys/net/ipv4/tcp_tw_reuse

该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。

 

缺省设置:0

12)  /proc/sys/net/ipv4/tcp_max_orphans

系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那

么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这

个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要依赖这个或是人为的降

低这个限制。

 

缺省设置:8192

13)  /proc/sys/net/ipv4/tcp_abort_on_overflow

当守护进程太忙而不能接受新的连接,就向对方发送reset消息,默认值是false

这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确

信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。

 

缺省设置:0

14)  /proc/sys/net/ipv4/tcp_syncookies

该文件表示是否打开TCP同步标签(syncookie),内核必须打开了 CONFIG_SYN_COOKIES项进行编译。 同步标签(syncookie)可以防止一个套接字在有过多试图连接到达时引起过载。

 

缺省设置:0

15)  /proc/sys/net/ipv4/tcp_stdurg

使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的

BSD解释,因此如果您在 Linux 打开它,或会导致不能和它们正确沟通。

 

缺省设置:0

16)  /proc/sys/net/ipv4/tcp_max_syn_backlog

对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。对于

超过 128Mb 内存的系统,默认值是 1024,低于 128Mb 的则为 128。如果

服务器经常出现过载,可以尝试增加这个数字。警告!假如您将此值设为大于

1024,最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE,以保持

TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(

tcp_adv_win_scale 128Mb 32768-610000)则系统将忽略所有发送给自己

ICMP ECHO请求或那些广播地址的请求。

 

缺省设置:1024

17)  /proc/sys/net/ipv4/tcp_window_scaling

该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力

 

缺省设置:1

18)  /proc/sys/net/ipv4/tcp_sack

该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。

 

缺省设置:1

19)  /proc/sys/net/ipv4/tcp_timestamps

该文件表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。

 

缺省设置:1

20)  /proc/sys/net/ipv4/tcp_fack

该文件表示是否打开FACK拥塞避免和快速重传功能。

 

缺省设置:1

21)  /proc/sys/net/ipv4/tcp_dsack

该文件表示是否允许TCP发送两个完全相同SACK

 

缺省设置:1

22)  /proc/sys/net/ipv4/tcp_ecn

该文件表示是否打开TCP的直接拥塞通告功能。

 

缺省设置:0

23)  /proc/sys/net/ipv4/tcp_reordering

该文件表示TCP流中重排序的数据报最大数量。

 

缺省设置:3

24)  /proc/sys/net/ipv4/tcp_retrans_collapse

该文件表示对于某些有bug的打印机是否提供针对其bug的兼容性。

 

缺省设置:1

25)  /proc/sys/net/ipv4/tcp_wmem

该文件包含3个整数值,分别是:mindefaultmax

Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。

Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmemdefault 值,一般要低于net.core.wmemdefault的值。

Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K

 

缺省设置:4096 16384 131072

26)  /proc/sys/net/ipv4/tcp_rmem

该文件包含3个整数值,分别是:mindefaultmax

Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。

Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmemdefault 值。该值决定了在tcp_adv_win_scaletcp_app_wintcp_app_win的默认值情况下,TCP 窗口大小为65535

Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmemmax的值,今天选择参数 SO_SNDBUF则不受该值影响。

 

缺省设置:4096 87380 174760

27)  /proc/sys/net/ipv4/tcp_mem

该文件包含3个整数值,分别是:lowpressurehigh

Low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。

Pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。

High:允许所有tcp sockets用于排队缓冲数据报的页面量。

一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

 

缺省设置:24576 32768 49152

28)  /proc/sys/net/ipv4/tcp_app_win

该文件表示保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。

 

缺省设置:31

29)  /proc/sys/net/ipv4/tcp_adv_win_scale

该文件表示计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale >; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0)。

 

缺省设置:2

6.4 IP Variables

1)      /proc/sys/net/ipv4/ip_local_port_range

该文件表示TCPUDP协议打开的本地端口号。

 

缺省设置:1024 4999

建议设置:32768 61000

2)      /proc/sys/net/ipv4/ip_nonlocal_bind

该文件表示是否允许进程邦定到非本地地址。

 

缺省设置:0

3)      /proc/sys/net/ipv4/ip_dynaddr

该参数通常用于使用拨号连接的情况,可以使系统动能够立即改变ip包的源地址为该ip地址,同时中断原有的tcp对话而用新地址重新发出一个syn请求包,开始新的tcp对话。在使用ip欺骗时,该参数可以立即改变伪装地址为新的ip地址。该文件表示是否允许动态地址,如果该值非0,表示允许;如果该值大于1,内核将通过log记录动态地址重写信息。

 

缺省设置:0

4)      /proc/sys/net/ipv4/icmp_echo_ignore_all
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

该文件表示内核是否忽略所有的ICMP ECHO请求,或忽略广播和多播请求。

0, 响应请求

1, 忽略请求

 

缺省设置:0

建议设置:1

5)      /proc/sys/net/ipv4/icmp_ratelimit

6)      /proc/sys/net/ipv4/icmp_ratemask

7)      /proc/sys/net/ipv4/icmp_ignore_bogus_error_reponses

某些路由器违背RFC1122标准,其对广播帧发送伪造的响应来应答。这种违背行

为通常会被以告警的方式记录在系统日志中。如果该选项设置为True,内核不会

记录这种警告信息。

 

缺省设置:0

8)      /proc/sys/net/ipv4/igmp_max_memberships

该文件表示多播组中的最大成员数量。

 

缺省设置:20

6.5 Other Configuration

1)      /proc/sys/net/ipv4/conf/*/accept_redirects

   如果主机所在的网段中有两个路由器,你将其中一个设置成了缺省网关,但是该网关

   在收到你的ip包时发现该ip包必须经过另外一个路由器,这时这个路由器就会给你

   发一个所谓的重定向”icmp包,告诉将ip包转发到另外一个路由器。参数值为布尔

   值,1表示接收这类重定向icmp 信息,0表示忽略。在充当路由器的linux主机上缺

   省值为0,在一般的linux主机上缺省值为1。建议将其改为0以消除安全性隐患。

2)      /proc/sys/net/ipv4/*/accept_source_route

 是否接受含有源路由信息的ip包。参数值为布尔值,1表示接受,0表示不接受。在

 充当网关的linux主机上缺省值为1,在一般的linux主机上缺省值为0。从安全性角

 度出发,建议关闭该功能。

3)      /proc/sys/net/ipv4/*/secure_redirects

 其实所谓的安全重定向就是只接受来自网关的重定向”icmp包。该参数就是

 用来设置安全重定向功能的。参数值为布尔值,1表示启用,0表示禁止,缺省值

 为启用。

4)      /proc/sys/net/ipv4/*/proxy_arp

 设置是否对网络上的arp包进行中继。参数值为布尔值,1表示中继,0表示忽略,

 缺省值为0。该参数通常只对充当路由器的linux主机有用。

七、性能优化策略

7.1 基本优化

1)      关闭后台守护进程

系统安装完后,系统会默认启动一些后台守护进程,有些进程并不是必需的;因此,关闭这些进程可以节省一部分物理内存消耗。以root身份登录系统,运行ntsysv,选中如下进程:

  iptables

network

syslog

random

apmd

xinetd

vsftpd

crond

local

修改完后,重新启动系统。

如此,系统将仅仅启动选中的这些守护进程。

2)      减少终端连接数

系统默认启动6个终端,而实际上只需启动3个即可;以root身份登录系统,运行vi /etc/inittab,修改成如下:

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

#4:2345:respawn:/sbin/mingetty tty4

#5:2345:respawn:/sbin/mingetty tty5

#6:2345:respawn:/sbin/mingetty tty6

如上所述,注释掉456终端。

3)      待续。。。

7.2 网络优化

1)      优化系统套接字缓冲区

net.core.rmem_max=16777216

net.core.wmem_max=16777216

2)      优化TCP接收/发送缓冲区

net.ipv4.tcp_rmem=4096 87380 16777216

net.ipv4.tcp_wmem=4096 65536 16777216

3)      优化网络设备接收队列

net.core.netdev_max_backlog=3000

4)      关闭路由相关功能

net.ipv4.conf.lo.accept_source_route=0

net.ipv4.conf.all.accept_source_route=0

net.ipv4.conf.eth0.accept_source_route=0

net.ipv4.conf.default.accept_source_route=0

 

net.ipv4.conf.lo.accept_redirects=0

net.ipv4.conf.all.accept_redirects=0

net.ipv4.conf.eth0.accept_redirects=0

net.ipv4.conf.default.accept_redirects=0

 

net.ipv4.conf.lo.secure_redirects=0

net.ipv4.conf.all.secure_redirects=0

net.ipv4.conf.eth0.secure_redirects=0

net.ipv4.conf.default.secure_redirects=0

 

net.ipv4.conf.lo.send_redirects=0

net.ipv4.conf.all.send_redirects=0

net.ipv4.conf.eth0.send_redirects=0

net.ipv4.conf.default.send_redirects=0

5)      优化TCP协议栈

打开TCP SYN cookie选项,有助于保护服务器免受SyncFlood攻击。

net.ipv4.tcp_syncookies=1

 

打开TIME-WAIT套接字重用功能,对于存在大量连接的Web服务器非常有效。

net.ipv4.tcp_tw_recyle=1

net.ipv4.tcp_tw_reuse=1

 

减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。

net.ipv4.tcp_fin_timeout=30

 

减少TCP KeepAlive连接侦测的时间,使系统可以处理更多的连接。

net.ipv4.tcp_keepalive_time=1800

 

增加TCP SYN队列长度,使系统可以处理更多的并发连接。

net.ipv4.tcp_max_syn_backlog=8192

6)      待续。。。

 

 

摘自: http://blog.chinaunix.net/u/3959/showart.php?id=92835