您的位置:首页 > 运维架构 > Linux

总结一下linux性能调优

2012-12-17 17:25 519 查看
一.调整linux最大打开文件数

1.操作系统限制可以打开的最大文件数

cat /proc/sys/fs/file-max

2.查看当前用户打开文件数

ulimit -a

ulimit -Hn
//硬限制

ulimit -Sn
//软限制

3.设置最大打开文件数

临时设置:ulimit -n 10240 //设置为10240,可以把命令加入到用户的profile文件中,保证用户登陆生效

用户级设置:

vi /etc/security/limits.conf

添加如下行(第一列为用户名,*号代码对所有用户生效):

user soft nofile 4096

user hard nofile 10240

说明:要使limits.conf生效,必须确保pam_limits.so文件被加入到启动文件中

查看/etc/pam.d/login文件是否有记录:session required /lib/security/pam_limits.so

系统级设置:

vi /etc/sysctl.conf

增加 fs.file-max=10240,运行/sbin/sysctl -p立即生效

二.网络参数调优

1.查看网络连接的状态,各种状态连接的数量

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

2.连接状态 CLOSE_WAIT, TIME_WAIT, FIN_WAIT_2, FIN_WAIT_1, CLOSING (主要注意前3个)

TCP连接的关闭,需要4个packet

1.client --> FIN --> server //client发送完处于状态FIN_WAIT_1

2.server --> ACK --> client//server收到FIN发送ACK,处于CLOSE_WAIT状态,client收到ack,状态为FIN_WAIT_2

3.server --> FIN --> client //server继续发送FIN到client,server状态置为last_ack状态

4.client --> ACK --> server//client置为TIME_WAIT(主动关闭的最终状态),这个状态会持续2MSL(max segment lifetime)时间,然后关闭.

当client发送FIN时同时收到的也是FIN(没收到ACK),则client状态置为CLOSING,再收到ACK时置为TIME_WAIT

3.TIME_WAIT--的状态是TCP设计者认为的关闭状态,是TCP的癌症!TCP设计者建议MSL的值是120秒,具体实现会有所不同(暂时还不知道redhat中MSL值在哪查看或者设置).参考RFC 793

4.CLOSE_WAIT--的状态是由于server在发送对客户端的FIN的回复ACK,还没有发送FIN到client端时的状态,正常情况下,如果

Server正常发送FIN状态之后,会处于LAST_ACK的状态(多久会释放资源?).如果server端(被动关闭方)出现大量的close_wait状态,

则应该是在发送FIN之前,出了某些问题导致没有发送FIN,连接就处于CLOSE_WAIT状态!如果server出现大量的close_wait状态的连接,

首先应该检查一下代码,是否正确地关闭了网络连接,一般是程序的问题!

5.参数调优

针对大量的CLOSE_WAIT状态的连接:

前面说过大量的CLOSE_WAIT一般是程序没有正确关闭网络连接造成,TCP对这种连接会使用keepalive timer来处理(TCP协议没有规定,有些TCP实现使用,参考[计算机网络 第4版 清华大学出版社 472页])

TCP在等待tcp_keepalive_time(redhat中默认为7200s,即2小时,类似参数不作说明,均为redhat中网络参数)时间后,会发起keep alive的探测,探测次数由tcp_keepalive_probes(默认9)设定,

探测间隔时间由tcp_keepalive_intvl(默认75)指定.即对于不活动的连接,在等7200s+75s*9=2小时11分15秒之后,TCP会终止连接!一般的WEB SERVER可以调低这几个参数的值

如: net.ipv4.tcp_keepalive_time = 1200

net.ipv4.tcp_keepalive_intvl=15

net.ipv4.tcp_keepalive_probes=5

redhat下添加以上设置到/etc/sysctl.conf执行/sbin/sysctl -p生效

针对大量TIME_WAIT状态的连接

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_max_tw_buckets = 15000 //表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息.默认为180000.一般来说TIME_WAIT的连接占用资源少,不会对系统造成很大影响

另外还有一个参数

net.ipv4.tcp_fin_timeout = 30 //表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间.

几个问题:1. 请描述TCP连接关闭的过程!

2. TIME_WAIT状态的作用,为什么要有TIME_WAIT状态

3. net.ipv4.tcp_tw_reuse = 1 //将TIME_WAIT状态的SOCKETS设为可重用,会导致什么问题吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: