1. 程式人生 > >Linux伺服器核心調優

Linux伺服器核心調優

Linux核心引數

net.ipv4.tcp_syncookies = 1
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_fin_timeout = 30

表示如果套接字由本端要求關閉,這個引數決定了它保持在FIN-WAIT-2狀態的時間。

net.ipv4.tcp_keepalive_time = 1200

表示當keepalive起用的時候,TCP傳送keepalive訊息的頻度。預設是2小時。

net.ipv4.tcp_keepalive_probes = 5

TCP傳送keepalive探測以確定該連線已經斷開的次數。(注意:保持連線僅在SO_KEEPALIVE套接字選項被開啟是才傳送.次數預設不需要修改,當然根據情形也可以適當地縮短此值.設定為5比較合適)

net.ipv4.tcp_keepalive_intvl = 15

探測訊息傳送的頻率,乘以tcp_keepalive_probes就得到對於從開始探測以來沒有響應的連線殺除的時間。預設值為75秒,也就是沒有活動的連線將在大約11分鐘以後將被丟棄。(對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類伺服器需要改小該值,15是個比較合適的值)

net.ipv4.ip_local_port_range = 1024 65000

表示用於向外連線的埠範圍。預設情況下很小:32768到61000,改為1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192

表示SYN佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。

net.ipv4.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

跟蹤的連線超時結束時間

net.ipv4.tcp_max_tw_buckets = 819200

表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告資訊。預設為180000。設為較小數值此項引數可以控制TIME_WAIT套接字的最大數量,避免伺服器被大量的TIME_WAIT套接字拖死。

net.core.somaxconn = 262144

定義了系統中每一個埠最大的監聽佇列的長度, 對於一個經常處理新連線的高負載 web服務環境來說,預設的 128 太小了。

net.core.netdev_max_backlog = 262144

該引數決定了, 每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目, 不要設的過大

net.ipv4.tcp_max_orphans = 262144

系統所能處理不屬於任何程序的TCP sockets最大數量。假如超過這個數量,那麼不屬於任何程序的連線會被立即reset,並同時顯示警告資訊。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制,更應該增加這個值(如果增加了記憶體之後)。每個孤兒套接字最多能夠吃掉你64K不可交換的記憶體。

net.ipv4.tcp_orphan_retries = 3

本端試圖關閉TCP連線之前重試多少次。預設值是7,相當於50秒~16分鐘(取決於RTO)。如果你的機器是一個過載的WEB伺服器,你應該考慮減低這個值,因為這樣的套接字會消耗很多重要的資源。參見tcp_max_orphans.

net.ipv4.tcp_timestamps = 0

時間戳,0關閉, 1開啟,在(請參考RFC 1323)TCP的包頭增加12個位元組, 關於該配置對TIME_WAIT的影響及可能引起的問題: http://huoding.com/2012/01/19/142 , Timestamps 用在其它一些東西中﹐可以防範那些偽造的 sequence 號碼。一條1G的寬頻線路或許會重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由於上次產生的)。Timestamp 會讓它知道這是個 ‘舊封包’。(該檔案表示是否啟用以一種比超時重發更精確的方法(RFC 1323)來啟用對 RTT 的計算;為了實現更好的效能應該啟用這個選項。)

net.ipv4.tcp_synack_retries = 1

tcp_synack_retries 顯示或設定 Linux 核心在迴應 SYN 要求時會嘗試多少次重新發送初始 SYN,ACK 封包後才決定放棄。這是所謂的三段交握 (threeway handshake) 的第二個步驟。即是說系統會嘗試多少次去建立由遠端啟始的 TCP 連線。tcp_synack_retries 的值必須為正整數,並不能超過 255。因為每一次重新發送封包都會耗費約 30 至 40 秒去等待才決定嘗試下一次重新發送或決定放棄。tcp_synack_retries 的預設值為 5,即每一個連線要在約 180 秒 (3 分鐘) 後才確定逾時.

net.ipv4.tcp_syn_retries = 1

對於一個新建連線,核心要傳送多少個 SYN 連線請求才決定放棄。不應該大於255,預設值是5,對應於180秒左右時間。(對於大負載而物理通訊良好的網路而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連線,對進來的連線,是由tcp_retries1 決定的)

net.ipv4.tcp_retries1 = 3

放棄迴應一個TCP連線請求前﹐需要進行多少次重試。RFC 規定最低的數值是3﹐這也是預設值﹐根據RTO的值大約在3秒 - 8分鐘之間。(注意:這個值同時還決定進入的syn連線)

net.ipv4.tcp_retries2 = 15

在丟棄啟用(已建立通訊狀況)的TCP連線之前﹐需要進行多少次重試。預設值為15,根據RTO的值來決定,相當於13-30分鐘(RFC1122規定,必須大於100秒).(這個值根據目前的網路設定,可以適當地改小,我的網路內修改為了5)

net.ipv4.tcp_sack = 1

使 用 Selective ACK﹐它可以用來查詢特定的遺失的資料報— 因此有助於快速恢復狀態。該檔案表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高效能(這樣可以讓傳送者只發送丟失的報文段)。(對於廣域網通訊來說這個選項應該啟用,但是這會增加對 CPU 的佔用。)

net.ipv4.tcp_fack = 1

開啟FACK擁塞避免和快速重傳功能。(注意,當tcp_sack設定為0的時候,這個值即使設定為1也無效)

net.ipv4.tcp_dsack = 1

允許TCP傳送”兩個完全相同”的SACK。

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1

1 - do source validation by reversed path, as specified in RFC1812 Recommended option for single homed hosts and stub network routers. Could cause troubles for complicated (not loop free) networks running a slow unreliable protocol (sort of RIP), or using static routes.

0 - No source validation.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

停用 ipv6 模組

vm.swappiness=5

預設60, Swappiness can be set to values between 0 and 100 inclusive. A low value means the kernel will try to avoid swapping as much as possible where a higher value instead will make the kernel aggressively try to use swap space.

others:

# 避免放大攻擊
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 開啟惡意icmp錯誤訊息保護
net.ipv4.icmp_ignore_bogus_error_responses = 1

# 開啟SYN洪水攻擊保護
net.ipv4.tcp_syncookies = 1

# 開啟並記錄欺騙,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# 處理無源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# 開啟反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 確保無人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

# 不充當路由器
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 開啟execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1

# IPv6設定
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1

# 優化LB使用的埠

# 增加系統檔案描述符限制
fs.file-max = 65535

# 允許更多的PIDs (減少滾動翻轉問題); may break some programs 32768
kernel.pid_max = 65536

# 增加系統IP埠限制
net.ipv4.ip_local_port_range = 2000 65000

# 增加TCP最大緩衝區大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608

# 增加Linux自動調整TCP緩衝區限制
# 最小,預設和最大可使用的位元組數
# 最大值不低於4MB,如果你使用非常高的BDP路徑可以設定得更高

# Tcp視窗等
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1