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

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 值”(优先级的数值表示,范围是 -2019-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,可通过 pstop 查看)或者使用:
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 关键信息解读

  1. 核心数量

    • processor 条目数量 → 总逻辑核心数(包含超线程)。
    • cpu cores → 单个物理 CPU 的物理核心数(如 cpu cores : 4 表示 4 核)。
    • 例:4 物理核 + 超线程 = 8 逻辑核 → 会显示 8 个 processor 条目(0~7)。
  2. 型号和主频

    • model name 直接显示 CPU 型号(如 i7-7700HQ)和基础主频(如 2.80GHz)。
    • cpu MHz 显示当前实时频率(支持睿频的 CPU 会动态变化)。
  3. 厂商和功能

    • 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 大,说明写磁盘繁忙;
  • 复制文件:bibo 都高,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

总结

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

本文档涵盖 Linux 系统性能调优的核心内容,适用于大多数服务器环境。实际使用时请根据具体硬件和业务需求灵活调整参数,建议在测试环境中验证后再应用于生产环境。

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

相关文章:

  • 字库原理 GB2312-80
  • rk3588开发板最新kernel6.1下载(RK3588SDK源码下载)和环境搭建
  • 基于结构化码本的分层DNN框架用于高效语音增强
  • 第18章|变量:把数据装进“盒子”的正确方式
  • 【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程
  • 【开发配置】GitLab CR(Code Review)规则配置清单
  • 论文翻译:BRILLM: BRAIN-INSPIRED LARGE LANGUAGE MODEL
  • 在Excel和WPS表格中通过查找替换对单元格批量强制换行
  • 【C++】map 容器的使用
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • Python基础:PyMySQL
  • 音视频开发学习路线梳理(附 GitHub 仓库)
  • 达梦数据库-控制文件 (二)
  • FPGA开发流程
  • 一键搭建开发环境:制作bash shell脚本
  • Apple Silicon Mac 上解决 Docker 平台不匹配和 QEMU 段错误问题
  • 腾讯云服务器重启卡住:原因分析与底层原理详解
  • AI-调查研究-62-机器人 机械臂五大应用场景详解:从焊接到手术,从农田到太空
  • Knife4j 文档展示异常的小坑
  • GBDT(Gradient Boosting Decision Tree,梯度提升决策树)总结梳理
  • 如何设置 Lustre 文件系统并在其上运行 PostgreSQL
  • 设计模式9-责任链模式
  • UDC否定响应码学习
  • 未成功:使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)
  • 《StarRocks、Doris、ClickHouse 深度对比:三大 OLAP 引擎的优劣与应用场景》
  • go的实现arp客户端
  • 《方法论》--笛卡尔
  • 【学习笔记】非异步安全函数(禁止在信号处理中调用)
  • 雷卯针对香橙派Orange Pi 4开发板防雷防静电方案
  • 【Golang】 项目启动方法