您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何優化Linux 系統,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
關閉swap
如果服務器上有運行數據庫服務或消息中間件服務,請關閉交換分區
echo "vm.swappiness = 0" >> /etc/sysctl.conf sysctl -p
OOM Killer
一般我們的linux服務都是混部服務的,每個程序申請的物理內存都是共享的;例如物理內存只有1g,啟動2個程序各申請1g是可以的,linux通過這種過度分配的方式來達到內存的充分利用,當程序實際使用內存超出物理內存時,會被系統按照優先級,殺掉一部分程序以確保其它程序的正常運行;為了避免核心服務被殺,可以將進程文件設置為最高優先級。
# 數值越小越不容易被殺 echo -17 > /proc/$pid/oom_score_adj
TCP
因為我們提供的數據庫和一些消息中間件服務都是內網工作的,所以可以針對內網對TCP參數進行一些優化。
默認值為6,參考值為2。主機作為客戶端,對外發起TCP連接時,即三次握手的第一步,內核發送SYN報文的重試次數,超過這個次數后放棄連接。內網環境通信良好,因此可以適度降低此值
默認值為5,參考值為2。主機作為服務端,接受TCP連接時,在三次握手的第二步,向客戶端發送SYN+ACK報文的重試次數,超過這個次數后放棄連接。內網環境中可適度降低此值
是否開啟時間戳,開啟后可以更精確地計算RTT,一些其他特性也依賴時間戳字段。
默認值為0,建議值為1。是否允許將處于TIME_WAIT狀態的socket用于新的TCP連接。這對于降低TIME_WAIT數量很有效。該參數只有在開啟tcp_timestamps的情況下才會生效。
是否開啟TIME_WAIT套接字的快速回收,這是比tcp_tw_reuse更激進的一種方式,它同樣依賴tcp_timestamps選項。強烈建議不要開啟tcp_tw_recycle,原因有兩點,一是TIME_WAIT是十分必要的狀態,避免關閉中的連接與新建連接之間的數據混淆,二是tcp_tw_recycle選項在NAT環境下會導致一些新建連接被拒絕,因為NAT下每個主機存在時差,這體現在套接字中的時間戳字段,服務端會發現某個IP上的本應遞增的時間戳出現降低的情況,時間戳相對降低的報文將被丟棄
默認值為128,參考值為2048。定義了系統中每一個端口上最大的監聽隊列的長度。當服務端監聽了某個端口時,操作系統內部完成對客戶端連接請求的三次握手。這些已建立的連接存儲在一個隊列中,等待accept調用取走。本選項就是定義這個隊列的長度。調大該值,可降低高并發場景下服務端的reject次數。
客戶端的請求在服務端由兩個隊列進行管理,一種是與客戶端完成連接建立后,等待accept的放到一個隊列,這個隊列的長度由somaxconn參數控制;另一種是正在建立但未完成的連接單獨存放一個隊列,這個隊列的長度由tcp_max_syn_backlog控制;默認128,調到至8192.
默認值為4096,參考值為100000。定義系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數,則TIME_WAIT套接字將立刻被清除并打印警告信息。如果系統被TIME_WAIT過多問題困擾,則可以調節tcp_max_tw_buckets、tcp_tw_reuse、tcp_timestamps三個選項來緩解。TIME_WAIT狀態產生在TCP會話關閉時主動關閉的一端,如果想從根本上解決問題,則讓客戶端主動關閉連接,而非服務端。
page cache
page cache即系統臟頁,是系統的io緩存,當數據寫入磁盤前會先寫入page cache中,然后異步刷入磁盤;寫緩存可以提升IO的訪問速度,但同時也會增加丟失數據的風險。
從page cache刷到磁盤有以下三種時機:
由系統執行的刷盤有兩種寫入策略:
在一般情況下,系統先執行第一種策略,當臟頁數據量過大,異步執行來不及完成刷盤時,切換到同步方式。
我們可以通過內核參數調整臟數據的刷盤閾值:
除了通過百分比控制,還可以指定過期時間:vm.dirty_expire_centisecs,默認值為3000(30秒),單位為百分之1秒,超過這個時間后,臟數據被異步刷盤。
可以通過下面的命令查看系統當前的臟頁數量:
cat /proc/vmstat |egrep "dirty|writeback" nr_dirty 951 nr_writeback 0 nr_writeback_temp 0 #輸出顯示有951個臟頁等待寫到磁盤。默認情況下每頁大小為4KB。另外,也可以在/proc/meminfo文件中看到這些信息。
如果數據安全性要求沒有那么高,想要多“cache”一些數據,讓讀取更容易命中cache,則可以增加臟數據占比和過期時間:
vm.dirty_background_ratio = 30 vm.dirty_ratio = 60 vm.dirty_expire_centisecs = 6000
同理,如果不希望因為刷盤導致io被阻,可適當減少異步刷盤的數值,這樣可以讓io更加平滑:
vm.dirty_background_ratio = 5 vm.dirty_ratio = 60
關于如何優化Linux 系統就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。