速成網(wǎng)站-百度怎么推廣自己的視頻
Linux操作系統(tǒng)性能優(yōu)化
- 1. TCP連接出現(xiàn)大量ESTABLISHED連接解決方法
1. TCP連接出現(xiàn)大量ESTABLISHED連接解決方法
?? TCP協(xié)議規(guī)定,對于已經(jīng)建立的連接,網(wǎng)絡(luò)雙方要進(jìn)行四次握手才能成功斷開連接,如果缺少了其中某個步驟,將會使連接處于假死狀態(tài),連接本身占用的資源不 會被釋放。網(wǎng)絡(luò)服務(wù)器程序要同時管理大量連接,所以很有必要保證無用連接完全斷開,否則大量僵死的連接會浪費(fèi)許多服務(wù)器資源。在眾多TCP狀態(tài)中,最值得 注意的狀態(tài)有兩個:CLOSE_WAIT
和TIME_WAIT
。
?? ● CLOSE_WAIT
?? 對方主動關(guān)閉連接或者網(wǎng)絡(luò)異常導(dǎo)致連接中斷,這時我方的狀態(tài)會變成CLOSE_WAIT 此時我方要調(diào)用close()來使得連接正確關(guān)閉
?? ● TIME_WAIT
?? 我方主動調(diào)用close()斷開連接,收到對方確認(rèn)后狀態(tài)變?yōu)門IME_WAIT。TCP協(xié)議規(guī)定TIME_WAIT狀態(tài)會一直持續(xù)2MSL(即兩倍的分 段最大生存期),以此來確保舊的連接狀態(tài)不會對新連接產(chǎn)生影響。處于TIME_WAIT狀態(tài)的連接占用的資源不會被內(nèi)核釋放,所以作為服務(wù)器,在可能的情 況下,盡量不要主動斷開連接,以減少TIME_WAIT狀態(tài)造成的資源浪費(fèi)。
?? 查看網(wǎng)絡(luò)連接數(shù):
# netstat -an |grep xx |wc -l 查看某個/特定ip的連接數(shù)
# netstat -an |grep TIME_WAIT|wc -l 查看連接數(shù)等待time_wait狀態(tài)連接數(shù)
# netstat -an |grep ESTABLISHED |wc -l 查看建立穩(wěn)定連接數(shù)量
?? 查看不同狀態(tài)的連接數(shù)數(shù)量:
# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'LISTEN 8ESTABLISHED 2400FIN_WAIT1 2TIME_WAIT 6000
?? 查看每個IP跟服務(wù)器建立的連接數(shù):
# netstat -nat|grep "tcp"|awk ' {print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn444 10.71.177.123102 100.11.71.123101 49.14.55.132
?? 查看每個IP建立的ESTABLISHED/TIME_OUT狀態(tài)的連接數(shù):
# netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn24 103.56.195.1719 45.116.147.18618 103.56.195.1817 45.116.147.178
?? 怎么解決大量TIME_WAIT?
?? 通過調(diào)整內(nèi)核參數(shù):
vim /etc/sysctl.conf
#編輯文件,加入以下內(nèi)容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
?? 然后執(zhí)行/sbin/sysctl -p
讓參數(shù)生效
?? net.ipv4.tcp_syncookies = 1
:表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN,默認(rèn)為0,表示關(guān)閉;
?? net.ipv4.tcp_tw_reuse = 1
:表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;
?? net.ipv4.tcp_tw_recycle = 1
:表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉;
?? net.ipv4.tcp_fin_timeout=30
:修改系統(tǒng)默認(rèn)的 TIMEOUT 時間。
?? 如果以上配置調(diào)優(yōu)后性能還不理想,可繼續(xù)修改一下配置:
vi /etc/sysctl.confnet.ipv4.tcp_keepalive_time = 1200
# 表示當(dāng)keepalive起用的時候,TCP發(fā)送keepalive消息的頻度。缺省是2小時,改為20分鐘。net.ipv4.ip_local_port_range = 1024 65000
# 表示用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。net.ipv4.tcp_max_syn_backlog = 8192
# 表示SYN隊列的長度,默認(rèn)為1024,加大隊列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。net.ipv4.tcp_max_tw_buckets = 5000
# 表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。
# 默認(rèn)為180000,改為5000。對于Apache、Nginx等服務(wù)器,上幾行的參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量。