作為高效能web伺服器,只調整nginx本身的引數是不行的,因為nginx服務依賴於高效能的作業系統。
以下為常見的幾個linux核心引數優化方法。
對於tcp連線,服務端和客戶端通訊完後狀態變為timewait,假如某台伺服器非常忙,連線數特別多的話,那麼這個timewait數量就會越來越大。
畢竟它也是會占用一定的資源,所以應該有乙個最大值,當超過這個值,系統就會刪除最早的連線,這樣始終保持在乙個數量級。
這個數值就是由net.ipv4.tcp_max_tw_buckets這個引數來決定的。
centos7系統,你可以使用sysctl -a |grep tw_buckets來檢視它的值,預設為32768,
你可以適當把它調低,比如調整到8000,畢竟這個狀態的連線太多也是會消耗資源的。
但你不要把它調到幾
十、幾百這樣,因為這種狀態的tcp連線也是有用的,
如果同樣的客戶端再次和服務端通訊,就不用再次建立新的連線了,用這個舊的通道,省時省力。
該引數的作用是快速**timewait狀態的連線。上面雖然提到系統會自動刪除掉timewait狀態的連線,但如果把這樣的連線重新利用起來豈不是更好。
所以該引數設定為1就可以讓timewait狀態的連線快速**,它需要和下面的引數配合一起使用。
該引數設定為1,將timewait狀態的連線重新用於新的tcp連線,要結合上面的引數一起使用。
tcp三次握手中,客戶端向服務端發起syn請求,服務端收到後,也會向客戶端發起syn請求同時連帶ack確認,
假如客戶端傳送請求後直接斷開和服務端的連線,不接收服務端發起的這個請求,服務端會重試多次,
這個重試的過程會持續一段時間(通常高於30s),當這種狀態的連線數量非常大時,伺服器會消耗很大的資源,從而造成癱瘓,
正常的連線進不來,這種惡意的半連線行為其實叫做syn flood攻擊。
設定為1,是開啟syn cookies,開啟後可以避免發生上述的syn flood攻擊。
開啟該引數後,服務端接收客戶端的ack後,再向客戶端傳送ack+syn之前會要求client在短時間內回應乙個序號,
如果客戶端不能提供序號或者提供的序號不對則認為該客戶端不合法,於是不會發ack+syn給客戶端,更涉及不到重試。
該引數定義系統能接受的最大半連線狀態的tcp連線數。客戶端向服務端傳送了syn包,服務端收到後,會記錄一下,
該引數決定最多能記錄幾個這樣的連線。在centos7,預設是256,當有syn flood攻擊時,這個數值太小則很容易導致伺服器癱瘓,
實際上此時伺服器並沒有消耗太多資源(cpu、記憶體等),所以可以適當調大它,比如調整到30000。
該引數適用於客戶端,它定義發起syn的最大重試次數,預設為6,建議改為2。
該引數適用於服務端,它定義發起syn+ack的最大重試次數,預設為5,建議改為2,可以適當預防syn flood攻擊。
該引數定義埠範圍,系統預設保留埠為1024及以下,以上部分為自定義埠。這個引數適用於客戶端,
當客戶端和服務端建立連線時,比如說訪問服務端的80埠,客戶端隨機開啟了乙個埠和服務端發起連線,
這個引數定義隨機埠的範圍。預設為32768 61000,建議調整為1025 61000。
tcp連線的狀態中,客戶端上有乙個是fin-wait-2狀態,它是狀態變遷為timewait前乙個狀態。
該引數定義不屬於任何程序的該連線狀態的超時時間,預設值為60,建議調整為6。
第10和第11個引數規定了何時發起探測和探測失敗後再過多久再發起探測,但並沒有定義一共探測幾次才算結束。
該引數定義發起探測的包的數量。預設為9,建議設定2。
設定和範例
在linux下調整核心引數,可以直接編輯配置檔案/etc/sysctl.conf,然後執行sysctl -p命令生效
結合以上分析的各核心引數,範例如下
net.ipv4.tcp_fin_timeout = 6net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.ip_local_port_range = 1025
61000
net.ipv4.tcp_keepalive_intvl = 3
net.ipv4.tcp_keepalive_probes = 2
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命令 被用於在核心執行時動態地修改核心的執行引數,可用的核心引數...