A. 一般優化linux的內核,需要優化什麼參數
作為高性能WEB伺服器,只調整Nginx本身的參數是不行的,因為Nginx服務依賴於高性能的操作系統。
以下為常見的幾個Linux內核參數優化方法。
net.ipv4.tcp_max_tw_buckets
對於tcp連接,服務端和客戶端通信完後狀態變為timewait,假如某台伺服器非常忙,連接數特別多的話,那麼這個timewait數量就會越來越大。
畢竟它也是會佔用一定的資源,所以應該有一個最大值,當超過這個值,系統就會刪除最早的連接,這樣始終保持在一個數量級。
這個數值就是由net.ipv4.tcp_max_tw_buckets這個參數來決定的。
CentOS7系統,你可以使用sysctl -a |grep tw_buckets來查看它的值,默認為32768,
你可以適當把它調低,比如調整到8000,畢竟這個狀態的連接太多也是會消耗資源的。
但你不要把它調到幾十、幾百這樣,因為這種狀態的tcp連接也是有用的,
如果同樣的客戶端再次和服務端通信,就不用再次建立新的連接了,用這個舊的通道,省時省力。
net.ipv4.tcp_tw_recycle = 1
該參數的作用是快速回收timewait狀態的連接。上面雖然提到系統會自動刪除掉timewait狀態的連接,但如果把這樣的連接重新利用起來豈不是更好。
所以該參數設置為1就可以讓timewait狀態的連接快速回收,它需要和下面的參數配合一起使用。
net.ipv4.tcp_tw_reuse = 1
該參數設置為1,將timewait狀態的連接重新用於新的TCP連接,要結合上面的參數一起使用。
net.ipv4.tcp_syncookies = 1
tcp三次握手中,客戶端向服務端發起syn請求,服務端收到後,也會向客戶端發起syn請求同時連帶ack確認,
假如客戶端發送請求後直接斷開和服務端的連接,不接收服務端發起的這個請求,服務端會重試多次,
這個重試的過程會持續一段時間(通常高於30s),當這種狀態的連接數量非常大時,伺服器會消耗很大的資源,從而造成癱瘓,
正常的連接進不來,這種惡意的半連接行為其實叫做syn flood攻擊。
設置為1,是開啟SYN Cookies,開啟後可以避免發生上述的syn flood攻擊。
開啟該參數後,服務端接收客戶端的ack後,再向客戶端發送ack+syn之前會要求client在短時間內回應一個序號,
如果客戶端不能提供序號或者提供的序號不對則認為該客戶端不合法,於是不會發ack+syn給客戶端,更涉及不到重試。
net.ipv4.tcp_max_syn_backlog
該參數定義系統能接受的最大半連接狀態的tcp連接數。客戶端向服務端發送了syn包,服務端收到後,會記錄一下,
該參數決定最多能記錄幾個這樣的連接。在CentOS7,默認是256,當有syn flood攻擊時,這個數值太小則很容易導致伺服器癱瘓,
實際上此時伺服器並沒有消耗太多資源(cpu、內存等),所以可以適當調大它,比如調整到30000。
net.ipv4.tcp_syn_retries
該參數適用於客戶端,它定義發起syn的最大重試次數,默認為6,建議改為2。
net.ipv4.tcp_synack_retries
該參數適用於服務端,它定義發起syn+ack的最大重試次數,默認為5,建議改為2,可以適當預防syn flood攻擊。
net.ipv4.ip_local_port_range
該參數定義埠范圍,系統默認保留埠為1024及以下,以上部分為自定義埠。這個參數適用於客戶端,
當客戶端和服務端建立連接時,比如說訪問服務端的80埠,客戶端隨機開啟了一個埠和服務端發起連接,
這個參數定義隨機埠的范圍。默認為32768 61000,建議調整為1025 61000。
net.ipv4.tcp_fin_timeout
tcp連接的狀態中,客戶端上有一個是FIN-WAIT-2狀態,它是狀態變遷為timewait前一個狀態。
該參數定義不屬於任何進程的該連接狀態的超時時間,默認值為60,建議調整為6。
net.ipv4.tcp_keepalive_time
tcp連接狀態里,有一個是established狀態,只有在這個狀態下,客戶端和服務端才能通信。正常情況下,當通信完畢,
客戶端或服務端會告訴對方要關閉連接,此時狀態就會變為timewait,如果客戶端沒有告訴服務端,
並且服務端也沒有告訴客戶端關閉的話(例如,客戶端那邊斷網了),此時需要該參數來判定。
比如客戶端已經斷網了,但服務端上本次連接的狀態依然是established,服務端為了確認客戶端是否斷網,
就需要每隔一段時間去發一個探測包去確認一下看看對方是否在線。這個時間就由該參數決定。它的默認值為7200秒,建議設置為30秒。
net.ipv4.tcp_keepalive_intvl
該參數和上面的參數是一起的,服務端在規定時間內發起了探測,查看客戶端是否在線,如果客戶端並沒有確認,
此時服務端還不能認定為對方不在線,而是要嘗試多次。該參數定義重新發送探測的時間,即第一次發現對方有問題後,過多久再次發起探測。
默認值為75秒,可以改為3秒。
net.ipv4.tcp_keepalive_probes
第10和第11個參數規定了何時發起探測和探測失敗後再過多久再發起探測,但並沒有定義一共探測幾次才算結束。
該參數定義發起探測的包的數量。默認為9,建議設置2。
設置和範例
在Linux下調整內核參數,可以直接編輯配置文件/etc/sysctl.conf,然後執行sysctl -p命令生效
B. Liuex是什麼
Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。Linux是Unix克隆(Unix clone)或Unix風格(Unix alike) 的操作系統(OS),在原代碼級上兼容絕大部分Unix標准(指的是IEEE,POSIX,System V,BSD),是一個支持多用戶, 多進程,多線程,實時性 較好的功能 。具有強大而穩定的操作系統,在很多企業網路中,為了追求速度和安全,Linux操作系統不僅僅是被網路運維人員當作伺服器使用,Linux既可以當作伺服器,又可以當作網路防火牆是Linux的 一大亮點。
Linux它能當伺服器,伺服器上安裝者各種企業應用、服務。比如:Web服務(apache,就是能架設網站的)、資料庫(MySQL,存儲網站信息數據的)、博客系統(wordpress)等。Linux系統用在比如某網站的伺服器,肯定使用Linux。再比如某網站的資料庫,也基於Linux。因為部分業務需要在網路上處理,需要存儲,需要管理數據。Linux就是很好的服務端操作系統。
(2)linux內核數據包擴展閱讀:
Linux伺服器
Linux伺服器是設計出來進行業務處理應用的,在網路和計算機系統當中有廣泛的應用,可以提供資料庫管理和網路服務等內容,是一種性能非常高的和開源的伺服器,在我國的計算機系統的客戶端當中,有很多採用的就是Linux系統,其使用的范圍非常廣泛,用戶體驗反應較好。但是對於一些希望計算機應用性能比較高的單位而言,windows系統需要經常進行資源整合和碎片化管理,系統在配置的時候經常需要重新啟動,這就無法避免產生停機的問題。
同時,由於Linux系統的處理能力非常強悍,具備不可比擬的穩定性特徵,因而Linux系統就不用經常進行重啟,Linux系統的變化可以在配置的過程中實現,所以Linux伺服器出現故障的概率比較小,所以很多企業組織在計算機配置的過程中經常使用Linux系統,從而降低伺服器發生崩潰的可能性,很多企業在配置Linux系統的時候,都是通過減少伺服器的故障發生率,實現企業業務的高效運轉。
系統內核的路由轉發
Linux操作系統嵌入了TCP/IP協議棧,協議軟體具有路由轉發功能。路由轉發依賴作為路由器的主機中安裝多塊網卡,當某一塊網卡接收到數據包後,系統內核會根據數據包的目的IP地址,查詢路由表,然後根據查詢結果將數據包發送到另外一塊網卡,最後通過此網卡把數據包發送出去。此主機的處理過程就是路由器完成的核心功能。
通過修改Linux系統內核參數ip_forward的方式實現路由功能,系統使用sysctl命令配置與顯示在/proc/sys目錄中的內核參數。首先在命令行輸入:cat/proc/sys/net/ipv4/ip_forwad,檢查Linux內核是不是開啟IP轉發功能。如果結果為1,表明路由轉發功能已經開啟;如果結果為0,表明沒有開啟。出於安全考慮,Linux內核默認是禁止數據包路由轉發的。在linux系統中,有臨時和永久兩種方法啟用轉發功能。
臨時啟用:此種方法只對當前會話起作用,系統重啟後不再啟用。臨時開啟的命令格式:sysctl–wnet.ipv4.ip_forward=1。永久啟用:此種永久性的啟用IP轉發功能,通過更改配置文件/etc/sysctl.conf中的語句行「net.ipv4.ip_forward=0」,修改為「net.ipv4.ip_forward=1」,保存配置文件後執行命令sysctl–p/etc/sysctl.conf,配置便立即啟用。
用戶賬戶以及登錄安全
刪除多餘用戶和用戶組。Linux是多用戶操作系統,存在很多種不一樣的角色系統賬號,當安裝完成操作系統之後,系統會默認為未添加許用戶組及用戶,若是部分用戶或是用戶組不需要,應當立即刪除它們,否則黑客很有可能利用這些賬號,對伺服器實施攻擊。具體保留哪些賬號,可以依據伺服器的用途來決定。關閉不需要的系統服務。操作系統安裝完成之後,其會在安裝的過程當中,會自主的啟動各種類型的服務程序內容。
密碼安全策略。在Linux之下,遠程的登錄系統具備兩種認證的形式:即密鑰與密碼認證。其中,密鑰認證的形式,主要是將公鑰儲存在遠程的伺服器之上,私鑰存儲在本地。當進行系統登陸的時候,再通過本地的私鑰,以及遠程的伺服器公鑰,進行配對認證的操作,若是認證的匹配度一致,則用戶便能夠暢通無阻的登錄系統。此類認證的方式,並不會受到暴力破解的威脅。