Linux(十九)——CPU、I/O、网络与内核参数调优指南
文章目录
- 前言
- 一、CPU 资源调优
- 1.1 调整进程优先级(nice 值)
- 1.1.1 nice 值范围与含义
- 1.1.2 常用命令
- 1.1.3 注意事项
- 1.2 设置 CPU 亲和力(taskset)
- 1.2.1 安装工具
- 1.2.2 常用命令
- 1.3 查看 CPU 信息(/proc/cpuinfo)
- 1.3.1 命令说明
- 1.3.2 关键信息解读
- 1.3.3 常用查询命令
- 1.4 使用 vmstat 分析系统瓶颈
- 1.4.1 关键指标
- 1.4.2 实战场景
- 二、磁盘 I/O 调优
- 2.1 ulimit 资源限制
- 2.1.1 常用配置
- 2.1.2 查看当前限制
- 2.1.3 ulimit 临时修改
- 2.2 测试磁盘速度
- 2.2.1 读速度测试
- 2.2.2 写速度测试
- 2.2.3 带时间统计的写入测试
- 三、内核参数调优
- 3.1 防御 SYN 洪水攻击
- 3.1.1 推荐配置
- 3.1.2 生效命令
- 3.2 关键参数说明
- 四、网络调优:网卡绑定(Bonding)
- 4.1 绑定模式介绍
- 4.2 配置示例(主备模式)
- 4.3 验证绑定状态
- 总结
前言
在 Linux 系统运维和性能优化过程中,合理配置 CPU、磁盘 I/O、网络以及内核参数是提升系统稳定性和性能的关键。
本文档系统整理了常用的调优方法和命令,涵盖进程优先级调整、CPU 绑定、资源限制、磁盘速度测试、内核网络参数优化等方面,旨在为系统管理员和开发人员提供一份实用、全面的调优参考。
另一篇文档介绍了一些实用的系统调优工具,大家可以参考使用。(系统调优工具指南)
一、CPU 资源调优
1.1 调整进程优先级(nice 值)
通过调整进程的 nice 值,可以改变其在 CPU 调度中的优先级,从而合理分配 CPU 资源。
1.1.1 nice 值范围与含义
- 范围:-20(最高优先级)到 19(最低优先级),默认值为 0。
- 规律:
- nice 值越小(甚至为负),优先级越高,系统会更频繁地调度该进程;
- nice 值越大,优先级越低,系统会减少对其的 CPU 资源分配。
1.1.2 常用命令
1、启动时设置优先级
# 启动时设置优先级
nice -n -5 tail -f a.txt
# 查看进程优先级
ps -elf|grep 'tail -f a.txt'nice:用于给新进程设置 “nice 值”(优先级的数值表示,范围是 -20 到 19)-n -5:指定 nice 值为 -5(数值越小,优先级越高,系统会优先分配 CPU 资源)tail -f a.txt:要启动的进程(这里是用 tail 打开 a.txt,tail -f 可以长时间占用进程)效果:启动的 tail进程会获得较高的 CPU 优先级,在系统繁忙时,它能抢到更多 CPU 时间,操作更流畅
2、修改运行中进程的优先级
# 修改运行中进程的优先级
renice -n 6 4934 # 4934是进程PID
ps -elf|grep 'tail -f a.txt'
1.1.3 注意事项
- nice 值不可超出 -20~19 的范围;
- 主要用于服务器进程优先级提升或后台任务优先级降低,以实现 CPU 资源合理分配。
1.2 设置 CPU 亲和力(taskset)
功能:通过将进程绑定到指定 CPU 核心,减少上下文切换开销,提升性能。
场景:一般用在业务(进程)非常重要,将业务绑定在CPU上(一般绑定2个)
1.2.1 安装工具
yum install -y util-linux
1.2.2 常用命令
1、启动时绑定到指定核心
# 启动时绑定到指定核心
taskset -c 0 tail -f a.txt # 绑定到 CPU0taskset:Linux 中用于设置进程 CPU 亲和力(绑定 CPU 核心)的工具-c 0:-c 表示指定 CPU 核心编号(从 0 开始),这里绑定到第 0 号 CPU 核心tail -f a.txt:要启动的进程(这里是用 tail 打开 a.txt,tail -f 可以长时间占用进程)效果:这个 vim 进程只会在 CPU0 上运行,不会被调度到其他核心,适合需要稳定占用单一核心的场景。
2、查看运行中进程的绑定情况
# 查看运行中进程的绑定情况
taskset -cp 5141 # 查看进程 5141 的 CPU 绑定情况
查看已运行进程的 CPU 绑定情况。-c:显示 CPU 核心编号(更易读)-p:表示操作对象是已存在的进程(通过 PID 指定)5141:目标进程的 PID(进程 ID,可通过 ps 或 top 查看)或者使用:
ps -o psr -p [进程号]
taskset -c 1,3 vim b.txt # 绑定到 CPU1 和 CPU3
启动进程时,绑定到多个 CPU 核心(核心列表)。-c 1,3:指定进程只能在 CPU1 和 CPU3 上运行(核心编号用逗号分隔)效果:这个 vim 进程会在 CPU1 和 CPU3 之间被调度,但不会跑到其他核心(如 CPU0、CPU2),适合需要限制进程使用特定核心组的场景。
1.3 查看 CPU 信息(/proc/cpuinfo)
1.3.1 命令说明
cat /proc/cpuinfo
用于查看 CPU 的详细硬件信息,包括核心数、型号、频率、支持的指令集等。
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 78
model name : Intel(R) Core(TM) i3-6006U CPU @ 2.00GHz
stepping : 3
microcode : 0xf0
cpu MHz : 1992.001
cache size : 3072 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 78
model name : Intel(R) Core(TM) i3-6006U CPU @ 2.00GHz
stepping : 3
microcode : 0xf0
cpu MHz : 1992.001
cache size : 3072 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
vendor_id : GenuineIntel
cpu family : 6
model : 78
model name : Intel(R) Core(TM) i3-6006U CPU @ 2.00GHz
stepping : 3
microcode : 0xf0
cpu MHz : 1992.001
cache size : 3072 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips : 3984.00
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
1.3.2 关键信息解读
-
核心数量:
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 配置。
1.3.3 常用查询命令
1、物理cpu:物理cpu数量,实际服务器中插槽上的cpu个数
# 物理 CPU 数量
cat /proc/cpuinfo | grep "physical id" | sort | uniqsort:sort 命令用于对输入的行进行排序,由于系统中可能有多个物理 CPU 或多个核心,grep "physical id" 的输出可能包含重复的物理 ID,sort 会对这些行按默认顺序,为后续的 uniq 处理做准备。uniq:uniq 命令用于去除连续重复的行。
2、逻辑cpu:操作系统可以使用逻辑CPU来模拟出真实CPU的效果
# 逻辑 CPU 数量
cat /proc/cpuinfo | grep "processor" |sort -u |wc -l
3、cpu核数:一块CPU上面能处理数据的芯片组的数量
# 每颗 CPU 的物理核心数
cat /proc/cpuinfo | grep "cpu cores" | sort | uniq
1.4 使用 vmstat 分析系统瓶颈
vmstat 可实时监控系统资源使用情况,帮助定位性能瓶颈。
1.4.1 关键指标
r
:等待运行的进程数,若持续大于 CPU 核心数 × 3,说明 CPU 繁忙;us
:用户态 CPU 时间占比;sy
:系统态 CPU 时间占比;wa
:等待 I/O 的 CPU 时间占比;id
:空闲 CPU 时间占比。
vmstat 1 5 虚拟内存统计(Virtual Memory Statistics)工具,能全面反映系统运行状态1:采样间隔时间,单位为秒(每 1 秒刷新一次数据)
5:采样次数(总共输出 5 组数据)
1.4.2 实战场景
- 上传大文件:
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/
目录下的配置文件)中的设置,用于限制系统用户的进程资源使用上限
2.1.1 常用配置
* 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 个进程 / 线程
2.1.2 查看当前限制
ulimit -n # 查看 nofile 软限制
ulimit -Hn # 查看 nofile 硬限制
ulimit -u # 查看 nproc 软限制
2.1.3 ulimit 临时修改
# 临时修改nofile软限制
ulimit -n 10000
# 查看 nofile 软限制
ulimit -n
2.2 测试磁盘速度
2.2.1 读速度测试
这是一个用于测试硬盘读取速度的命令,主要用于评估磁盘的顺序读取性能
hdparm -t --direct /dev/sdahdparm:Linux 下用于查看和调整硬盘参数的工具-t:测试硬盘的缓存读取速度(读取数据时会利用硬盘缓存和系统缓存)--direct:启用 “直接 IO” 模式(跳过系统缓存,直接从硬盘读取原始数据,更接近真实的物理读取速度)/dev/sda:指定要测试的硬盘设备(sda 通常是系统的第一个硬盘)
2.2.2 写速度测试
dd if=/dev/zero of=/test.dbf bs=1M count=1000 oflag=directdd:Linux 下用于复制和转换文件的工具,常被用来测试磁盘性能if=/dev/zero:if 表示 “输入文件”,/dev/zero 是一个特殊设备文件,会不断生成二进制的 0 数据(可理解为 “无限的空数据来源”)of=/test.dbf:of 表示 “输出文件”,即把数据写入到 /test.dbf 这个文件中bs=1M:bs 表示 “块大小”,这里设置为 1MB(每次读写的数据块大小)count=1000:count 表示 “块数量”,这里生成 1000 个 1MB 的块,总文件大小为 1000MB(约 1GB)oflag=direct:oflag 表示 “输出标志”,direct 启用直接 IO 模式(跳过系统缓存,直接写入物理硬盘,更真实反映硬盘写入速度)
2.2.3 带时间统计的写入测试
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 数据1.2G/s 是计算出的写入速度(总数据量 ÷ 实际耗时)注意:这里没有 oflag=direct,写入速度会包含系统缓存的加速效果,可能比硬盘真实物理速度快(尤其是写入小文件时)。time 部分的输出:real:实际总耗时(从命令开始到结束的墙钟时间,0.184 秒)user:命令在用户态运行的时间(几乎为 0,因为主要是 IO 操作)sys:命令在内核态运行的时间(0.198 秒,主要是磁盘 IO 的内核处理时间)
三、内核参数调优
3.1 防御 SYN 洪水攻击
通过修改 /etc/sysctl.conf
文件优化网络连接与安全参数。
3.1.1 推荐配置
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
3.1.2 生效命令
修改完/etc/sysctl.conf,记得要让它生效:
# 修改完/etc/sysctl.conf,记得要让它生效
sysctl -p
3.2 关键参数说明
tcp_synack_retries=0
:不重发 SYN+ACK,快速释放半连接;tcp_syncookies=1
:启用 SYN Cookie 防御洪水攻击;file-max
:系统最大文件句柄数;somaxconn
:最大连接队列长度。
四、网络调优:网卡绑定(Bonding)
4.1 绑定模式介绍
mode=0
:负载均衡(需交换机支持);mode=1
:主备模式(常用);mode=4
:LACP 聚合(需交换机支持)。
4.2 配置示例(主备模式)
nmcli connection add type bond ifname bond0 con-name bond0 miimon 100 mode active-backup primary ens33 ip4 192.168.1.63/24- type bond:指定创建的连接类型为 bond(网络绑定)。
- ifname bond0:设置绑定接口的名称为 bond0(实际在系统中显示的接口名)。
- con-name bond0:设置连接配置文件的名称为 bond0(方便管理的标识)。
- miimon 100:配置链路监测间隔为 100 毫秒(检测从接口是否正常)。
- mode active-backup:设置绑定模式为「主备模式」(只有主接口工作,备接口待命,故障时自动切换)。
- primary ens33:指定 ens33 为默认主接口(优先使用该接口传输数据)。
- ip4 192.168.1.63/24:为 bond0 分配静态 IPv4 地址(192.168.1.63,子网掩码 24 位)。
nmcli connection add type bond-slave ifname ens33 master bond0
nmcli connection add type bond-slave ifname ens38 master bond0- type bond-slave:指定创建的是 bond 的从接口。
- ifname ens33/ens38:将物理网卡 ens33/ens38 作为从接口加入 bond。
- master bond0:指定该从接口归属的主 bond 接口为 bond0。
配置完成后,系统将创建一个名为 bond0 的虚拟接口,由主网卡 ens33 和备网卡 ens38 组成:
- 正常情况下,所有网络流量通过主网卡 ens33 传输
- 当检测到 ens33 故障(如网线断开)时,系统会在 100 毫秒内自动切换至备网卡 ens38
- 外部设备只需访问 bond0 的固定 IP(192.168.1.63),无需感知底层物理网卡的切换
该配置方案适用于需要网络高可用的服务器环境,有效避免因单网卡故障导致的服务中断。
4.3 验证绑定状态
cat /proc/net/bonding/bond0
总结
模块 | 调优手段 | 适用场景 |
---|---|---|
CPU | nice、taskset、vmstat | 高 CPU 负载、多进程调度场景 |
磁盘 I/O | ulimit、hdparm、dd | 高并发读写、备份任务 |
网络 | Bonding、内核参数优化 | 高可用、负载均衡、安全防护 |
内核参数 | sysctl 配置调优 | 高并发连接、系统稳定性提升 |
本文档涵盖 Linux 系统性能调优的核心内容,适用于大多数服务器环境。实际使用时请根据具体硬件和业务需求灵活调整参数,建议在测试环境中验证后再应用于生产环境。