apache使用的一些心得

发表于:2007-05-25来源:作者:点击数: 标签:
web服务器用了一段时间,总结了以下一些经验供大家参考 一、够用就好 可以理解为web服务器是一条高速公路,如果出现让每一条车道都足够宽,那么消耗了很多的路面资源,能跑的车就少了。同样web服务器也是这样,不是所有的配置调整的越大越好,一般php+ mysql

web服务器用了一段时间,总结了以下一些经验供大家参考 


一、够用就好 
可以理解为web服务器是一条高速公路,如果出现让每一条车道都足够宽,那么消耗了很多的路面资源,能跑的车就少了。同样web服务器也是这样,不是所有的配置调整的越大越好,一般php+mysql+apache的架构,因为老碰到mysql连接数满的问题,所以把mysql连接数设置的非常高,同时加大mysql cache结果导致负载很高的时候,内存被大量消耗导致服务器频繁死机。 
后来检查了下程序,发现mysql连接数过高是由于程序编写不合理造成了,调整了下,服务器连接数就下来了:很多人可能跟我一样写php数据库查询完以后没有立即关闭数据库的习惯,让进程终止后系统自动回收打开的数据连接,但是如果系统非常慢的时候,执行一个php需要花费非常长是时间,那么导致mysql数据库一直保持着,导致连接数非常高,这样数据库消耗大量的内存,导致系统频繁使用swap,导致系统更加慢,然后恶性循环,最终服务器发生菪机。一个原则:在需要数据库的时候才打开数据库连接,一旦数据读取完成,立即关闭数据库。另外mysql cache的大小也不应该设置太大,应该经常使用show status命令察看下mysql的情况,按照实际需求配置mysql相关的chache 和最大连接数。
检测Mysql的性能可以通过 select benchmark(100000,sql语句) 来检查mysql运行100000那个sql语句需要的时间。
你可以可以通过 SELECT * FROM 表名 PROCEDURE ANALYSE ( )  来分析各个子段类型大小是否设置合适
 

二、研究是web的限制和系统本身的限制 
linux 内核对打开的文件数一些有限制,一般可以通过ulimit -a 察看,/proc目录下有一些相关的最大值的控制,当服务器出现菪机的时候,一定要分析一下/var/log/message目录下的文件,机器菪机前系统报了什么错误。如果机器还能操作你可以使用命令dmesg看看内核当时出现了那些错误
 
如果是内核的限制看下 http://shika.aist-nara.ac.jp/member/atsush-m/doc/kernel_tune.html 重新编译下内核,看这篇文章的时候注意一点这份文档居然没让你改大include/linux/fs.h NR_FILE,需要将NR_FILE设置成INR_OPEN的三倍大小,千万不要小于INR_OPEN,光光打开apache的HARD_SERVER_LIMIT 是不够的。 
检测打开的文件数是否够用可以运行下 more /proc/sys/fs/file-nr ,第一个值是系统已经分配的句柄数(你可以理解为系统打开最大的句柄数),第二个值是系统当前使用句柄数,第三个值是系统允许打开得句柄数,如果第一个值等于第三个值你需要考虑是否需要增加系统打开的句柄数,一方面你可以echo 一个比较大的值到 /proc/sys/fs/file-max,但是内核编译的时候决定了系统最大的文件数,这个值超过内核编译时候设置的内核数就需要重新编译内核来支持。

如果机器有一定的内存,可以把bdflush的值设大,类似这样
echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush
希望长期有效的话可以配放在rc.local下
这个值具体什么意思可以运行 update -d 看下具体的解释

另外如果你怀疑有Dos攻击的话,可以运行
netstat -an | grep -i "服务器ip地址:80" | awk '{print $6}' | sort | uniq -c | sort -n

这个命令会自动统计Tcp连接各个状态的数量,如果SYN_RECV很高的话(我的机器出现过给人建立了4000个SYN_RECV的事情。。。),就不能排除有基于tcp协议的ddos攻击的可能
这样的话,你需要打开tcp_syncookies 
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
如果没有 /proc/sys/net/ipv4/tcp_syncookies说明你的内核不支持syncookies,需要重新编译内核
同时
降低syn重试次数
echo "1" > /proc/sys/net/ipv4/tcp_syn_retries
echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
加大syn_backlog,以保证用户的访问(消耗内存为代价,设的太高。。)
echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog
如果还是不行,那么只能交给相应的硬件防火墙了


