net.ipv4.tcp_mem
核心分配給tcp連線的記憶體,單位是page,1 page = 4096 bytes,可用命令檢視:
#getconf pagesize
4096
net.ipv4.tcp_mem = 196608 262144 393216
第乙個數字表示,當 tcp 使用的 page 少於 196608 時,kernel 不對其進行任何的干預
第二個數字表示,當 tcp 使用了超過 262144 的 pages 時,kernel 會進入 「memory pressure」 壓力模式
第三個數字表示,當 tcp 使用的 pages 超過 393216 時(相當於1.6gb記憶體),就會報:out of socket memory
以上數值適用於4gb記憶體機器,對於8gb記憶體機器,建議用以下引數:
net.ipv4.tcp_mem = 524288 699050 1048576 (tcp連線最多約使用4gb記憶體)
net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem
為每個tcp連線分配的讀、寫緩衝區記憶體大小,單位是byte
net.ipv4.tcp_rmem = 4096 8192 4194304
net.ipv4.tcp_wmem = 4096 8192 4194304
第乙個數字表示,為tcp連線分配的最小記憶體
第二個數字表示,為tcp連線分配的預設記憶體
第三個數字表示,為tcp連線分配的最大記憶體
一般按照預設值分配,上面的例子就是讀寫均為8kb,共16kb
1.6gb tcp記憶體能容納的連線數,約為 1600mb/16kb = 100k = 10萬
4.0gb tcp記憶體能容納的連線數,約為 4000mb/16kb = 250k = 25萬
net.ipv4.tcp_max_orphans
最大孤兒套接字(orphan sockets)數,單位是個
net.ipv4.tcp_max_orphans = 65536
表示最多65536個
注意:當cat /proc/net/sockstat看到的orphans數量達到net.ipv4.tcp_max_orphans的約一半時,就會報:out of socket memory
詳見kernel原始碼:
include/net/tcp.h:
268 static inline bool tcp_too_many_orphans(struct sock *sk, int shift)
269
278
279 if (sk->sk_wmem_queued > sock_min_sndbuf &&
280 atomic_long_read(&tcp_memory_allocated) > sysctl_tcp_mem[2])
281 return true;
282 return false;
283 }
參考對於net.ipv4.tcp_max_orphans = 65536,當orphans達到32768個時,會報out of socket memory,此時占用記憶體 32k*64kb=2048mb=2gb
(每個孤兒socket可占用多達64kb記憶體),實際可能小一些
net.ipv4.tcp_orphan_retries
孤兒socket廢棄前重試的次數,重負載web伺服器建議調小
net.ipv4.tcp_orphan_retries = 1
設定較小的數值,可以有效降低orphans的數量(net.ipv4.tcp_orphan_retries = 0並不是想像中的不重試)
net.ipv4.tcp_retries2
活動tcp連線重傳次數,超過次數視為掉線,放棄連線。預設值:15,建議設為 2或者3.
net.ipv4.tcp_synack_retries
tcp三次握手的syn/ack階段,重試次數,預設5,設為2-3
net.ipv4.tcp_fin_timeout = 30
fin_wait狀態的tcp連線的超時時間
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
time_wait狀態的socket快速**,迴圈使用
net.ipv4.tcp_max_syn_backlog = 4096
tcp連線syn佇列大小
net.core.netdev_max_backlog = 2048
網路裝置的收發包的佇列大小
net.ipv4.tcp_syncookies = 1
tcp syn cookies,防範ddos攻擊,防止syn佇列被佔滿
高負載伺服器效能分析命令
1.檢視埠總連線書 quote netstat an grep 9003 grep established wc l quote 2.輸出每個ip的連線數,以及總的各個狀態的連線數 quote netstat n grep 9003 awk tcp end printf 20s s n total ...
關於伺服器模型與負載
聽到過12306春節 崩了,聽說啊裡每秒種能處理多少多少資料,對於普通人毫無概念,其實對於內門人估計沒什麼概念。現在只是記錄乙個我個人的理解,在此別噴,當我放p。首先應該建立乙個概念 1 伺服器能跑多快?用什麼恒量?2 每處理乙個客戶要占用伺服器多長時間?比如,1.0 伺服器每秒100萬條指令 2....
關於伺服器的負載均衡問題
即為多個不同的ip位址配置同乙個網域名稱,這樣不同的客戶機訪問同乙個域字的時候就會得到不同的ip位址。使得不同的客戶端訪問不同的伺服器,從而達到負載均衡的目的。一般採取輪詢訪問演算法。優點 簡單實用,伺服器的設定位置靈活。缺點 為了使本地dns和其他dns及時互動,保證dns資料及時更新使位址隨機分...