当前位置: 首页 > news >正文

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 请求时 rus 高 → 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_backlogsomaxconntcp_tw_reuseip_local_port_range

  • 数据库服务器:适当调大 rmem_maxwmem_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

五、总结

模块调优手段适用场景
CPUnice、taskset、vmstat高 CPU 负载,多进程调度
磁盘 I/Oulimit、hdparm、dd高并发读写、备份任务
网络Bonding、内核参数高可用、负载均衡、防攻击
内核sysctl 参数优化高并发连接、安全防护

📌 建议:调优需结合业务特点和测试验证,盲目修改参数可能带来副作用。

http://www.dtcms.com/a/353169.html

相关文章:

  • 系统架构设计师备考第8天——嵌入式系统
  • 工业网络安全:保护制造系统和数据
  • Linux 系统CPU-IO-网络-内核参数的调优
  • 【学习笔记】GB 42250-2022标准解析
  • 手写MyBatis第36弹:MyBatis执行流程中SQL命令类型解析
  • Effective c++ 35条款详解
  • docker run 后报错/bin/bash: /bin/bash: cannot execute binary file总结
  • Python计算点云的欧式、马氏、最近邻、平均、倒角距离(Chamfer Distance)
  • iOS技术之通过Charles抓包http、https数据
  • 【开题答辩全过程】以Trlig(服装网站)为例,包含答辩的问题和答案
  • ETH PPS 配置链路
  • 车载诊断架构 --- 基于整车功能的正向诊断需求开发
  • Ruoyi-cloud 微服务部署双方案:本地与 K8S 实践手册
  • FastAPI + SQLModel 从 0 搭到完整 CRUD
  • 腾讯云人脸库技术架构深度解析
  • Github 3k+ star,中后台管理系统框架,支持多款 UI 组件库,兼容PC、移动端!比商业系统还专业!!
  • IntelliJ IDEA Debug 模式功能指南
  • 微算法科技(NASDAQ:MLGO)突破性FPGA仿真算法技术助力Grover搜索,显著提升量子计算仿真效率
  • 【数据结构】树和二叉树——树和森林
  • Python音频分析与线性回归:探索声音中的数学之美
  • 基于 Qt 实现的动态流程图画板框架设计与实现
  • 储能变流器学习之MPPT
  • 教程:按年份导出中国县级 NDVI(月均值 CSV)
  • 【87页PPT】新能源汽车解决方案(附下载方式)
  • 把 AI 塞进「盲文点显器」——基于触觉反馈的离线双向翻译笔
  • 【RAG】使用llamaindex进行RAG开发
  • 【前端】Devtools使用
  • 日志输出触发的死锁问题排查记录
  • Android 中 spinner / AppCompatSpinner 文字颜色 和 显示样式 源码分析
  • 如何轻松地将数据从安卓设备传输到安卓设备