------26----张立
apache调优
可调整的内核参数 1、调整下列内核参数解决出现大量的TIME_WAIT net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30 参数说明: 然后执行 /sbin/sysctl -p 让参数生效。 net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭;net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间 2、调整内核参数是apache的keepalive开启占用更少的资源 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_time = 1800 参数说明: tcp_keepalive_time 默认值是7200(2小时) 当keepalive打开的情况下,TCP发送keepalive消息的频率。(由于目前网络***等因素,造成了利用这个进行的***很频繁,曾经也有cu的朋友提到过,说如果2边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间是不是就是2小时,空连接***?tcp_keepalive_time就是预防此情形的.我个人在做nat服务的时候的修改值为1800秒)tcp_keepalive_probes 默认值是9
TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)tcp_keepalive_intvl 默认值为75
探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值) 3、调整内核参数,使之可支持更多的listen队列和syn队列 net.ipv4.tcp_max_syn_backlog =1024 net.core.somaxconn = 128 参数说明: net.ipv4.tcp_max_syn_backlog: syn的消息队列长度,使系统可以处理更多的并发连接 当服务器负载繁重或者是有很多客户端都是超长延时的连接故障,可能会导致half-open连接数量的增加。这对于Web服务器很来讲很平常,尤其有很多拨号客户时.这些half-open连接保存在 backlog connections 队列中.将这个值最少设置为8192 (缺省为1024). 即便是服务器不接收这类连接,设置这个值还能防止受到denial-of-service (syn-flood)的*** net.core.somaxconn: 这个参数会影响到所有AF_INET类型socket的listen队列,在高突发的请求中可能会导致链接超时或者触发重传。 4、调整内核参数增大socket的缓冲区,其中有冲突默认值以tcp自己的为准;最大值冲突时,以net.core.mem_max为准 net.core.wmem_default = 2097152 #108544,系统套接字缓冲区 net.core.rmem_default = 2097152 #108544,系统套接字缓冲区 net.core.rmem_max=16777216 #131071,系统套接字缓冲区 net.core.wmem_max=16777216 #131071,系统套接字缓冲区 net.ipv4.tcp_rmem=4096 87380 16777216 #4096 87380 174760, TCP接收缓冲区 net.ipv4.tcp_wmem=4096 65536 16777216 #4096 16384 131072, TCP发送缓冲区 net.ipv4.tcp_mem = 786432 1048576 1572864 # Out of socket memory。以page为单位基于cpu的考虑
1、因为每个访问都会产生一个进程,会对cpu的load造成负担,因此需要调整apache的最大允许的进程数。apache配置文件的prefork。 2、可以隔离一个cpu处理,将apache进程绑定在单独的cpu上: 先查看隔离自己的第二颗cpu在 /boot/grup/grup.conf 中添加lsolcpus=1;重启之后,将apache绑 定在第二颗cpu上taskset2 /etc/init.d /httpd restart 3、如果cpu的load一直很高,就应该考虑做分发了。基于内存的考虑
1、apache有很多的模块,如果这些模块都加载进来的话,会造成许多内存的浪费,因为有很多不用的模块。所以要去掉不用的模块。 2、apache的进程数,socket套接字的数量,syn队列的长度,listen队列的长度,都会消耗内存,因此这些值的设定,要考虑内存基于I/0的考虑
1、可以将apache服务单独挂在一个独立的磁盘系统上,该磁盘系统可以用多个IO同时读写,比如lvm -i ,或者是raid 0。 2、挂在apache时可以取消写atime的功能。 3、apache的日志功能,可以使之写入独立的日志服务器上,减少对本机的io压力。如果写入本机,可以参考上面的1,写入独立的磁盘系统中。 4、在BI/O层使用deadline算法,减少相应的速度。 5、可以在内存中开辟出独立的空间,当硬盘来使用,以后数据处理时都可以直接写到这里来,增加了io速度。最好将静态页面放在这里。 mkdir -pv /tmp/mm mount -o size=500M -t tmpfs none /tmp/mm 500M 内存到这个目下,以后在对数据处理时,就相当于往内存中写,而这些数据不会因清空缓存而数据丢失,而是相当于做了一个预热(保证数据都在内存中,把内存当作硬盘来用) 其他的一些考虑 1、apache要开启keepalive模式,减少连接的次数。 2、但是每增加一个连接,就会使用一个文件描述符,因此需要增加文件描述符的数量。