Linux內核可配置的參數

sysctl -a?命令會列出當前Linux內核所有可配置的參數及其當前值。這些參數允許你在系統運行時動態地調整內核的行為,而無需重新編譯內核或重啟系統。

內容非常多,因為內核有很多可調的方面。我們可以把它們大致分為幾個主要類別:

  1. kernel.*: 內核核心參數

  2. vm.*: 虛擬內存管理 (Virtual Memory)

  3. net.*: 網絡相關參數 (Networking)

  4. fs.*: 文件系統相關參數 (File System)

  5. dev.*: 特定設備參數

  6. abi.*: 應用程序二進制接口 (Application Binary Interface)

  7. user.*: 用戶命名空間限制

下面我會對每一類進行解釋,并列舉一些常見的、重要的參數:


1.?kernel.*?(內核核心參數)

這類參數控制著內核的許多基本行為。

  • kernel.hostname = your_hostname

    • 解釋: 系統的主機名。

  • kernel.domainname = (none)

    • 解釋: 系統的 NIS/YP 域名。

  • kernel.ostype = Linux

    • 解釋: 操作系統類型。

  • kernel.osrelease = 5.15.0-76-generic?(示例版本號)

    • 解釋: 操作系統內核版本號。

  • kernel.version = #83~20.04.1-Ubuntu SMP Mon Jun 5 11:53:06 UTC 2023?(示例)

    • 解釋: 內核編譯的具體版本信息,包括編譯日期等。

  • kernel.panic = 0

    • 解釋: 當內核發生嚴重錯誤 (panic) 時,系統在多少秒后自動重啟。0 表示不自動重啟。

  • kernel.panic_on_oops = 1

    • 解釋: 當內核發生 oops (一種不那么嚴重的錯誤,但仍有問題) 時是否觸發 panic。

  • kernel.shmmax = 18446744073692774399?(示例,非常大的值)

    • 解釋: 單個共享內存段的最大尺寸(字節)。對數據庫等應用很重要。

  • kernel.shmall = 18446744073692774399?(示例,非常大的值)

    • 解釋: 系統范圍內共享內存總頁數。

  • kernel.shmmni = 4096

    • 解釋: 系統范圍內共享內存段的最大數量。

  • kernel.msgmax = 65536

    • 解釋: 單個消息隊列中消息的最大字節數。

  • kernel.msgmnb = 65536

    • 解釋: 單個消息隊列的最大字節數。

  • kernel.msgmni = 32000

    • 解釋: 系統中消息隊列標識符的最大數量。

  • kernel.sem = 250 32000 32 128

    • 解釋: System V 信號量參數 (SEMMSL, SEMMNS, SEMOPM, SEMMNI)。

  • kernel.sysrq = 1

    • 解釋: 是否啟用 "Magic SysRq key"。這是一個調試工具,允許通過特定組合鍵直接向內核發送命令。

  • kernel.pid_max = 32768

    • 解釋: 系統中進程ID的最大值。

  • kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E?(Ubuntu 特有)

    • 解釋: 當程序崩潰產生 core dump 文件時,文件的命名模式或處理程序。Ubuntu 使用 apport 來收集崩潰報告。

  • kernel.randomize_va_space = 2

    • 解釋: 地址空間布局隨機化 (ASLR) 的級別,用于增強安全性。2 表示完全隨機化。

  • kernel.threads-max = ...

    • 解釋: 系統支持的最大線程數。


2.?vm.*?(虛擬內存管理)

