CPU-IO-網絡-內核參數的調優
- CPU-IO-網絡-內核參數的調優
- 一、CPU 資源調優
- 1.1 調整進程優先級(nice 值)
- 1.2 設置 CPU 親和力(taskset)
- 1.3 cpu命令描述
- 1.4 使用 vmstat 分析系統瓶頸
- 二、磁盤 I/O 調優
- 2.1 ulimit 資源限制
- 2.2 測試磁盤速度
- 三、內核參數調優
- 3.1 防御 SYN 洪水攻擊
- 3.2 關鍵參數說明
- 四、總結與建議
CPU-IO-網絡-內核參數的調優
一、CPU 資源調優
1.1 調整進程優先級(nice 值)
-
作用:通過調整進程的 nice 值,改變其 CPU 調度優先級。
-
范圍:-20(最高)到 19(最低),默認是 0。
-
命令:
nice -n -5 vim a.txt # 啟動時設置優先級nice:用于給新進程設置 “nice 值”(優先級的數值表示,范圍是 -20 到 19)-n -5:指定 nice 值為 -5(數值越小,優先級越高,系統會優先分配 CPU 資源)vim a.txt:要啟動的進程(這里是用 vim 打開 a.txt)效果:啟動的 vim 進程會獲得較高的 CPU 優先級,在系統繁忙時,它能搶到更多 CPU 時間,操作更流暢renice -n 6 24318 # 修改運行中進程的優先級調整已運行的進程的優先級。renice:用于修改已有進程的 nice 值-n 6:將 nice 值設為 6(數值較大,優先級較低,系統會減少對它的 CPU 分配)24318:目標進程的 PID(進程 ID,可通過ps或top命令查看)效果:PID 為 24318 的運行中進程,優先級會降低,在系統繁忙時,它會 “謙讓” CPU 資源給其他優先級更高的進
-
注意:無法超出 -20~19 的范圍。
-
關鍵規律:
- nice 值越小(甚至負數)→ 優先級越高 → 系統越 “照顧” 這個進程;
- nice 值越大 → 優先級越低 → 系統越 “冷落” 這個進程。
? 通常用于:讓重要程序(如服務器進程)優先級更高,讓耗資源但不緊急的程序(如后臺備份)優先級更低,合理分配 CPU 資源。
1.2 設置 CPU 親和力(taskset)
-
作用:將進程綁定到指定 CPU 核心,減少上下文切換開銷。
-
安裝:
yum install util-linux
-
命令:
1)taskset -c 0 vim a.txt # 綁定到 CPU0taskset:Linux 中用于設置進程 CPU 親和力(綁定 CPU 核心)的工具-c 0:-c 表示指定 CPU 核心編號(從 0 開始),這里綁定到第 0 號 CPU 核心vim a.txt:要啟動的進程(用 vim 打開 a.txt)效果:這個 vim 進程只會在 CPU0 上運行,不會被調度到其他核心,適合需要穩定占用單一核心的場景。2)taskset -cp 20146 # 查看進程 1087 的 CPU 綁定情況 查看已運行進程的 CPU 綁定情況。-c:顯示 CPU 核心編號(更易讀)-p:表示操作對象是已存在的進程(通過 PID 指定)20146:目標進程的 PID(進程 ID,可通過 ps 或 top 查看)[root@benet21 ~]# taskset -cp 20146 pid 20146's current affinity list: 03)taskset -c 1,3 vim b.txt # 綁定到 CPU1 和 CPU3 啟動進程時,綁定到多個 CPU 核心(核心列表)。-c 1,3:指定進程只能在 CPU1 和 CPU3 上運行(核心編號用逗號分隔)效果:這個 vim 進程會在 CPU1 和 CPU3 之間被調度,但不會跑到其他核心(如 CPU0、CPU2),適合需要限制進程使用特定核心組的場景。測試 :ps -o psr -p 98822top 按F P(空格選) 按q退出 再輸入 top 生產環境場景:一般用在 你的業務(進程)非常重要 你需要綁定好的業務并且給他設置兩個
1.3 cpu命令描述
cat /proc/cpuinfo
是 Linux 系統中用于查看 CPU 硬件信息 的命令,通過讀取 /proc
虛擬文件系統中的 cpuinfo
文件,展示當前系統中 CPU 的詳細參數。
輸出內容的核心信息(以常見的多核 CPU 為例):
processor : 0 # CPU 核心編號(從 0 開始,多核會依次顯示 0、1、2...)
vendor_id : GenuineIntel # CPU 廠商(如 Intel、AMD)
cpu family : 6 # CPU 系列(廠商內部的產品系列編號)
model : 158 # 型號(同系列中的具體型號)
model name : Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz # 具體型號名稱和主頻
stepping : 9 # 步進(硬件版本號,影響穩定性和兼容性)
microcode : 0x84 # 微代碼版本(CPU 內置的底層程序版本)
cpu MHz : 2808.000 # 當前運行頻率(動態調頻時會變化)
cache size : 6144 KB # 緩存大小(L3 緩存,影響數據訪問速度)
physical id ** : 0 # 物理 CPU 編號(多物理 CPU 時區分,單 CPU 通常為 0)
siblings : 8 # 單個物理 CPU 的邏輯核心數(包含超線程)
core id ** : 0 # 物理核心編號(同一物理 CPU 內的核心編號)
cpu cores ** : 4 # 單個物理 CPU 的物理核心數(此處為 4 核)
apicid : 0 # 用于多核通信的 APIC 編號
initial apicid : 0
fpu : yes # 是否支持浮點運算單元(FPU)
fpu_exception : yes # 是否支持 FPU 異常處理
cpuid level : 22 # CPUID 指令支持的級別(用于查詢 CPU 功能)
wp : yes # 是否支持寫保護(內存安全特性)
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d # CPU 支持的功能指令集(如 SSE、AVX 等加速指令)
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit # 已知的硬件漏洞(如熔斷、幽靈等)
bogomips : 5616.00 # 偽性能指標(早期用于粗略衡量 CPU 速度,參考意義不大)
clflush size : 64 # CLFLUSH 指令一次能刷新的緩存大小(字節)
cache_alignment : 64 # 緩存對齊粒度(字節,影響內存訪問效率)
address sizes : 39 bits physical, 48 bits virtual # 支持的物理/虛擬地址位數(決定最大內存支持)
power management: # 電源管理相關特性(如節能、調頻技術)
詳細詳解:
-
核心數量:
- 看
processor
條目數量 → 總邏輯核心數(包含超線程)。 - 看
cpu cores
→ 單個物理 CPU 的物理核心數(如cpu cores : 4
表示 4 核)。 - 例:4 物理核 + 超線程 = 8 邏輯核 → 會顯示 8 個
processor
條目(0~7)。
- 看
-
型號和主頻:
model name
直接顯示 CPU 型號(如i7-7700HQ
)和基礎主頻(如2.80GHz
)。cpu MHz
顯示當前實時頻率(支持睿頻的 CPU 會動態變化)。
-
廠商和功能:
vendor_id
區分 Intel/AMD 等廠商。flags
列出支持的指令集(如avx2
加速多媒體處理,vmx
支持虛擬化)。
常用場景:
- 快速確認服務器的 CPU 核心數(判斷并行處理能力)。
- 檢查 CPU 是否支持特定功能(如虛擬化、硬件加速指令)。
- 排查硬件相關問題(如型號是否與預期一致,是否存在已知漏洞)。
簡單說,這條命令是“查看 CPU 身份證”的工具,能讓你快速了解系統的 CPU 配置。
操作指令
-
物理cpu:物理cpu數量,實際服務器中插槽上的cpu個數
cat /proc/cpuinfo | grep "physical id" | sort |uniq
-
邏輯cpu:操作系統可以使用邏輯CPU來模擬出真實CPU的效果
cat /proc/cpuinfo | grep "processor" | sort -u | wc -l
-
cpu核數:一塊CPU上面能處理數據的芯片組的數量
cat /proc/cpuinfo | grep "cpu cores" | sort | uniq
1.4 使用 vmstat 分析系統瓶頸
- 關鍵指標:
r
:等待運行的進程數,若持續 > CPU核心數×3,說明 CPU 繁忙。us
:用戶態 CPU 時間,高表示應用程序消耗多。sy
:系統態 CPU 時間,高表示內核消耗多。wa
:等待 I/O 的 CPU 時間,高表示磁盤 I/O 瓶頸。id
:空閑 CPU 時間。
- 實戰場景:
- 上傳大文件:
wa
高,bo
大,說明寫磁盤繁忙。 - 復制文件:
bi
和bo
都高,wa
高,說明讀寫磁盤都繁忙。 - 高并發 HTTP 請求:
r
高,us
高,說明 CPU 處理不過來。
- 上傳大文件:
二、磁盤 I/O 調優
2.1 ulimit 資源限制
-
配置文件:
/etc/security/limits.conf
資源限制配置文件(通常是
/etc/security/limits.conf
或/etc/security/limits.d/
目錄下的配置文件)中的設置,用于限制系統用戶的進程資源使用上限 -
常用設置:
* soft nofile 1024000 * hard nofile 1024000 * soft nproc 65535 * hard nproc 65535*:表示對 所有用戶 生效(也可以指定具體用戶名,如 root 或 www)soft:軟限制(警告線),超過時系統會警告,但允許臨時超過(直到進程結束)hard:硬限制(強制線),由內核強制執行,絕對不能超過(軟限制不能高于硬限制)nofile:限制 打開文件描述符的數量(包括文件、網絡連接、管道等,Linux 中 “一切皆文件”)nproc:限制 用戶能創建的進程 / 線程數量具體配置的含義:* soft nofile 1024000所有用戶的 軟限制:最多可打開 1024000 個文件描述符(超過會警告)* hard nofile 1024000所有用戶的 硬限制:絕對不能打開超過 1024000 個文件描述符* soft nproc 65535所有用戶的 軟限制:最多可創建 65535 個進程 / 線程(超過會警告)* hard nproc 65535所有用戶的 硬限制:絕對不能創建超過 65535 個進程 / 線程ulimit -n # 查看 nofile 軟限制 ulimit -Hn # 查看 nofile 硬限制 ulimit -u # 查看 nproc 軟限制
-
臨時修改:
ulimit -n 10000
-
永久修改:vim /etc/security/limits.conf 去最尾設置
2.2 測試磁盤速度
-
讀速度測試:
是一個用于測試硬盤讀取速度的命令,主要用于評估磁盤的順序讀取性能
hdparm -t --direct /dev/sdahdparm:Linux 下用于查看和調整硬盤參數的工具-t:測試硬盤的緩存讀取速度(讀取數據時會利用硬盤緩存和系統緩存)--direct:啟用 “直接 IO” 模式(跳過系統緩存,直接從硬盤讀取原始數據,更接近真實的物理讀取速度)/dev/sda:指定要測試的硬盤設備(sda 通常是系統的第一個硬盤)
-
寫速度測試:
dd if=/dev/zero of=/test.dbf bs=1M count=2000 oflag=directdd:Linux 下用于復制和轉換文件的工具,常被用來測試磁盤性能if=/dev/zero:if 表示 “輸入文件”,/dev/zero 是一個特殊設備文件,會不斷生成二進制的 0 數據(可理解為 “無限的空數據來源”)of=/test.dbf:of 表示 “輸出文件”,即把數據寫入到 /test.dbf 這個文件中bs=1M:bs 表示 “塊大小”,這里設置為 1MB(每次讀寫的數據塊大小)count=2000:count 表示 “塊數量”,這里生成 2000 個 1MB 的塊,總文件大小為 2000MB(約 2GB)oflag=direct:oflag 表示 “輸出標志”,direct 啟用直接 IO 模式(跳過系統緩存,直接寫入物理硬盤,更真實反映硬盤寫入速度)
-
時間測試:
time dd if=/dev/zero of=/test.dbf bs=1M count=200 time:用于統計后續命令的執行時間(包括實際耗時、用戶態耗時、內核態耗時) dd:文件復制工具,這里用于生成測試文件if=/dev/zero:輸入源為 /dev/zero(不斷生成空數據,作為寫入的數據源)of=/test.dbf:輸出文件為 /test.dbf(要創建的測試文件)bs=1M:每次讀寫的數據塊大小為 1MBcount=200:共寫入 200 個塊,總文件大小為 200MB(1M × 200)信息詳解:dd 部分的輸出:確認寫入了 200MB 數據652 MB/s 是計算出的寫入速度(總數據量 ÷ 實際耗時)注意:這里沒有 oflag=direct,寫入速度會包含系統緩存的加速效果,可能比硬盤真實物理速度快(尤其是寫入小文件時)。time 部分的輸出:real:實際總耗時(從命令開始到結束的墻鐘時間,0.322 秒)user:命令在用戶態運行的時間(幾乎為 0,因為主要是 IO 操作)sys:命令在內核態運行的時間(0.320 秒,主要是磁盤 IO 的內核處理時間)
三、內核參數調優
3.1 防御 SYN 洪水攻擊
-
修改
/etc/sysctl.conf
:net.ipv4.tcp_synack_retries = 0 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_max_syn_backlog = 20480 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 10 fs.file-max = 819200 net.core.somaxconn = 65535 net.core.rmem_max = 1024123000 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 165536 net.ipv4.ip_local_port_range = 10000 65535
-
生效:
sysctl -p
3.2 關鍵參數說明
tcp_synack_retries=0
:不重發 SYN+ACK,快速釋放半連接。tcp_syncookies=1
:啟用 SYN Cookie 防御少量攻擊。file-max
:系統最大文件句柄數。somaxconn
:最大連接隊列長度。
四、總結與建議
模塊 | 調優手段 | 適用場景 |
---|---|---|
CPU | nice、taskset、vmstat | 高 CPU 負載、多進程調度 |
磁盤 I/O | ulimit、hdparm、dd | 高并發讀寫、備份任務 |
網絡 | Bonding、內核參數 | 高可用、負載均衡、防攻擊 |
內核 | sysctl 參數優化 | 高并發連接、安全防護 |