总结一下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设为可重用,会导致什么问题吗?
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设为可重用,会导致什么问题吗?
相关文章推荐
- LINUX性能调优方法总结
- Linux 性能调优,网络开发,系统诊断常用命令总结
- LINUX性能调优方法总结
- LINUX调优方法总结
- Perf -- Linux下的系统性能调优工具
- 系统性能调优吐血总结分享:转载
- Linux 性能监测工具总结
- GC浅析之三-性能调优经验总结
- Linux桌面操作系统性能分析学习总结
- 性能测试调优总结与分享
- 盘点linux系统中的12条性能调优命令。
- linux nfs mysql struts hibernate spring开发 运维 调优 总结
- 性能测试新手常犯错误总结(七):你需要调优么
- 使用initramfs启动Linux成功,再次总结一下
- linux性能调优工具perf
- LINUX tcp/ip性能调优
- Linux性能监控笔记(五)总结
- 【运维小分享】linux性能分析及调优
- 【HBase调优】Hbase万亿级存储性能优化总结
- linux 性能监控分析以及调优(free , uptime)