這類參數控制內核如何管理內存,包括物理內存和交換空間 (swap)。

  • vm.swappiness = 60

    • 解釋: 內核使用交換空間的積極程度。值從 0 到 100。0 表示盡可能不使用 swap,100 表示積極使用 swap。默認 60。服務器上如果有足夠內存,可以適當調低。

  • vm.dirty_background_ratio = 10

    • 解釋: 當臟頁 (已修改但未寫入磁盤的內存頁) 占總可用內存的百分比達到此值時,內核后臺進程開始將臟頁寫回磁盤。

  • vm.dirty_ratio = 20

    • 解釋: 當臟頁占總可用內存的百分比達到此值時,進行寫操作的進程會被阻塞,直到足夠的臟頁被寫回磁盤。

  • vm.vfs_cache_pressure = 100

    • 解釋: 內核回收用于目錄和inode緩存的內存的傾向性。值越大,回收越積極。

  • vm.overcommit_memory = 0

    • 解釋: 內存分配策略。

      • 0: 內核執行啟發式內存過量分配處理,通常會允許適度的過量分配,但如果明顯超出,則會拒絕。

      • 1: 內核總是允許過量分配,不進行檢查。

      • 2: 內核不允許過量分配超過?(SwapTotal + RAM * vm.overcommit_ratio / 100)?的內存。

  • vm.overcommit_ratio = 50

    • 解釋: 當?vm.overcommit_memory?設置為 2 時,允許過量分配的物理內存百分比。

  • vm.min_free_kbytes = ...

    • 解釋: 強制Linux VM保留的最小可用千字節數。確保系統在內存緊張時仍能執行關鍵操作。

  • vm.nr_hugepages = 0

    • 解釋: 配置的巨頁 (Huge Pages) 數量。巨頁可以提高某些高性能應用的內存性能。


3.?net.*?(網絡相關參數)

這是非常大的一類,通常會進一步細分為?net.ipv4.*,?net.ipv6.*,?net.core.*?等。

net.core.*?(核心網絡參數)
  • net.core.somaxconn = 128?(默認可能較低, 建議調高)

    • 解釋: TCP監聽隊列的最大長度。對于高并發服務器,這個值需要調大 (例如 1024, 4096 或更高)。

  • net.core.netdev_max_backlog = 1000

    • 解釋: 當網絡接口接收數據包的速度快于內核處理的速度時,允許排隊的最大數據包數量。

  • net.core.rmem_default = 212992

    • 解釋: TCP套接字接收緩沖區的默認大小。

  • net.core.wmem_default = 212992

    • 解釋: TCP套接字發送緩沖區的默認大小。

  • net.core.rmem_max = ...

    • 解釋: TCP套接字接收緩沖區的最大大小。

  • net.core.wmem_max = ...

    • 解釋: TCP套接字發送緩沖區的最大大小。

net.ipv4.*?(IPv4 特定參數)
  • net.ipv4.ip_forward = 0

    • 解釋: 是否啟用IPv4轉發 (即作為路由器)。0 為禁用,1 為啟用。

  • net.ipv4.tcp_syncookies = 1

    • 解釋: 是否啟用 SYN Cookies。當 SYN 隊列溢出時,可以幫助防御 SYN Flood 攻擊。

  • net.ipv4.tcp_tw_reuse = 0?(或 1)

    • 解釋: 是否允許將 TIME_WAIT 狀態的套接字重新用于新的 TCP 連接。通常在客戶端或負載均衡器上設置為 1,可以快速回收端口。

  • net.ipv4.tcp_tw_recycle = 0?(已廢棄且不推薦使用)

    • 解釋: 是否快速回收 TIME_WAIT 狀態的套接字。注意:此參數在高版本內核中已移除或不建議使用,因為它可能導致NAT環境下的問題。通常應保持禁用 (0)。

  • net.ipv4.tcp_fin_timeout = 60

    • 解釋: 對于已關閉的本地 TCP 連接,保持在 FIN_WAIT_2 狀態的時間。

  • net.ipv4.tcp_keepalive_time = 7200

    • 解釋: TCP 發送 keepalive 消息的頻率 (秒)。

  • net.ipv4.tcp_keepalive_intvl = 75

    • 解釋: 當 keepalive探測未得到響應時,重試發送的間隔時間 (秒)。

  • net.ipv4.tcp_keepalive_probes = 9

    • 解釋: 在斷定連接失效前,發送 keepalive 探測的次數。

  • net.ipv4.ip_local_port_range = 32768 60999

    • 解釋: 本地TCP/UDP端口的可用范圍 (用于客戶端連接或服務器的臨時端口)。

  • net.ipv4.tcp_max_syn_backlog = ...

    • 解釋: 未完成連接(SYN_RECV狀態)的隊列最大長度。

  • net.ipv4.tcp_congestion_control = cubic?(或 bbr)

    • 解釋: TCP 擁塞控制算法。cubic?是默認的,bbr?是Google開發的較新算法,在高延遲或有丟包的網絡中表現可能更好。

  • net.ipv4.conf.all.accept_redirects = 0

  • net.ipv4.conf.default.accept_redirects = 0

    • 解釋: 是否接受 ICMP 重定向報文。出于安全考慮,通常設置為 0。

  • net.ipv4.conf.all.secure_redirects = 1

    • 解釋: 是否只接受來自網關列表中的主機的ICMP安全重定向。

  • net.ipv4.conf.all.send_redirects = 1?(如果是路由器則為1,否則為0)

    • 解釋: 是否發送 ICMP 重定向報文。

  • net.ipv4.conf.all.rp_filter = 1?(或 2)

    • 解釋: 反向路徑過濾,用于防止 IP 欺騙。1 為嚴格模式,2 為松散模式。

net.ipv6.*?(IPv6 特定參數)
  • 與 IPv4 類似,但針對 IPv6。例如:

    • net.ipv6.conf.all.forwarding = 0

    • net.ipv6.conf.all.accept_redirects = 0

    • net.ipv6.conf.all.disable_ipv6 = 0?(0 表示啟用IPv6, 1 表示禁用指定接口的IPv6)

    • net.ipv6.conf.default.disable_ipv6 = 0


4.?fs.*?(文件系統相關參數)

  • fs.file-max = ...

    • 解釋: 系統級別的文件句柄最大數量(所有進程打開的文件總數)。

  • fs.nr_open = 1048576

    • 解釋: 單個進程可以分配的文件句柄的最大數量(這個值受限于?fs.file-max?和?ulimit)。

  • fs.inotify.max_user_watches = 8192?(默認可能較低)

    • 解釋: 每個用戶可以創建的 inotify watch 的最大數量。當使用像 VS Code、文件同步工具等監視大量文件變化的程序時,可能需要調大此值。

  • fs.inotify.max_user_instances = 128

    • 解釋: 每個用戶可以創建的 inotify 實例的最大數量。

  • fs.aio-max-nr = 65536

    • 解釋: 系統中異步I/O請求的最大數量。


5.?dev.*?(特定設備參數)

  • 這些參數通常是針對特定類型的設備或驅動程序的。例如,你可能會看到與特定網絡接口卡 (NIC)、CD-ROM 或其他硬件相關的參數。

  • 例如:?dev.cdrom.info,?dev.mac_hid.*

  • 一般情況下,用戶很少直接調整這些參數,它們通常由驅動程序或更高級別的工具管理。


6.?abi.*?(應用程序二進制接口)

  • abi.vsyscall32 = 1

    • 解釋: 是否啟用 32 位應用程序的 vsyscall 仿真。通常不需要修改。


7.?user.*?(用戶命名空間限制)

  • 這些參數用于控制用戶命名空間 (user namespaces) 的資源限制,這是一個用于容器化和權限隔離的 Linux 特性。

  • 例如:

    • user.max_user_namespaces = ...

    • user.max_mnt_namespaces = ...


