linux web服务器优化

作者: jaclon 分类: Linux, PHP 发布时间: 2012-09-19 17:14 ė 6没有评论

1.服务器同时打开文件数、最大用户进程数
使用ulimit -a 可以查看当前系统的所有限制值
# ulimit -a

解决方法:

使用 ulimit –n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)

有如下三种修改方式:

1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最后增加:

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果

# ulimit -n

65535

# ulimit -u

65535

备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制

soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。 soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。

2.发现存在大量 TIME_WAIT 状态的连接
问题描述: 发现大量 time_wait 状态的连接 , 有时甚至达到 7000 以上

netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”t”,state[key]}’

查找较多 time_wait 连接

netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20

发现是 DB 服务器的 mysql 和 memcache 的未释放导致。

解决方法: 对于大量使用 tcp 连接的应用来说,也需要对 /etc/sysctl.conf 中的参数进行相应优化 :

vim /etc/sysctl.conf

编辑文件,加入以下内容:

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 让参数生效。

优化后:

发现大量的 TIME_WAIT 已不存在, mysql 进程的占用率很快就降下来的。

3.ip_conntrack:tablefull,droppingpacket问题
IP_conntrack表示连接跟踪数据库(conntrack database),代表NAT机器跟踪连接的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip- sysctl函数设置。每一个跟踪连接表会占用350字节的内核存储空间,时间一长就会把默认的空间填满,那么默认空间时多少?我以redhat为例在内存为64MB的机器上时4096,内存为128MB是 8192,内存为256MB是16376,那末就能在/proc/sys/net/ipv4/ip_conntrack_max里查看、设置。
例如:增加到81920,可以用以下命令:
echo “81920” > /proc/sys/net/ipv4/ip_conntrack_max

那样设置是不会保存的,要重启后保存可以在/etc/sysctl.conf中加:
net.ipv4.ip_conntract_max =81920
按照此方法改变后一切正常,要是在满了可以加大其值.

本文出自 肥蕉博客@IT技术,热门话题,生活随笔,美图欣赏,转载时请注明出处及相应链接。

本文永久链接: http://www.bananawolf.com/html/2012/09/840.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

Ɣ回顶部