如果机器是用来做虚拟主机的话,如果有很多行
<VirtualHost>
。。。。。。
</VirtualHost>
这样的东东的话(我看见过一个人配了1000个不同的域名在一个机器里面,佩服他的耐心)可以考虑使用mod_rewrite方式来做,可以通过增加一个rewrite规则到apache里面,实现域名对应自动对应某个目录

三、不要太迷信一些第三方的加速软件 
相信很多人在服务器负载较高的时候使用mod_limitipconn,mmcache等做服务器的加速,但是mod_limitipconn需要打开ExtendedStatus,反而会导致服务器性能下降,同样由于自身程序写得不够规范也可能导致mmcache这样的php加速软件使用的时候发生一些问题。 
如果条件许可,尽量建立cms系统让动态的叶面以静态的叶面显示 


以下是一个web服务系统检测的程序,5秒检查一次服务器负载,如果loadavg超过50系统自动重起apache


#!/usr/bin/perl 
#pid文件 
$pidfile="/www/apache/logs/httpd.pid"; 
#apache操作文件 
$apachectl="/www/apache/bin/apachectl"; 

$ApacheIsRun=1; 
while (true) { 
$nowLoadavg=CheckLoadavg(); 
print "Now:$nowLoadavg\n"; 
if ($nowLoadavg >50 && $ApacheIsRun==1) { 
#负载高于50 
print "The Server have problem\nStop Webserver\n"; 
while (CheckApacheRun()==0) { 
system("$apachectl stop"); 
sleep(20); 

$ApacheIsRun=0; 

if ($ApacheIsRun==0 || CheckApacheRun()==-1) { 
print "Start Webserver\n"; 
system("$apachectl start"); 
$ApacheIsRun=1; 
sleep(360); 


sleep(5); 


sub CheckApacheRun { 
my $PID=""; 
my $Status=""; 
#是否存在pid 不存在返回-1 
if (-e $pidfile) { 
$PID=`cat $pidfile`; 
$PID=~s/\n//g; 
if ($PID eq "") { #pid文件为空 
return -1; 
} else { 
$Status=`ps -ef|grep httpd|wc -l`; 
if ($Status < 3) {return -1;} else {return 0;} 

} else { 
#pid文件不存在 
return -1; 




sub CheckLoadavg { 
my @avg=split(/\ /,`cat /proc/loadavg`); 
return $avg[0]; 
}


我msn:dowell2004@hotmail.com,欢迎大家跟我这个三脚猫通过msn交流linux,apache学习心得

 HonestQiao 回复于:2005-01-25 12:10:53
很好,不过可不可以解释一下子:
如果uptime超过50系统自动重起服务器 


我在努力让我的,uptime超过1000天的啊

 dowell3000 回复于:2005-01-25 12:33:45
这里说的uptime不是服务器运行时间,可能说uptime不是很合适,你在linux 输入命令uptime,系统会提示系统的德当前的负载情况,他显示服务器是否是繁忙,一般uptime是1以下的话,说明服务器非常正常,如果出现大量的iowait或者同时大量的http情况,他再输入uptime看下,可能100或者可能500以上。

一般服务器到50就开始明显缓慢,可能是web服务器程序设计不合理导致的,导致一些内存泄漏的发生,系统大量使用swap.

这个时候最好能够重起动下服务器

 dowell3000 回复于:2005-01-25 12:38:30
不应该叫uptime 应该是 load average 


老是用命令uptime查load average,所以。。。

 wangrujun 回复于:2005-02-03 16:06:41
uptime要超50呀。你的机器真棒。
一般超10就死掉了。

 skylove 回复于:2005-02-04 04:07:04
一则误人子弟的文章

不解??那让我来说说看。。。

1。mod_limitipconn 不是用来加速的,其本身就是为了限制同一个ip的发起数,如果粗浅地说,这个功能的作用和我们机器上的firewall类似。他本身是减慢了服务器的速度,但是其额外的好处是能阻止来自某一个ip的并发申请过大,比如一个用户开了100个进程来下文件这类情形的发生。因此,这个模块不是为了加速的,而是为了安全和均衡大多数人的利益;

2。关于php加速的——这类php加速的原理大致如此——把获得申请页面暂时保存到xx地方,在一定时间内(比如3秒内)获得完全一样的申请请求时,就直接使用缓存页面,这个可以大量减少php和数据库连接,生成页面的时间,而且不会有任何不利影响——至于说php编写有错,那么只会是把一个错误的文件缓存而已,并不会导致更为严重的后果;而且现在不少php程序已经开始主动地使用这类缓冲原理了,比如phpwind论坛就是一个例子。

3。关于syn的攻击,事实上用syn-cookie的作用不是太明显,用apache的一个专门防dos的模块作用更好一些,相反平时用syn-cookie会导致服务器的请求变慢,最常用的做法不是syn-cookie,linux内核里有个参数是调整tcp/ip连接在time_wait2时候的等待值的,那个更有作用用,具体各位可以去查一下。(已知freebsd和openbsd也有,用sysctl可以设置那个参数)

4。别人使用rewrite或者单独设置虚拟主机是根据别人的环境。比如我在设置虚拟主机的时候,同时需要alisa www.aa.com clearcase/" target="_blank" >cc.aa.com 到aa.com这个名字去呢??或者我要为每个用户单独地做流量统计分析呢,流量限制呢,我各个用户的要按照不同用户身份跑呢???用rewrite或者虚拟主机配置,是依据需要而来,莫名嘲笑别人1000个虚拟主机设置的才是笨蛋——你以为那真是那人手工配置的?那是程序自动生成的!比如cpanel这些成熟的虚拟主机程序(国内好象用的不多,国外很多)。。

5。apache建立连接的开销,分析比使用squid反向代理大,所以如果负载比较重,即使是静态html也是推荐用squid反向代理后更好。

6。负载大于50%的时候,正确的做法是检查哪个程序消耗了cpu最为厉害,而不是看到apache在用着就重新启动apache 。作者给的程序在真正实用环境里是没用的——比如我正在服务器上tar 数据文件,结果cpu过了50%,然后那个程序是自动运行,检查到此时apache在开着,就不断地重新启动apache,这样有用???正确的做法是检查了系统负载,进而应该检查此时apache的负载(perl的负载,mysql的负载)

7。我曾经维护过一台任务很重的服务器,其cpu利用率超过60%,其中apache 5%,mysql 10%,其他服务程序若干,结果服务器依然运作非常正常——cpu和内存一样,买来就是用的,放着99%的空闲你还不若去买个p2 366来用。时常cpu只是用到1%,没必要沾沾自喜,只能说明你没充分把机器利用起来,浪费了大好资源而已。

貌似有道理,其实仔细一步步分析下来什么也不是的文章。。。居然还是精华。。。

 peng 回复于:2005-02-05 15:24:19
呵呵。。。

有意思,不懂linux,系统方面的不好说,但是apache方面的,楼主还是应该多交流一下。

 acaluis 回复于:2005-02-07 09:23:33
难道还有人犯这样的错误"忘记关闭数据库连接"???????????????????
还是不要在这里提这些吧,这样的错误属于刚入门的程序员犯的.

 dowell3000 回复于:2005-03-03 10:52:51
回:skylove 

1。mod_limitipconn 是不是用来加速的,但是很多的服务器维护的人员往往在服务器负载较高时候选择了增加这个模块试图降低服务器的负载。所以我写这份东西的时候只是提个醒。

2。php加速的软件由于依赖于php版本之上,php版本的更新速度往往比加速软件的更新速度要快,如果你用过低版本的zend optimizer在php4.3.10上肯定存在问题;Performance Suite3.6.0里面带的zend optimizer是非常老的,相信你如果在php4.3.10上面用过的话,相信你zend Performance Suite的管理界面都打不来,直接500错误了。同样mmcache我使用了大概3个月时间,发现经常会出现一些古怪的问题,关闭了mmcache以后一切正常,中间那个环节出错了我还需要仔细查询下。另外象zend accelerator这样的软件需要使用共享内存,程序如果不合理的话,很容易造成共享内存消耗殆尽。

3。关于syn攻击,使用syn-cookie不能完全解决问题,你说的time_wait2可以探讨下,不过在proc里面没找到相应的值,能够更改的是tcp_syn_retries的次数,retry一次间隔30秒,如果对方攻击的机器效率没有问题的话,在30秒内可以建立足够的SYN_RECV来消耗你的内存。

4。rewrite只是一个解决问题的方式之一,当然有其他特殊的需要考虑用其他方式

5。squid不做评论

6。特别申明下 cpu利用率跟load average完全是两个概念,cpu过利用率过50%是很正常的,但是可能load average的值只有1多点;load average是一个系统处理繁忙程序的值,cpu利用率会呼高呼下,但load average是一个相对平稳的值。我很难相信linux在load average 持续50以上能正常工作,继续增长带来的结果肯定意味着菪机。你如果tar一堆文件都能导致load average会倒50的话,可以检查下你的系统,我在机器有着4000个联结的时候,照样编译内核都不会超过50。

7。我很想问下你维护很重的机器MaxClient开到多少,如果超过6000的话留个msn我们探讨下,这个一值是我比较困挠的问题

 dowell3000 回复于:2005-03-03 11:00:33
to acaluis
因为php有一个很好的机制在程序退出以后自动关闭数据库联结,所以很多程序包括很多软件都没有在使用完数据库以后立即关闭数据库联结的习惯。或者在php执行完成前加一个mysql_close(). 对于负载不高的系统这个问题不大,不需要大多的关于,因为php执行完成以后自动会回收资源。

但是如果机器负载很高,php执行的速度变慢以后,没有及时关闭数据库的后果肯定是大量的数据库联结保持在那里。相信很多你访问很多php写的网站(包括一些大型网站)经常出现超过系统最大联结数的问题

 skylove 回复于:2005-03-03 19:49:53
回楼主:
1.既然不是加速的,为什么原文要写作加速的?是否有误导之嫌??

2.加速软件支持4.3.10版本的php的,我在使用中一切正常,至于您谈到的问题——恐怕真的是您的php写作上存在问题??

3.对待ddos,没有谁敢说自己有能力对付,syncookie也一样

4.既然你转而说是解决问题的方式之一,为何在原文中以嘲讽的语气评价1000个虚拟主机者?

5.squid的加速至少减少了apache申请到html(静态页面)时候进行权限判断,嵌入资源权限判断等消耗;

6.4000个连接与tar无关,如果您不清楚tar程序可以用做backup作用,那么此问题可以原谅

7.我没见过人用一台apache带真正超过3000并发请求的做法,既然您提到的请求是6000,那么想来您实现过最大连接5000时候的情形? 我不认为这个值可以在一台机器上做到。

最后一问:如果按照你的说法,你是在写作此帖以前就明白了那些道理的,那么为什么写出“xxx加速模块”这样的原文,您是对自己的文字不负责,还是对自己在cu的id不负责,或者是对cu的各位读者们觉得不需要负责??

 dowell3000 回复于:2005-03-03 21:57:28
to skylove : 我有一个服务器高峰的时候是6200个连接,我的msn名字后面加上“apache能开4096个连接吗”,然后到“apache能开5200个连接吗?”,每增加连接数而没有菪机都觉得是很大的成就感。相信在服务器非常高的连接的时候每改进点小东西都能使服务器更加稳定。php程序也因为效率的问题使用了很多共享内存,以减少数据库的操作,同时linux的内核参数改了很多,到6400以后还是不行,我希望那天能够到10240.....


关于Zend Optimizer 的版本问题 http://cn2.php.net/downloads.php 这个地址上的红色部分:

Note: Due to an incompatibility between earlier versions of Zend Optimizer and PHP 4.3.10, it's recommended to upgrade to the latest version. 


讨论不错,但是你的口气。。 呵呵。另外我觉得你没看明白我的回复

因为这个帖子不少人加了我的msn,也包括刚刚接触linux的,哪怕别人在msn问我非常低级的问题我都会耐心回答的,同样论坛最重要的是良好的气氛,不是扣字眼,不管写的有没有错大家一块来讨论,如果自己觉得自己高高在上的话(我觉得你就文字来讨论文字了,不是讨论里面的内容 :) )...... 没错在cu我是新人,但是对于apache我从98年玩到现在,维护的都是大型的网站,如果觉得有问题有一个良好的口气来讨论,而不是。。。

 skylove 回复于:2005-03-04 23:16:56
到底是你在玩字眼还是我在玩??把限制ip写做是加速的是你还是我?? 这个是概念错误还是扣字眼???

如果说这样是扣字眼,我说:我操你妈的; 然后补一帖子说明其实这句话是我表达对你衷心的赞美你会不会欣然接受??

我也是就文发言,我也说了,是原文许多地方有问题,因此不该被标作精华,并没有说怀疑作者的实力云云.

至于98年开始用电脑么? 不好意思,我比你早很多,大概是小学4年级开始用的吧,第一份工作是在一个军工单位,维护的是vms.用得早不代表什么的.

摆经历没意思,我也是就事论事地讨论.至于你非要投换概念地说xx加速模块不支持4.3.10--别人都写了不支持,你为什么还用? 不是有支持4.3.10的加速模块可供选择么??

最后,我依然定性你的首帖是误导了菜鸟,至于你觉得是不是,其他新手觉得是不是,我无所谓.此帖我不再回复,仔细想想,其他人的技术高低关我屁事,既然cu那么多高手都可以看到此帖而漠然之,我何必出头? 就等楼主欣然之,菜鸟鼓舞之,cu帖子兴旺之...都高兴...甚好,甚好

 dowell3000 回复于:2005-03-05 08:35:00
to skylove :对于阁下的言论,敬仰敬仰

 zhake 回复于:2005-03-05 14:33:11
看到两位的讨论,实在是精彩,我想如果CU是都是像你们这样的人,那么我们这些来鸟,很快就会变以高手的,
在此,我仅代表所有的来鸟谢谢你们两位
另外,问两位一个问题,我想早请一个www.123.com这种的域名,需动态解悉,(因为我的是拔号宽带)给别人提供www.ftp服务,别人从我这得到的域名是user.123.com这种的,请问能否实现,如何实现?

 colddawn 回复于:2005-03-05 21:03:11
即使搂主帖子本身不足以成为精华,二位讨论也足够把这帖顶为精华了。
顺便说说个人看法,
apache在多于5000连接以上的应用个人觉得基本就是在拼资源了,apache本身应该还不足以达到极限,但这时cpu,内存各种资源应该开始告急了,再加上网络连接造成的负载,如果不算动态页面和数据库应用,只是静态页面的话,突破5000应该很轻松,但是如果使用了动态页面和数据库,相信web程序设计的好坏会起到决定性作用。这个时候从apache和系统底层做优化效果应该不会理想了,可能顶层应用修改一个php语句起到的效果会比你绞尽脑汁优化底层好的多。到达这种应用层次估计可以开始考虑升级硬件和作负载均衡了。
对于楼主所说的finwait2的内核参数,不好意思,本人一直没有找到,希望指点一二。并且对于synflood,看到论坛上不少人说ipconnlimit模块效果不错,而本人一直使用iptables限制并发,可以说synflood一来,基本没什么效果,,想想看底层的包过滤不会比应用层的并发限制还弱吧。至于syncookie对于流量小效果不错,稍微大一点点就彻底歇菜,可以说确实没什么用。


另外对于楼主所说的vhost和urlrewrite跑1000虚拟主机的问题,不好意思,本人的服务器也是跑虚拟主机,虽然没有1000那么恐怖的数量,至少上百个负载尚可的站点也有了,我不觉得使用rewrite效率会更好。

 zhanglianxiao 回复于:2005-03-07 09:35:10
谢谢两位的争论,对于我们菜鸟来说帮助很大。希望有更多的人向二位一样。谢谢,继续!

 ruochen 回复于:2005-03-07 11:55:45
这样技术上的讨论真的很精彩,
但是不要转化为人生攻击,把讨论的范围限定在"技术"上,
去过很多的BBS&Forum,上面的这句话很重要.

 peng 回复于:2005-03-07 16:15:31
[quote:d952dc9d34="colddawn"]即使搂主帖子本身不足以成为精华,二位讨论也足够把这帖顶为精华了。
顺便说说个人看法,
apache在多于5000连接以上的应用个人觉得基本就是在拼资源了,apache本身应该还不足以达到极限,但这时cpu,内存各种资源?.........[/quote:d952dc9d34]

连接上5000,其实内存和cpu等已经没有意义了。

主要是看主板的pci总线的宽度了。。

就像汽车一样,一个1。8排量的桑塔纳,你再给他加大轮宽,加好油,他也不能跑300公里/小时,因为本身决定的。。

软件的优化,是一定范围的,同样硬件的合理配置,也是一定范围的。
再想提高,就要换机器了。。呵呵

pc server和unix服务器最大的差距就是硬件的构架。

 dowell3000 回复于:2005-03-18 18:20:18
TO zhake 
我原先做过类似的东西,如果你对perl熟悉的话,可以修改Net-FTPServer-1.120(http://search.cpan.org/~rwmj/Net-FTPServer-1.120/)的程序

硬盘可以建立 /homepage/account 这样的,二级域名就是用mod_rewrite来实现

设计一个数据库,可以包括,用户账号,用户密码,用户目录地址,用户到期时间,用户空间大小,用户当前状态

所有的的空间的账号一律使用nobody,修改那个程序,系统登录以后到数据库判断用户是否账号密码都正确,然后 更改用户的uid为nobody,然后做chroot 到 /homepage/account ,Net-FTPServer这个软件目前还不支持quota,有两种方法可以实现,效率上考虑的话可以开个监测的程序使用du 命令回来参数,发现用户超过实际大小的就更改数据库的用户状态,就不允许用户上传文件,如果实时判断那么可以先调用du命令,保存当前空间大小,然后再chroot,用户每次上传文件都要更新当前空间大小的变量

 miFor 回复于:2005-03-18 23:07:08
load average是每秒钟CPU等待运行的进程个数,一般是cpu*3以上就是比较重的负载了
vmstat 中第一列的值

我不认为大型的网站要通过这种方式来让服务器在重负载上运行 ,这样是很危险的,如果down机的话,会丢失多少流量呢。

您说的并发6400个连接是指下面的?
[root@xxxxx root]# netstat -na |grep -c :80
8143

此时我的apache进程数为162.
[xxxx@xxxx xxx]$ netstat -na | grep -c ":80"
10166
此时apache的进程数为202

没感觉我的机器负载很高。

 skylove 回复于:2005-03-19 13:07:18
倒...不可能用这么傻的算法吧...

我的数据是用

ps -ef | grep http | grep apache | wc -l
 来算的... 所以才纳闷楼主一台机器怎么能做到6k以上的...

 dowell3000 回复于:2005-03-19 15:43:23
TO miFor      

是apache的进程数,现在服务器一天200W pv

因为是个人网站,所以不大可能有很多台服务器,最近一直在不停的优化优化,现在最高到5800

 dowell3000 回复于:2005-03-19 16:04:56
贴个网站1tong的统计

时间 总访问量 唯一IP访问量 比例 
8:00-9:00 48335 4544 2755  4.5% 
9:00-10:00 77087 6346 3896  7.2% 
10:00-11:00 110086 8168 5152  10.3% 
11:00-12:00 120884 9537 6615  11.3% 
12:00-13:00 134717 10473 7410  12.6% 
13:00-14:00 152914 10840 7261  14.3% 
14:00-15:00 156885 10647 6624  14.7% 
15:00-16:00 168142 10541 6779  15.7%

服务器高峰的时候是晚上 19:00-20:00 那个时候更高
所有的服务就用了一个服务器,大部分页面都调用php作为访问量计数

 miFor 回复于:2005-03-20 00:17:24
我用四台机器,一天1000W+的流量,Apache也就500多算高的了。
一个httpd不是只能处理一个连接

 ttvast 回复于:2005-04-08 01:01:18
一天200W pv 还是200w hits?
如果是200W hits, 也不过1秒23个连接.
如果你的机器同时跑5000个httpd进程?鬼才相信.光上下文切换,机器就差不多占满了.
1个HTTPD 的确可以支持很多个连接,但是同一个时刻只有1个连接.
要看CPU平均利用率我是看SAR的,如果看 LOAD AVG 的确是CPU*3以上就不行了,我想不通竟然有人跑50,真是强.
无论是iptable限制并发还是用tcp wait2等时间参数调整,都可能会影响正常的应用.目前只有SYNCOOKIE这种算法可以准确的识别出SYNFLOOD攻击与正常数据,就是说当你被攻击的时候,你的系统还可以为真正的用户提供服务,你们说SYNCOOKIE性能不好怎么也不明白,SYNCOOKIE不消耗任何内核资源,CPU资源仅仅是1个SYN计算一个COOKIE值,现在的服务器怎么也不会1秒种算个几万个.你们的推论究竟是怎么来的呢?
在LINUX下.象HTTPD这样用多进程来处理SOCKET SERVER的,性能是很差的,
高速的服务器设计都是要用EPOLL来做的.
看你的服务器性能很简单
ab -c 1000 -n 10000 http://localhost/ 看看结果,

原文转自:http://www.ltesting.net