如何理解和使用這些參數?

  1. 大部分參數不需要修改: 對于大多數桌面用戶和許多服務器場景,默認值已經足夠好。

  2. 按需調整: 只有當你遇到特定的性能瓶頸、安全需求或應用兼容性問題時,才考慮調整這些參數。

  3. 查閱文檔: 在修改任何參數之前,務必查閱相關文檔(如?man sysctl.conf,內核文檔?Documentation/sysctl/?目錄下的文件,或在線資源)來理解其確切含義和潛在影響。

  4. 臨時修改:
    sudo sysctl -w parameter.name=value
    這種修改在系統重啟后會丟失。

  5. 永久修改:

    • 編輯?/etc/sysctl.conf?文件。

    • 或者,在?/etc/sysctl.d/?目錄下創建一個新的?.conf?文件 (例如?99-custom.conf)。

    • 格式為?parameter.name = value。

    • 修改后,執行?sudo sysctl -p?或?sudo sysctl --system?來使配置生效(-p?只加載指定文件,通常是?/etc/sysctl.conf;--system?會加載所有?/etc/sysctl.d/*.conf?和?/etc/sysctl.conf)。

  6. 逐步調整和測試: 不要一次修改太多參數。修改一個或一組相關的參數后,進行測試,觀察系統行為和性能,確保沒有負面影響。

sysctl -a?的輸出非常龐大,但通過分類和關注其中一些關鍵參數,你就能更好地理解你的 Ubuntu 系統是如何運行和配置的。希望這個解釋對你有幫助!

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

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

相關文章

【背包dp-----分組背包】------(標準的分組背包【可以不裝滿的 最大價值】)

通天之分組背包 題目鏈接 題目描述 自 01 01 01 背包問世之后,小 A 對此深感興趣。一天,小 A 去遠游,卻發現他的背包不同于 01 01 01 背包,他的物品大致可分為 k k k 組,每組中的物品相互沖突,現在&a…

操作系統:os概述

操作系統:OS概述 程序、進程與線程無極二級目錄三級目錄 程序、進程與線程 指令執行需要那些條件?CPU內存 需要數據和 無極 二級目錄 三級目錄

RAG文本分塊

不論是向量化模型還是大語言模型,都存在輸入長度的限制。對于超過限制的文本,模型會進行截斷,造成語義缺失。分塊可以確保每個文本片段都在模型的處理范圍內,避免重要信息的丟失。 文本分塊的核心原則 高質量分塊的核心原則是&a…

2025 年九江市第二十三屆中職學校技能大賽 (網絡安全)賽項競賽樣題

2025 年九江市第二十三屆中職學校技能大賽 (網絡安全)賽項競賽樣題 (二)A 模塊基礎設施設置/安全加固(200 分)A-1 任務一登錄安全加固(Windows,Linux)A-2 任務二 Nginx 安全策略&…

量子隧穿:PROFINET到Ethernet ip的無損耗協議轉換方案轉

在本季度的生產工作中,我們成功實現了倉儲物流自動化分揀系統中的關鍵技術突破。我們面臨的主要挑戰是將采用EtherNet/IP協議的輸送帶控制器與PROFINET協議的上位系統進行有效通信。通過引入ethernet IP轉PROFINET網關倍訊科技BX-606-EIP,我們實現了輸送…

OpenCV CUDA模塊中矩陣操作------降維操作

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::cuda::reduce 函數用于對 GPU 上的矩陣沿某個維度進行降維操作,例如求和、取最大值等。此函數支持多種降維操作,并允…

一分鐘用 MCP 上線一個 貪吃蛇 小游戲(CodeBuddy版)

我正在參加CodeBuddy「首席試玩官」內容創作大賽,本文所使用的 CodeBuddy 免費下載鏈接:騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 你好,我是悟空。 背景 上篇我們用 MCP 上線了一個 2048 小游戲,這次我們繼續做一個 …

簡單神經網絡(ANN)實現:從零開始構建第一個模型

本文將手把手帶你用 Python Numpy 實現一個最基礎的人工神經網絡(Artificial Neural Network, ANN)。不依賴任何深度學習框架,適合入門理解神經網絡的本質。 一、項目目標 構建一個三層神經網絡(輸入層、隱藏層、輸出層&#xf…

使用python進行人員軌跡跟蹤

一、系統概述 該系統基于計算機視覺技術,實現對視頻或攝像頭畫面中的人員進行檢測、跟蹤,并生成軌跡數據。支持透視變換校準(鳥瞰圖顯示)、多目標跟蹤、軌跡存儲及視頻錄制功能,適用于安防監控、行為分析等場景。 二…

[強化學習的數學原理—趙世鈺老師]學習筆記02-貝爾曼方程

本人為強化學習小白,為了在后續科研的過程中能夠較好的結合強化學習來做相關研究,特意買了西湖大學趙世鈺老師撰寫的《強化學習數學原理》中文版這本書,并結合趙老師的講解視頻來學習和更深刻的理解強化學習相關概念,知識和算法技…

Docker入門指南:鏡像、容器與倉庫的核心概念解析

目錄 前言:為什么需要Docker? 一、Docker能做什么? 二、核心概念解析 1. 鏡像(Image):應用的標準化打包 2. 容器(Container):鏡像的運行實例 3. 鏡像倉庫&#xff0…

大模型微調實戰:基于GpuGeek平臺的低成本高效訓練方案

文章目錄 引言一、GpuGeek平臺使用入門1. 注冊與賬號設置2. 控制臺功能概覽3. 快速創建GPU實例3. 預置鏡像與自定義環境 二、GpuGeek平臺核心優勢解析1. 顯卡資源充足:多卡并行加速訓練2. 鏡像超多:開箱即用的開發環境3. 計費靈活:按需付費降…

Linux:計算機的層狀結構

1.馮諾依曼體系結構 我們常見的計算機,如筆記本、臺式機。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系結構。 CPU:運算器和控制器組成。運算器主要工作是做算術運算和邏輯運算。控制器主要工作是協調設備之間信息流動的…

LangGraph(四)——加入人機交互控制

目錄 1. 引言2. 添加Human Assistance工具3. 編譯狀態圖4. 提示聊天機器人5. 恢復執行參考 1. 引言 智能體可能不可靠,甚至需要人工輸入才能完成任務。同樣,對于某些操作,你可能需要在運行前獲得人工批準,以保證一切按預期運行。 …

數據結構【AVL樹】

AVL樹 1.AVL樹1.AVL的概念2.平衡因子 2.AVl樹的實現2.1AVL樹的結構2.2AVL樹的插入2.3 旋轉2.3.1 旋轉的原則 1.AVL樹 1.AVL的概念 AVL樹可以是一個空樹。 它的左右子樹都是AVL樹,且左右子樹的高度差的絕對值不超過1。AVL樹是一顆高度平衡搜索二叉樹,通…

JavaScript【5】DOM模型

1.概述: DOM (Document Object Model):當頁面被加載時,瀏覽器會創建頁面的文檔對象模型,即dom對象;dom對象會被結構化為對象樹,如一個HTML文檔會被分為head,body等部分,而每個部分又…

STM32燒錄程序正常,但是運行異常

一、硬件配置問題 BOOT引腳設置錯誤 STM32的啟動模式由BOOT0和BOOT1引腳決定。若設置為從RAM啟動(BOOT01,BOOT10),程序在掉電后無法保存,導致復位后無法正常運行。應確保BOOT00(從Flash啟動)15。…

汽車二自由度系統模型以及電動助力轉向系統模型

汽車二自由度系統模型與電動助力轉向系統(EPS)的詳細建模方案,包含理論推導、MATLAB/Simulink實現代碼及參數說明: 一、二自由度汽車模型 1. 模型描述 包含以下兩個自由度: 橫向運動(側向加速度&#xf…

git提交庫常用詞

新功能 feat修改BUG fix文檔修改 docs格式修改 style重構 refactor性能提升 perf測試 test構建系統 build對CI配置文件修改 ci修改構建流程、或增加依賴庫、工具 chore回滾版本 revert

JavaScript 時間轉換:從 HH:mm:ss 到十進制小時及反向轉換

關鍵點 JavaScript 可以輕松實現時間格式(HH:mm:ss 或 HH:mm)與十進制小時(如 17.5)的相互轉換。兩個函數分別處理時間字符串到十進制小時,以及十進制小時到時間字符串的轉換,支持靈活的輸入和輸出格式。這…