针对Web服务器总体优化

发表于:2007-05-25来源:作者:点击数: 标签:
一、文件系统 在fstab里加入noatime,如 #cat/etc/fstab /dev/sda1/homeext3noatime,defaults12 reboot或者重新mount生效 二、Tcp优化 在/etc/sysctl.conf里加入 net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=3 net.ipv4.tcp_syncookies=1#启用syn

一、文件系统
在fstab里加入noatime,如
#cat /etc/fstab
/dev/sda1          /home                  ext3    noatime,defaults        1 2
reboot或者重新mount生效
二、Tcp优化
在/etc/sysctl.conf里加入
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 3
net.ipv4.tcp_syncookies = 1 #启用syncookies
        net.ipv4.tcp_max_syn_backlog = 8192 #定义backlog队列容纳的最大半连接数
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
[color=blue:b6bef7e40f]老实说,对于sysctl.conf究竟能不能用起来还真不知道,因为我是没用起来,虽然内核里面是支持的 = =b[/color:b6bef7e40f]
三、虚拟内存优化
/etc/sysctl.conf
        vm.lower_zone_protection = 100
四、I/O调度器
在grub.conf的相应启动选项里加入elevator=deadline,如:
kernel /vmlinuz-2.6.6 ro root=/dev/sda6 elevator=deadline
这里用了Deadline的I/O调度器,它比系统默认的AnticipatoryI/O调度器更为小巧,在数据吞吐量非常大的数据库系统中表现得更有优势。
五、内核源代码参数修改
修改/usr/src/linux/include/linux/posix_types.h
#define __FD_SETSIZE 1024  65536 
设置fd_set支持的最大数量
 
修改/usr/src/linux/include/linux/fs.h
#define INR_OPEN 1024  65536
#define NR_FILE 8192  65536
#define NR_RESERVED_FILES 10  128
设置最大打开文件数量(TCP连接数量)

修改/usr/src/linux/include/net/tcp.h
#define TCP_TIMEWAIT_LEN (60*HZ)  1*HZ
#define TCP_SYNACK_RETRIES  5  3 
设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上
也是减少重试时间

make menuconfig中,去掉没用的选项,打开以下选项的开关:
High Memory Support (支持4GB以上内存)
Symmetric multi-processing support (支持多CPU)
TCP syncookie support (可以防DOS)
设置文件打开数等的其他方法(好处就是可以不重新编译内核)
在 /etc/init.d/sshd里加入(统一加在. /etc/rc.d/init.d/functions行后面)
[code:1:b6bef7e40f]ulimit -n 65535 >/dev/null 2>&1
ulimit -u 16384 >/dev/null 2>&1[/code:1:b6bef7e40f]
重起sshd:nohup /etc/init.d/sshd restart &
BTW:其实limits.conf不好,因为他需要root su - user遗传给普通用户
如果直接远程登陆是没效果的
六、apache
1、安装:采用worker线程工作模式
[code:1:b6bef7e40f]./configure --prefix=/prefix 
--enable-mods-shared=all 
--enable-deflate 
--with-mpm=worker[/code:1:b6bef7e40f][color=blue:b6bef7e40f]chmod +s /prefix/bin/httpd [/color:b6bef7e40f]#允许普通用户也可以启动apache
2、配置:httpd.conf
[code:1:b6bef7e40f]Timeout 60
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout   5

StartServers         3
MaxClients         3200   #支持3200个客户端哦
ServerLimit        32
MinSpareThreads     50
MaxSpareThreads     250
ThreadLimit   200
ThreadsPerChild     100
MaxRequestsPerChild 0

#上面的几个参数对机器要求比较高,如果是比较差的机器,每台机1000个连接最多了,你可能要重新设置参数,我的机器是DELL 2850

UseCanonicalName Off
HostnameLookups Off
ServerSignature Off[/code:1:b6bef7e40f]

 wolfop 回复于:2004-12-10 16:28:23
用来好多激进的方法啊,apache2的work方式现在稳定了吗?

 killua 回复于:2004-12-11 13:08:44
[quote:0eaaf1545e="wolfop"]用来好多激进的方法啊,apache2的work方式现在稳定了吗?[/quote:0eaaf1545e]

我是在前两个月把apache2的工作模式换成worker方式的,都没有问题哦
而且经过我这样升级后,性能提升25%左右,真的,我测试过的

帖子上有个东东漏掉了,要apache支持3200个客户端,默认最大支持1024(64*16)个客户端,所以必须修改apache的源代码树下的server/mpm/worker/worker.c
把 #define DEFAULT_THREAD_LIMIT 64  --> 128 #每个子进程中包含的线程数
   #define DEFAULT_SERVER_LIMIT 16  -->  32  #最大的子进程总数

注意,不要把这两个值设得太高,超过系统的处理能力,那就事与愿违了
现在我的机子能承受每天350W的访问量,高峰期的load最多到2左右

Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients

大家可以根据自己的实际情况调试一下的。祝大家愉快。   :)

 xiaodi553 回复于:2004-12-11 17:25:19
在linux下配置www服务起一定要用到apache吗?

 killua 回复于:2004-12-16 09:03:53
[quote:952c26dea0="xiaodi553"]在linux下配置www服务起一定要用到apache吗?[/quote:952c26dea0]

说实话,除了apache,其他在下还没接触过 = =b

 HonestQiao 回复于:2004-12-27 12:59:45
本文甚好,不过,希望加上所针对的操作系统的说明哦。

 killua 回复于:2004-12-27 13:10:50
系统环境是 Red Hat Enterprise Linux AS release 3 (Taroon Update 3)
apache2版本是 2.0.52
针对[color=blue:8d14730499]apache2的多个空格符号处理拒绝服务漏洞[/color:8d14730499]的那个[color=red:8d14730499]2.0.53-dev[/color:8d14730499]的版本有谁知道哪里下载吗?
难道要到cvs里面checkout出来?

 QQ 回复于:2004-12-28 16:35:29
真厉害,学习下

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