Linux 性能调优实战:CPU、磁盘 I/O、网络与内核参数
前言
一、CPU 资源调优
1. 调整进程优先级(nice/renice)
2. 设置 CPU 亲和力(taskset)
3. 查看 CPU 信息
4. 使用 vmstat 分析系统瓶颈
二、磁盘 I/O 调优
1. ulimit 资源限制
2. 磁盘速度测试
三、内核参数调优
1. 常用 sysctl 参数
2. 参数含义详解
四、网络优化:网卡绑定(Bonding)
五、总结
前言
在高并发或高负载场景下,系统默认参数往往不能满足业务需求。本文总结了 CPU、磁盘 I/O、网络和内核参数 的常见调优方法,结合命令示例和实践经验,帮助你快速定位瓶颈并优化系统性能。
一、CPU 资源调优
1. 调整进程优先级(nice/renice)
-
作用:通过调整
nice
值影响进程在 CPU 调度中的优先级。 -
范围:
-20
(最高优先级)到19
(最低优先级),默认值为0
。
示例:
nice -n -5 vim a.txt # 启动进程时设置优先级 renice -n 6 24318 # 调整已运行进程的优先级
可用 ps -o pid,psr,nice,comm -p <进程pid> 查看修改后的优先级
规律:
-
值越小 → 优先级越高 → 更容易抢占 CPU
-
值越大 → 优先级越低 → 更容易被调度延迟
常见用途:让关键服务(如 Nginx、数据库)优先级更高,而让耗时但不紧急的任务(如日志归档)优先级更低。
2. 设置 CPU 亲和力(taskset)
通过 taskset
可以将进程绑定到指定 CPU 核心,减少上下文切换。
taskset -c 0 vim a.txt # 绑定进程到 CPU0 taskset -cp 20146 # 查看 PID=20146 的进程绑定情况 taskset -c 1,3 vim b.txt # 限定进程运行在 CPU1 和 CPU3
注意:查看可用 ps -o pid,psr,comm -p <进程pid>进行查看 (
-
-o pid,psr,comm
→ 指定输出列:进程号、运行 CPU(psr)、进程名 -
-p
→ 指定目标进程
)
适用场景:需要进程稳定占用特定核心时(如数据库、计算密集型应用)。
3. 查看 CPU 信息
cat /proc/cpuinfo
可查看 CPU 型号、核心数、缓存大小、指令集等关键信息。
常用统计:
# 物理 CPU 数 cat /proc/cpuinfo | grep "physical id" | sort | uniq # 逻辑 CPU 数 cat /proc/cpuinfo | grep "processor" | wc -l # 每个 CPU 的核心数 cat /proc/cpuinfo | grep "cpu cores" | uniq
补充:
sort:
对结果排序,把相同的编号放到一起uniq:
去掉相邻的重复行,最后只保留唯一值
4. 使用 vmstat 分析系统瓶颈
vmstat
可以直观反映 CPU 使用情况:
-
r
:就绪队列长度,大于 CPU 核心数×3 → CPU 紧张 -
us
:用户态 CPU 占比 -
sy
:内核态 CPU 占比 -
wa
:I/O 等待时间,高表示磁盘瓶颈 -
id
:CPU 空闲率
示例场景:
-
上传大文件时
wa
占比高 → 磁盘写入繁忙 -
高并发 HTTP 请求时
r
、us
高 → CPU 不够用
二、磁盘 I/O 调优
1. ulimit 资源限制
在 /etc/security/limits.conf
中设置进程的文件句柄数与线程数限制:
* soft nofile 1024000 * hard nofile 1024000 * soft nproc 65535 * hard nproc 65535
查看与修改:
ulimit -n # 查看最大文件描述符 ulimit -u # 查看最大进程数 ulimit -n 10000 # 临时修改
补充:
* soft nofile 1024000
-
作用:设置所有用户的 软限制,即最大文件描述符数(包含文件、socket、管道等)。
-
值:1024000,表示一个进程最多可以同时打开 1024000 个文件。
-
说明:软限制可以临时超过(不超过硬限制),但一般内核会优先以软限制为准。
2. * hard nofile 1024000
-
作用:设置所有用户的 硬限制,即绝对最大文件描述符数。
-
值:1024000。
-
说明:硬限制是系统强制的上限,普通用户不能超过,只能由 root 调整。
3. * soft nproc 65535
-
作用:设置所有用户的 软限制,即最大可用的进程/线程数量。
-
值:65535,表示用户最多可以同时运行 65535 个进程/线程。
-
说明:用于防止单个用户创建过多进程耗尽系统资源。
4. * hard nproc 65535
-
作用:设置所有用户的 硬限制,即进程/线程数量的绝对上限。
-
值:65535。
-
说明:避免 fork 炸弹(无限创建进程)导致系统崩溃。
2. 磁盘速度测试
读速度:
hdparm -t --direct /dev/sda
写速度:
dd if=/dev/zero of=/test.dbf bs=1M count=2000 oflag=direct
统计耗时:
time dd if=/dev/zero of=/test.dbf bs=1M count=200
三、内核参数调优
1. 常用 sysctl 参数
在 /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_fin_timeout = 10 fs.file-max = 819200 net.core.somaxconn = 65535 net.core.netdev_max_backlog = 165536 net.ipv4.ip_local_port_range = 10000 65535
应用修改:
sysctl -p
2. 参数含义详解
-
net.ipv4.tcp_synack_retries = 0
服务端在收到客户端 SYN 后,发送 SYN+ACK 的重试次数。设置为 0 表示不重试,可快速释放半连接资源,适合高并发场景。 -
net.ipv4.tcp_syn_retries = 1
客户端发送 SYN 连接请求的最大重试次数。默认较大(通常为 6),设置为 1 可缩短失败连接的等待时间。 -
net.ipv4.tcp_max_syn_backlog = 20480
TCP 半连接队列长度。值越大,能同时处理的未完成握手连接越多,适合高并发 Web 服务。 -
net.ipv4.tcp_syncookies = 1
启用 SYN Cookie 技术,有效防御 SYN Flood 攻击,但可能对性能有一定影响。 -
net.ipv4.tcp_tw_reuse = 1
允许 TIME_WAIT 状态的套接字被新的连接复用。提高端口利用率,适合短连接场景(如 Web 服务)。 -
net.ipv4.tcp_tw_recycle = 1
加快 TIME_WAIT 套接字的回收。⚠️ 由于 NAT 环境下可能导致问题,新内核版本已废弃,不推荐在公网环境启用。 -
net.ipv4.tcp_fin_timeout = 10
TCP 连接在 FIN_WAIT_2 状态下的超时时间(默认 60 秒)。调小可更快释放无效连接。 -
fs.file-max = 819200
系统级文件描述符最大值。直接决定整个系统能同时打开的文件/连接数。 -
net.core.somaxconn = 65535
系统级最大监听队列长度(影响listen()
)。默认值较小(128),需要调大以承载高并发连接。 -
net.core.rmem_max = 1024123000
套接字接收缓冲区的最大值(字节),适合大数据传输或高带宽环境。 -
net.core.wmem_max = 16777216
套接字发送缓冲区的最大值(字节),适合大吞吐量应用。 -
net.core.netdev_max_backlog = 165536
网络接口接收队列长度。值越大,可缓存更多数据包,减少丢包风险。 -
net.ipv4.ip_local_port_range = 10000 65535
系统可用的本地端口范围。适合大规模短连接应用,避免端口耗尽。
📌 调优建议:
-
Web/应用服务器:重点关注
tcp_max_syn_backlog
、somaxconn
、tcp_tw_reuse
、ip_local_port_range
-
数据库服务器:适当调大
rmem_max
和wmem_max
,保证大事务吞吐 -
高并发网关/代理:增加
netdev_max_backlog
,减少丢包
四、网络优化:网卡绑定(Bonding)
常见模式:
-
mode=0
负载均衡(需交换机支持) -
mode=1
主备模式(常用) -
mode=4
LACP 聚合(需交换机支持)
配置示例(主备模式):
nmcli connection add type bond ifname bond0 con-name bond0 miimon 100 mode active-backup primary ens33 ip4 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
验证:
cat /proc/net/bonding/bond0
五、总结
模块 | 调优手段 | 适用场景 |
---|---|---|
CPU | nice、taskset、vmstat | 高 CPU 负载,多进程调度 |
磁盘 I/O | ulimit、hdparm、dd | 高并发读写、备份任务 |
网络 | Bonding、内核参数 | 高可用、负载均衡、防攻击 |
内核 | sysctl 参数优化 | 高并发连接、安全防护 |
📌 建议:调优需结合业务特点和测试验证,盲目修改参数可能带来副作用。