因爲最近公司有活動,每到活動的時間5分鐘10萬的併發就沒法提供正常web服務,咱們前端有硬件的LB,後端的real server的配置也很是不錯,百思不得其姐!我決定調調內核的參數!文章具備參考價值,不具備實戰價值!前端
第一部分:經常使用的參數 1. /proc/sys/net/core/wmem_max
最大socket寫buffer,可參考的優化值:873200 2. /proc/sys/net/core/rmem_max
最大socket讀buffer,可參考的優化值:873200 3. /proc/sys/net/ipv4/tcp_wmem
TCP寫buffer,可參考的優化值: 8192 436600 873200 4. /proc/sys/net/ipv4/tcp_rmem
TCP讀buffer,可參考的優化值: 32768 436600 873200 5. /proc/sys/net/ipv4/tcp_mem 它有3個值,意思是: net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力. net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段. net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket. 上述內存單位是頁,而不是字節.可參考的優化值是:786432 1048576 1572864 6. /proc/sys/net/core/netdev_max_backlog
進入包的最大設備隊列.默認是300,對重負載服務器而言,該值過低,可調整到1000 7. /proc/sys/net/core/somaxconn
listen()的默認參數,掛起請求的最大數量.默認是128.對繁忙的服務器,增長該值有助於網絡性能.可調整到256 8. /proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默認10K 9. /proc/sys/net/ipv4/tcp_max_syn_backlog
進入SYN包的最大請求隊列.默認1024.對重負載服務器,增長該值顯然有好處.可調整到2048 10./proc/sys/net/ipv4/tcp_retries2
TCP失敗重傳次數,默認值15,意味着重傳15次才完全放棄.可減小到5,以儘早釋放內核資源 11.與TCP KeepAlive 有關的參數(默認值): tcp_keepalive_time = 7200 seconds (2 hours) 表示當keepalive起用的時候,TCP發送keepalive消息的頻度,缺省是2小時. tcp_keepalive_intvl = 75 seconds 當探測沒有確認時,從新發送探測的頻度。缺省是75秒 tcp_keepalive_probes = 9 在認定鏈接失效以前,發送多少個TCP的keepalive探測包。缺省值是9。這個值乘以tcp_keepalive_intvl以後決定了,一個鏈接發送了keepalive以後能夠有多少時間沒有迴應 意思是若是某個TCP鏈接在idle 2個小時後,內核才發起probe.若是probe 9次(每次75秒)不成功,內核才完全放棄,認爲該鏈接已失效.對服務器而言,顯然上述值太大. 可調整到: /proc/sys/net/ipv4/tcp_keepalive_time 1800 /proc/sys/net/ipv4/tcp_keepalive_intvl 30 /proc/sys/net/ipv4/tcp_keepalive_probes 3 12./proc/sys/net/ipv4/ip_local_port_range
指定端口範圍的一個配置,默認是32768 61000,應該夠用了吧 13.net.ipv4.tcp_syncookies = 1
表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認爲0,表示關閉 14. net.ipv4.tcp_tw_reuse = 1 表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉; 15.net.ipv4.tcp_tw_recycle = 1 表示開啓TCP鏈接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉。 16.net.ipv4.tcp_fin_timeout = 30 表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。 17.net.ipv4.tcp_keepalive_time = 1200 表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘。 18.net.ipv4.ip_local_port_range = 1024 65000 表示用於向外鏈接的端口範圍。缺省狀況下很小:32768到61000,改成1024到65000。 19.net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數。 20.net.ipv4.tcp_max_tw_buckets = 5000 表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印警告信息。默認爲180000,改成 5000。對於Apache、Nginx等服務器,上幾行的參數能夠很好地減小TIME_WAIT套接字數量,可是對於Squid,效果卻不大。此項參數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。 21.net.ipv4.tcp_max_syn_backlog = 65536
表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數 22.net.core.netdev_max_backlog = 8192
每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目 23.net.ipv4.tcp_max_tw_buckets = 20000
表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印警告信息。默認爲180000,改成5000。對於Apache、Nginx等服務器,上幾行的參數能夠很好地減小TIME_WAIT套接字數量,可是對於Squid,效果卻不大。此項參數能夠控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死 24.net.core.somaxconn = 32768
定義了系統中每個端口最大的監聽隊列的長度,這是個全局的參數,默認值爲1024 25.net.core.wmem_default = 8388608
該文件指定了發送套接字緩衝區大小的缺省值(以字節爲單位)。 26.net.core.rmem_default = 8388608
該文件指定了接收套接字緩衝區大小的默認值(以字節爲單位)。 27.net.core.rmem_max = 16777216
指定了接收套接字緩衝區(接收窗口)大小的最大值(以字節爲單位) 最大的TCP數據接收緩衝 28.net.core.wmem_max = 16777216
指定了發送套接字緩衝區(接收窗口)大小的最大值(以字節爲單位) 最大的TCP數據發送緩衝 29.net.ipv4.tcp_timestamps = 0
以一種比重發超時更精確的方法(請參閱 RFC 1323)來啓用對 RTT 的計算;爲了實現更好的性能應該啓用這個選項,時間戳在(請參考RFC 1323)TCP的包頭增長12個字節 30.net.ipv4.tcp_synack_retries = 2
syn-ack握手狀態重試次數,默認5,遭受syn-flood攻擊時改成1或2 31.net.ipv4.tcp_syn_retries = 2
外向syn握手重試次數,默認4 32.net.ipv4.tcp_tw_recycle = 1
系統默認0,tw快速回收 33.net.ipv4.tcp_tw_reuse = 1
表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉 34.net.ipv4.tcp_mem = 94500000 915000000 927000000
肯定TCP棧應該如何反映內存使用;每一個值的單位都是內存頁(一般是 4KB)。第一個值是內存使用的下限。第二個值是內存壓力模式開始對緩衝區使用應用壓力的上限。第三個值是內存上限。在這個層次上能夠將報文丟棄,從而減小對內存的使用。對於較大的 BDP 能夠增大這些值(可是要記住,其單位是內存頁,而不是字節) 35.net.ipv4.tcp_max_orphans = 3276800
系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。若是超過這個數字,孤兒鏈接將即刻被複位並打印出警告信息。這個限制僅僅是爲了防止簡單的DoS攻擊,你絕對不能過度依靠它或者人爲地減少這個值,更應該增長這個值(若是增長了內存以後) 36.net.ipv4.tcp_fin_timeout = 30
表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間 37.net.ipv4.tcp_no_metrics_save = 1
一個tcp鏈接關閉後,把這個鏈接曾經有的參數好比慢啓動門限snd_sthresh,擁塞窗口snd_cwnd 還有srtt等信息保存到dst_entry中, 只要dst_entry 沒有失效,下次新創建相同鏈接的時候就能夠使用保存的參數來初始化這個鏈接. 38.tcp_no_metrics_save = 1
設置爲1就是不保持這些參數(經驗值),每次創建鏈接後都從新摸索一次. 我以爲沒什麼好處. 因此係統默認把它設爲0 39.kernel.msgmni = 1024
這個參數決定了系統中同時運行的最大的message queue的個數 40./proc/sys/kernel/sem 它有4個數據分別對應: SEMMSL 250 表示每一個信號集中的最大信號量數目 SEMMNS 32000 表示系統範圍內的最大信號量總數目 SEMOPM 100 表示每一個信號發生時的最大系統操做數目 SEMMNI 128 表示系統範圍內的最大信號集總數目 以上可能有重複的部分,望見諒!