CPU-IO-网络-内核参数的调优
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 参数优化 | 高并发连接、安全防护 |