前提
要優化,就要先了解當前系統的網絡連接狀態情況,如下命令可以實現
netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'
結果如下,此為本地虛擬機實驗所有結果不多,生產或外網的服務器會更多分類信息:
狀態分類:
CLOSED : 無活動或正在進行的連接
LISTEN : 服務器正在等待進入呼叫
SYN_RECV : 一個連接請求已經到達,等待確認
ESTABLISHED : 正常數據傳輸狀態
FIN_WAIT1 : 應用返回已經完成
FIN_WAIT2 : 另一邊已同意釋放
ITMED_WAIT : 等待所有分組死掉
CLOSING : 兩邊嘗試同時關閉
TIME_WAIT : 另一邊已初始化一個釋放,
此狀態的會產生很多,進而導致服務器掛掉LAST_ACK : 等待所有分組死掉
優化配置都是在 /etc/sysctl.conf 文件中添加或修改
做為Squid服務器優化 TIME_WAIT 狀態的方案
net.ipv4.tcp_fin_timeout =30
# 本端關閉鏈接時,決定FIN_WAIT2狀態時間
net.ipv4.tcp_keeplive_time=1200
# 啟用Keepalived時,發送消息的頻度
net.ipv4.tcp_syncookies=1
# 防止SYN攻擊
net.ipv4.tcp_tw_reuse=1
# TIME_WAIT 鏈接重用
net.ipv4.tcp_tw_recycle=1
# TIME_WAIT 鏈接快速回收
net.ipv4.ip_local_port_range=10000 65000
# 系統向外向外鏈接的端口範圍
net.ipv4.tcp_max_syn_backlog=8192
# SYN的長度
net.ipv4.tcp_max_tw_buckets=5000
# TIME_WAIT狀態的鏈接數量
用Apache或Nginx做為Web服務器的優化方案
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.ip_local_port_range=10000 65000
做為Posttfix郵件服務器的優化方案
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.ip_local_port_range=10000 65000
kernel.shmmax=134217728
以上優化項修改後,直接生效命令:
/sbin/sysctl -p
閱讀更多 Linux猿 的文章