Linux內核調優實戰指南

內核調優通常通過修改內核運行時參數來實現,這些參數的配置文件是 Linux 系統中核心的性能調整點。

內核調優配置文件名稱

  1. /etc/sysctl.conf: 這是最傳統和主要的內核參數配置文件。系統啟動時或手動執行 sysctl -p 命令時會讀取并應用其中的設置。
  2. /etc/sysctl.d/*.conf: 這是一個現代的、推薦使用的目錄。你可以將不同的調優需求(如網絡優化、內存優化)放在單獨的 .conf 文件中(例如 99-net-tuning.conf, 99-memory.conf)。這樣做的好處是:
    • 模塊化: 易于管理和維護不同方面的配置。
    • 避免沖突: 升級系統或軟件包時,它們通常會將配置放到 /usr/lib/sysctl.d//run/sysctl.d/,而用戶的自定義配置放在 /etc/sysctl.d/ 可以覆蓋它們,且不會被升級覆蓋掉。
    • 加載順序: 系統會按字母順序加載 /etc/sysctl.d//run/sysctl.d//usr/lib/sysctl.d/ 目錄下的 .conf 文件,后加載的文件中的參數值會覆蓋先加載文件中相同參數的值(因此通常用戶自定義文件以 99- 開頭確保最后加載)。

如何生效?

  • 修改上述文件后,需要執行以下命令之一使配置生效(無需重啟):
    • sysctl -p: 重新加載 /etc/sysctl.conf
    • sysctl -p /etc/sysctl.d/99-my-tuning.conf: 重新加載特定文件。
    • sysctl --system: 重新加載所有配置文件(包括 /etc/sysctl.conf/etc/sysctl.d/*.conf 等)。這是推薦的做法
  • 如果想臨時測試參數效果(重啟失效),可以直接使用 sysctl -w parameter=value 命令。

常見需要優化的內核參數舉例

內核需要優化的參數非常多且高度依賴于具體應用場景(Web服務器、數據庫、文件服務器、高并發負載、虛擬化等)。以下是一些非常常見且普遍適用的參數類別和具體例子:

1. 網絡性能相關

  • net.core.somaxconn:
    • 作用: 定義系統中每個監聽套接字(socket)的最大連接請求隊列長度。當服務器瞬間收到大量連接請求時,超過 somaxconn 的請求會被丟棄或忽略。
    • 優化場景: 高并發服務器(Web Server如 Nginx/Apache,數據庫等)。默認值通常較低(128 或 1024),對于高并發可能需要提高到 4096 或 8192,甚至更高。
    • 注意: 應用層(如 Nginx 的 listen backlog 參數)也需要相應調整,不能超過內核的這個值。
  • net.ipv4.tcp_max_syn_backlog:
    • 作用: 定義系統中尚未收到客戶端最終 ACK 的 SYN 半連接請求的最大隊列長度。
    • 優化場景: 防御 SYN Flood 攻擊或應對瞬間高 SYN 連接請求。通常需要配合 net.core.somaxconn 調整,建議等于或略大于 somaxconn
  • net.ipv4.tcp_tw_reuse (TIME_WAIT 優化):
    • 作用: 允許內核將處于 TIME_WAIT 狀態的套接字重新用于新的 OUTGOING (出站) TCP 連接。默認通常是 0 (禁用)。
    • 優化場景: 服務器需要頻繁主動向外部建立大量短連接(例如作為客戶端連接后端服務、爬蟲等),導致本地端口耗盡(大量 TIME_WAIT 狀態)。設置為 1 可以緩解端口壓力。注意:主要用于解決主動關閉連接方的問題
  • net.ipv4.tcp_tw_recycle (TIME_WAIT 優化 - 謹慎使用!):
    • 作用: 啟用對 TIME_WAIT 套接字的快速回收
    • 風險: 在 NAT 網絡環境下極易導致連接問題(如移動客戶端通過 NAT 網關訪問服務器)。在 Linux 4.10+ 內核中已被移除,現代內核不再建議也不應使用此參數。 優先考慮 tcp_tw_reuse 和增加端口范圍。
  • net.ipv4.ip_local_port_range:
    • 作用: 定義本地(作為客戶端發起連接時)使用的 TCP/UDP 端口號范圍
    • 優化場景: 服務器需要作為客戶端發起大量連接時(如代理服務器、微服務調用),默認范圍(32768-60999)可能不夠用,可以擴大(例如 1024 65000)。注意不要和知名端口(<1024)沖突。
  • net.ipv4.tcp_fin_timeout:
    • 作用: 控制套接字保持在 FIN_WAIT_2 狀態的最長時間(秒)。默認通常是 60 秒。
    • 優化場景: 可以適當降低(如 30 秒)以更快釋放資源,特別是在連接非常頻繁的情況下。但降低過多可能導致連接異常終止。
  • net.core.netdev_max_backlog:
    • 作用: 定義當內核處理網絡包的速度跟不上網卡接收速度時,每個網絡接口接收隊列的最大包數
    • 優化場景: 在網絡流量非常大的服務器上,增加此值(如 10000)可以減少因接收隊列滿而導致的丟包。需要結合 net.core.somaxconn 考慮。

2. 虛擬內存管理相關

  • vm.swappiness:
    • 作用: 控制內核將內存頁交換(swap)到磁盤的積極程度。值范圍 0-100。值越高,內核越積極地使用交換空間;值越低,內核盡量避免交換,更傾向于回收文件系統緩存(page cache)。默認值通常是 60。
    • 優化場景
      • 數據庫服務器/內存密集型應用: 通常建議設置為較低值(如 10 甚至 1 或 0),以盡量減少對性能影響巨大的磁盤交換,優先釋放文件緩存。
      • 內存充足但希望更多內存用于緩存: 降低 swappiness
      • 內存不足且希望避免 OOM Killer頻繁觸發: 可適當提高(但這是治標不治本,加內存才是根本)。
    • 注意: 設置為 0 并不代表完全禁止交換,極端內存壓力下還是會發生的。
  • vm.vfs_cache_pressure:
    • 作用: 控制內核回收用于 目錄項(dentry) 和 inode 對象緩存積極程度。默認值通常是 100。值越高,回收越積極(釋放越快);值越低,回收越保守(保留緩存更久)。
    • 優化場景: 對于文件密集型應用(如文件服務器、Web 靜態資源服務器),如果發現 dentryinode 緩存頻繁被回收導致文件訪問變慢,可以嘗試適當降低此值(如 50)。

3. 文件系統相關

  • vm.dirty_background_ratio / vm.dirty_background_bytes:
    • 作用: 當系統中臟頁(被修改過但尚未寫入磁盤的內存頁)占總內存的百分比 (dirty_background_ratio) 或達到指定字節數 (dirty_background_bytes) 時,系統在后臺開始寫回臟頁。
    • 優化場景: 控制后臺刷盤的閾值。降低此值(如設為 5 或 10)可以讓后臺刷盤更早開始,避免臟頁累積過多導致后續同步刷盤阻塞應用。...bytes 優先級高于 ...ratio
  • vm.dirty_ratio / vm.dirty_bytes:
    • 作用: 當臟頁占總內存的百分比 (dirty_ratio) 或達到指定字節數 (dirty_bytes) 時,生成臟頁的應用程序會被阻塞(同步地),直到臟頁被寫入磁盤一部分為止。
    • 優化場景: 控制應用被阻塞的閾值。增大此值(如 30 或 40)可以減少寫入密集型應用(如數據庫事務日志寫入)被阻塞的頻率,提高吞吐,但風險是系統崩潰時丟失的數據增多。...bytes 優先級高于 ...ratio
  • vm.dirty_expire_centisecs:
    • 作用: 定義臟頁在內存中可停留的最長時間(以百分之一秒計),超過時間的臟頁會被周期性刷盤線程寫回磁盤。
    • 優化場景: 控制臟頁存活時間。減少此值(如設為 500,即 5 秒)可以減少崩潰時潛在的數據丟失量;增大此值(如 3000,即 30 秒)可能合并更多寫操作,減少磁盤I/O次數(適合對數據一致性要求不那么極端實時、且寫入非常零碎的場景)。
  • fs.file-max / fs.nr_open:
    • fs.file-max: 系統級別允許打開的文件描述符最大總數。
    • fs.nr_open: 單個進程允許打開的文件描述符最大數。
    • 優化場景: 需要處理大量并發連接或打開大量文件的服務器(數據庫、Web服務器、代理服務器)。需要將此值調大(例如設置為幾十萬甚至上百萬),并且同時需要調整用戶進程的 ulimit (nofile) 限制

重要提示

  1. 沒有萬能配置: 最佳配置極其依賴你的具體硬件、工作負載(是 CPU 密集型、內存密集型、網絡 I/O 密集型還是磁盤 I/O 密集型?)、應用類型(數據庫、Web 服務器、文件服務器、虛擬化宿主機?)。
  2. 循序漸進: 不要一次性修改大量參數。理解每個參數的作用,一次修改一兩個,并密切監控系統性能指標(使用 top, vmstat, iostat, netstat, ss, sar, dstat 等工具)和應用表現。
  3. 基準測試: 在應用重要變更前后進行基準測試,量化調整的效果。
  4. 備份: 修改關鍵配置文件前進行備份。
  5. 默認值: 大多數參數的默認值對于通用場景是合理的。優化通常是為了解決特定負載下的瓶頸。
  6. 文檔: 參考內核文檔 (/usr/share/doc/kernel-doc-<version>/Documentation/sysctl/ 或在線資源) 了解每個參數的詳細描述。
  7. 發行版差異: 不同 Linux 發行版及其不同版本的默認參數值可能有差異。
  8. 監控與驗證: 使用 sysctl -a | grep parameter_namecat /proc/sys/path/to/parameter 查看參數的當前運行值。

總結來說,內核調優的核心在于理解 /etc/sysctl.conf/etc/sysctl.d/ 目錄下的 .conf 文件的作用,并且根據你的服務器承擔的角色(Web服務器、數據庫、文件服務器等),有針對性地調整如網絡連接數參數 (somaxconn, tcp_max_syn_backlog)、TCP 連接復用參數 (tcp_tw_reuse)、內存交換傾向 (vm.swappiness)、臟頁刷盤策略 (dirty_ratio, dirty_background_ratio) 以及文件描述符限制 (file-max) 等關鍵參數。務必在調整前后進行性能監控和測試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98987.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98987.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98987.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎常見知識點

Java 中 和 equals() 的區別詳解_java中與equals的區別及理解-CSDN博客https://blog.csdn.net/m0_64432106/article/details/142026852深入理解Java中方法的參數傳遞機制 - 悟小天 - 博客園https://www.cnblogs.com/sum-41/p/10799555.html浮點型精度是什么意思&#xff1f;為…

OD C卷 -【高效貨運】

文章目錄高效貨運高效貨運 貨車的額定載貨量為wt&#xff1b;貨物A單件重量為wa&#xff0c;單件運費利潤為pa;貨物B單件重量wb&#xff0c;單件運費利潤為pb;每次出車必須包含A、B貨物&#xff0c;且單件貨物都不可分割&#xff0c;總重量達到額定的載貨量wt;每次出車能夠獲取…

手動解壓并讀取geo 文件 series_matrix_table_begin series_matrix_table_end之間的數據

手動解壓并讀取geo 文件 series_matrix_table_begin series_matrix_table_end之間的數據 1. 手動解壓并讀取文件內容 file_path <- “K:/download/geo/raw_data/GEO/GSE32967_series_matrix.txt.gz” 使用latin1編碼讀取文件所有行 con <- gzfile(file_path, “r”) all_…

主板硬件研發基礎--DP/DP++

現在的主板大多數使用的是比DP功能更加強大的DP++。 DisplayPort++(DP++)是 DisplayPort 技術的增強版,旨在提升與多種視頻接口的兼容性和連接性能。以下是關于它的詳細介紹: 功能特性 多協議兼容:DP++ 接口不僅支持 DisplayPort 標準的信號傳輸,還可以通過內部的轉換電…

科技行業新聞發布平臺哪家好?多場景推廣專業方案服務商推薦

面對海量得新聞發布平臺和碎片化的傳播場景&#xff0c;如何精準選擇推廣方案無疑是企業主面臨的一大難題&#xff0c;對于技術迭代迅速的科技行業更是如此。針對復雜的市場環境&#xff0c;一些專業的新聞發布平臺往往能夠針對性地給出營銷方案&#xff0c;并提供一定技術支持…

SystemVerilog 學習之SystemVerilog簡介

SystemVerilog簡介SystemVerilog是一種硬件描述和驗證語言&#xff08;HDVL&#xff09;&#xff0c;由Accellera開發并于2005年成為IEEE標準&#xff08;IEEE 1800&#xff09;。它在傳統Verilog基礎上擴展了高級驗證和設計功能&#xff0c;廣泛應用于數字電路設計、驗證及系統…

JavaWeb--day3--AjaxElement路由打包部署

&#xff08;以下內容全部來自上述課程及課件&#xff09; Ajax &#xff08;此章節純粹演示&#xff0c;因服務器端url鏈接失效&#xff0c;所以無法實戰&#xff09; 1. 同步與異步 同步&#xff1a; 瀏覽器頁面在發送請求給服務器&#xff0c;在服務器處理請求的過程…

IMF GDP的bug

IMF GDP 數據底子是官方數字&#xff0c;基本是沿用官方的&#xff0c;雖然經過修訂或估算&#xff0c;存在4大“bug”&#xff1a;1. 依賴官方上報&#xff0c;真實性不保證2. PPP GDP 虛高&#xff0c;居民實際消費力低很多ppp gdp高&#xff0c;甚至gdp高的地方&#xff0c;…

第2篇:數據持久化實戰

在上一篇中&#xff0c;我們構建了一個基于內存存儲的食譜助手。說實話&#xff0c;內存存儲雖然簡單&#xff0c;但有個致命問題&#xff1a;程序一重啟&#xff0c;數據就全沒了。 所以這篇我們要解決數據持久化的問題&#xff0c;將食譜助手從內存存儲升級到SQLite數據庫。 …

Java推薦系統與機器學習實戰案例

基于Java的推薦系統與機器學習實例 以下是一些基于Java的推薦系統與機器學習實例的參考方向及開源項目,涵蓋協同過濾、矩陣分解、深度學習等常見方法。內容根據實際項目和技術文檔整理,可直接用于學習或開發。 協同過濾實現 用戶-物品評分預測 使用Apache Mahout的基于用戶…

AI生成內容檢測的綜合方法論與技術路徑

一、AI內容檢測技術的分類與原理當前AI內容檢測技術主要分為四大類&#xff0c;每類都有其獨特的原理和應用場景&#xff1a;1. 基于語言特征分析的檢測方法這類方法通過挖掘人類寫作與AI生成文本之間的統計學差異進行判斷&#xff1a;1.1 詞匯使用模式分析AI生成的文本在詞匯選…

可可圖片編輯 HarmonyOS(5)濾鏡效果

可可圖片編輯 HarmonyOS&#xff08;5&#xff09;濾鏡效果 前言 可可圖片編輯也實現了濾鏡效果&#xff0c;主要是利用 Image組件的 colorFilter 屬性實現。濾鏡的關鍵屬性 colorFilter colorFilter 的主要作用是給圖像設置顏色濾鏡效果。 其核心原理是使用一個 4x5 的顏色矩陣…

< JS事件循環系列【二】> 微任務深度解析:從本質到實戰避坑

在上一篇關于 JS 事件循環的文章中&#xff0c;我們提到 “微任務優先級高于宏任務” 這一核心結論&#xff0c;但對于微任務本身的細節并未展開。作為事件循環中 “優先級最高的異步任務”&#xff0c;微任務的執行機制直接影響代碼邏輯的正確性&#xff0c;比如Promise.then的…

STM32 單片機開發 - SPI 總線

一、SPI 總線概念SPI 總線 --- Serial Peripheral Interface&#xff0c;即串行外設接口SPI 是摩托羅拉公司設計的一款 串行、同步、全雙工總線&#xff1b;SPI 總線是三線 / 四線制總線&#xff0c;分別是&#xff1a;SPI_SCK&#xff08;時鐘線&#xff09;、S…

區域醫院云HIS系統源碼,云醫院管理系統源碼,云診所源碼

云HIS源碼&#xff0c;云醫院管理系統源碼&#xff0c;云診所源碼&#xff0c;二級專科醫院云HIS系統源代碼&#xff0c;有演示云HIS&#xff0c;即云醫院管理系統&#xff0c;是一種運用云計算、大數據、物聯網等新興信息技術的醫療信息化解決方案。它重新定義了傳統的醫院信息…

Java基礎 9.11

1.第三代日期類前面兩代日期類的不足分析JDK 1.0中包含了一個java.uti.Date類&#xff0c;但是它的大多數方法已經在JDK1.1引Calendar類之后被棄用了。而Calendar也存在問題是&#xff1a;可變性&#xff1a;像日期和時間這樣的類應該是不可變的偏移性&#xff1a;Date中的年份…

JavaScript 數組過濾方法

在 JavaScript 編程中&#xff0c;數組是最常用的數據結構之一&#xff0c;而數組過濾則是處理數據集合的關鍵操作。filter() 方法提供了一種高效的方式來從數組中篩選出符合特定條件的元素&#xff0c;返回一個新的數組&#xff0c;而不改變原始數組。這種方法在處理對象數組時…

《sklearn機器學習——數據預處理》離散化

sklearn 數據預處理中的離散化&#xff08;Discretization&#xff09; 離散化是將連續型數值特征轉換為離散區間&#xff08;分箱/bins&#xff09;的過程&#xff0c;常用于簡化模型、增強魯棒性、處理非線性關系或滿足某些算法對離散輸入的要求&#xff08;如樸素貝葉斯、決…

PTA算法簡析

ArkAnalyzer源碼初步分析I&#xff1a;https://blog.csdn.net/2302_80118884/article/details/151627341?spm1001.2014.3001.5501 首先&#xff0c;我們必須明確 PTA 的核心工作&#xff1a;它不再關心變量的“聲明類型”&#xff0c;而是為程序中的每一個變量和每一個對象字段…

Vue 3 中監聽多個數據變化的幾種方法

1. 使用 watch監聽多個 ref/reactive 數據import { ref, watch } from vueexport default {setup() {const count ref(0)const name ref()const user reactive({ age: 20 })// 監聽多個數據源watch([count, name, () > user.age], // 數組形式傳入多個數據源([newCount, …