主要是指在linux系統中針對服務應用而進行的系統核心引數調整,優化沒有的標準,根據實際需求優化才是最合適的。
vim /etc/sysctl.conf #新增或是修改以下引數
net.ipv4.tcp_fin_timeout = 2 #保持在fin-wait-2狀態的時間,使系統可以處理更多的連線。此引數值為整數,單位為秒。net.ipv4.tcp_tw_reuse = 1 #開啟重用,允許將time_wait socket用於新的tcp連線。預設為0,表示關閉。
net.ipv4.tcp_tw_recycle = 1 #開啟tcp連線中time_wait socket的快速**。預設值為0,表示關閉。
net.ipv4.tcp_syncookies = 1 #開啟syn cookie,出現syn等待佇列溢位時啟用cookie處理,防範少量的syn攻擊。預設為0,表示關閉。
net.ipv4.tcp_keepalive_time = 600 #keepalived啟用時tcp傳送keepalived訊息的拼度。預設位2小時。
net.ipv4.tcp_keepalive_probes = 5 #tcp傳送keepalive探測以確定該連線已經斷開的次數。根據情形也可以適當地縮短此值。
net.ipv4.tcp_keepalive_intvl = 15 #探測訊息傳送的頻率,乘以tcp_keepalive_probes就得到對於從開始探測以來沒有響應的連線殺除的時間。預設值為75秒,也就是沒有活動的連線將在大約11分鐘以後將被丟棄。對於普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類伺服器需要改小該值。
net.ipv4.ip_local_port_range = 1024 65000 #指定外部連線的埠範圍。預設值為32768 61000。
net.ipv4.tcp_max_syn_backlog = 262144 #表示syn佇列的長度,預設為1024,這裡設定佇列長度為262 144,以容納更多的等待連線。
net.ipv4.tcp_max_tw_buckets =5000 #系統同時保持time_wait套接字的最大數量,如果超過這個數值將立刻被清楚並輸出警告資訊。預設值為180000。對於squid來說效果不是很大,但可以控制time_wait套接字最大值,避免squid伺服器被拖死。
net.ipv4.tcp_syn_retries = 1 #表示在核心放棄建立連線之前傳送syn包的數量。
net.ipv4.tcp_synack_retries = 1 #設定核心放棄連線之前傳送syn+ack包的數量。
net.core.somaxconn = 16384 #定義了系統中每乙個埠最大的監聽佇列的長度, 對於乙個經常處理新連線的高負載 web服務環境來說,預設值為128,偏小。
net.core.netdev_max_backlog = 16384 #表示當在每個網路介面接收資料報的速率比核心處理這些包的速率快時,允許傳送到佇列的資料報的最大數量。
net.ipv4.tcp_max_orphans = 16384 #表示系統中最多有多少tcp套接字不被關聯到任何乙個使用者檔案控制代碼上。如果超過這裡設定的數字,連線就會復位並輸出警告資訊。這個限制僅僅是為了防止簡單的dos攻擊。此值不能太小。
處於fin_wait_2狀態的客戶端需要等待伺服器傳送結束報文段,才能轉移至time_wait狀態,否則它將一直停留在這個狀態。如果不是為了在半關閉狀態下繼續接收資料,連線長時間地停留在fin_wait_2狀態並無益處。連線停留在fin_wait_2狀態的情況可能發生在:客戶端執行半關閉後,未等伺服器關閉連線就強行退出了。此時客戶端連線由核心來接管,可稱之為孤兒連線(和孤兒程序類似)。
linux為了防止孤兒連線長時間存留在核心中,定義了兩個核心引數:
/proc/sys/net/ipv4/tcp_max_orphans #指定核心能接管的孤兒連線數目/proc/sys/net/ipv4/tcp_fin_timeout #指定孤兒連線在核心中生存的時間
1、異常網路狀況下(開始出現超時或丟包),tcp控制資料傳輸以保證其承諾的可靠服務。
2、tcp服務必須能夠重傳超時時間內未收到確認的tcp報文段。為此,tcp模組為每個tcp報文段都維護乙個重傳定時器,該定時器在tcp報文段第一次被傳送時啟動。如果超時時間內未收到接收方的應答,tcp模組將重傳tcp報文段並重置定時器。至於下次重傳的超時時間如何選擇,以及最多執行多少次重傳,就是tcp的重傳策略。
/proc/sys/net/ipv4/tcp_retries1,指定在底層ip接管之前tcp最少執行的重傳次數,預設值是3/proc/sys/net/ipv4/tcp_retries2,指定連線放棄前tcp最多可以執行的重傳次數,預設值15(一般對應13~30min)
預設的linux核心引數考慮的是最通用場景,不符合用於支援高併發訪問的web伺服器的定義,根據業務特點來進行調整,當nginx作為靜態web內容伺服器、反向**或者提供壓縮伺服器的伺服器時,核心引數的調整都是不同的,此處針對最通用的、使nginx支援更多併發請求的tcp網路引數做簡單的配置,修改/etc/sysctl.conf來更改核心引數:fs.file-max = 1000000
#表示單個程序較大可以開啟的控制代碼數
net.ipv4.tcp_tw_reuse = 1
#引數設定為 1 ,表示允許將time_wait狀態的socket重新用於新的tcp鏈結,這對於伺服器來說意義重大,因為總有大量time_wait狀態的鏈結存在
net.ipv4.tcp_keepalive_time = 600
#當keepalive啟動時,tcp傳送keepalive訊息的頻度;預設是2小時,將其設定為10分鐘,可更快的清理無效鏈結
net.ipv4.tcp_fin_timeout = 30
#當伺服器主動關閉鏈結時,socket保持在fin_wait_2狀態的較大時間
net.ipv4.tcp_max_tw_buckets = 5000
#表示作業系統允許time_wait套接字數量的較大值,如超過此值,time_wait套接字將立刻被清除並列印警告資訊,預設為8000,過多的time_wait套接字會使web伺服器變慢
net.ipv4.ip_local_port_range = 1024 65000
#定義udp和tcp鏈結的本地埠的取值範圍
net.ipv4.tcp_rmem = 10240 87380 12582912
#定義了tcp接受快取的最小值、預設值、較大值
net.ipv4.tcp_wmem = 10240 87380 12582912
#定義tcp傳送快取的最小值、預設值、較大值
net.core.netdev_max_backlog = 8096
#當網絡卡接收資料報的速度大於核心處理速度時,會有乙個列隊儲存這些資料報。這個引數表示該列隊的較大值
net.core.rmem_default = 6291456
#表示核心套接字接受快取區預設大小
net.core.wmem_default = 6291456
#表示核心套接字傳送快取區預設大小
net.core.rmem_max = 12582912
#表示核心套接字接受快取區較大大小
net.core.wmem_max = 12582912
#表示核心套接字傳送快取區較大大小
注意:以上的四個引數,需要根據業務邏輯和實際的硬體成本來綜合考慮
net.ipv4.tcp_syncookies = 1
#與效能無關。用於解決tcp的syn攻擊
net.ipv4.tcp_max_syn_backlog = 8192
#這個引數表示tcp三次握手建立階段接受syn請求列隊的較大長度,預設1024,將其設定的大一些可使出現nginx繁忙來不及accept新連線時,linux不至於丟失客戶端發起的鏈結請求
net.ipv4.tcp_tw_recycle = 1
#這個引數用於設定啟用timewait快速**
net.core.somaxconn=262114
#選項預設值是128,這個引數用於調節系統同時發起的tcp連線數,在高併發的請求中,預設的值可能會導致鏈結超時或者重傳,因此需要結合高併發請求數來調節此值。
net.ipv4.tcp_max_orphans=262114
#選項用於設定系統中最多有多少個tcp套接字不被關聯到任何乙個使用者檔案控制代碼上。如果超過這個數字,孤立鏈結將立即被復位並輸出警告資訊。這個限制指示為了防止簡單的dos攻擊,不用過分依靠這個限制甚至認為的減小這個值,更多的情況是增加這個值
sysctl -p
linux核心引數優化
linux核心引數優化 主要針對 etc sysctl.conf檔案 etc sysctl.conf是乙個允許你改變正在執行中的linux系統的介面。它包含一些tcp ip堆疊和虛擬記憶體系統的高階選項,可用來控制linux網路配置,由於 proc sys net目錄內容的臨時性,建議把tcpip引...
linux核心引數優化
linux如何在系統執行時修改核心引數 proc sys 與 etc sysctl.conf redhat向員提供了非常好的方法,使我們可以在系統執行時更改核心引數,而不需要重新引導系統。這是通過 proc虛擬檔案系統實現的。proc sys目錄下存放著大多數的核心引數,並且設計成可以在系統執行的同...
Linux核心引數優化
核心引數是使用者和系統核心之間互動的乙個介面,通過這個介面,使用者可以在系統執行的同時動態更新核心配置,而這些核心引數是通過linux proc檔案系統存在的。因此,可以通過調整proc檔案系統達到優化linux效能的目的。sysctl命令 被用於在核心執行時動態地修改核心的執行引數,可用的核心引數...