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

Linux 系统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 关键参数说明

扩展:网卡绑定(Bonding)

四、总结与建议

难点与注意事项

实践建议


重点工具与功能

类别工具名主要用途常用命令示例
CPU 监控uptime查看系统平均负载uptime
top实时进程监控,按 CPU/内存排序top → 按 P/M
mpstat多核 CPU 使用详情mpstat -P ALL 1 5
ps查看进程 CPU/内存使用排名ps -aux --sort -pcpu | head -10
内存监控free查看内存使用情况free -m
/proc/meminfo查看详细内存信息cat /proc/meminfo
磁盘 I/Oiostat磁盘 I/O 统计iostat -d -k -p /dev/sda 1 5
iotop实时进程 I/O 监控iotop -o -d 1
dd磁盘写入性能测试dd if=/dev/zero of=testfile bs=1M count=1000
网络监控nload实时网络带宽监控nload
nethogs按进程查看网络流量nethogs
abHTTP 压力测试ab -n 1000 -c 2 http://example.com/
系统整体vmstat系统整体状态(CPU/内存/I/O/进程)vmstat 1 5
sar系统活动报告,支持历史数据sar -u 2 5 -o cpu.sar

一、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          # 绑定到 CPU0
    ​taskset: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: 0
    ​
    3)taskset -c 1,3 vim b.txt        # 绑定到 CPU1 和 CPU3
    启动进程时,绑定到多个 CPU 核心(核心列表)。
    ​-c 1,3:指定进程只能在 CPU1 和 CPU3 上运行(核心编号用逗号分隔)
    ​
    效果:这个 vim 进程会在 CPU1 和 CPU3 之间被调度,但不会跑到其他核心(如 CPU0、CPU2),适合需要限制进程使用特定核心组的场景。
    ​
    ​
    ​
    测试   ps -o psr -p 9999
    top  F P(空格)   q​示例 
    

    ​
    ​

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:  # 电源管理相关特性(如节能、调频技术)

详细详解:

  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 配置。

操作指令

  • 物理cpu:物理cpu数量,实际服务器中插槽上的cpu个数

    cat /proc/cpuinfo | grep "physical id" | sort |uniq

    sort 降序 uniq去重

  • 逻辑cpu:操作系统可以使用逻辑CPU来模拟出真实CPU的效果

    cat /proc/cpuinfo | grep "processor" | sort -u | wc -l

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 大,说明写磁盘繁忙。

    • 复制文件:bibo 都高,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/sda
    ​
    ​hdparm:Linux 下用于查看和调整硬盘参数的工具-t:测试硬盘的缓存读取速度(读取数据时会利用硬盘缓存和系统缓存)--direct:启用 “直接 IO” 模式(跳过系统缓存,直接从硬盘读取原始数据,更接近真实的物理读取速度)/dev/sda:指定要测试的硬盘设备(sda 通常是系统的第一个硬盘)
    ​

  • 写速度测试

    dd if=/dev/zero of=/test.dbf bs=1M count=2000 oflag=direct
    ​
    ​dd: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:最大连接队列长度。

扩展:网卡绑定(Bonding)

bond 双网卡 流量分担 保证业务不断

  • 模式

    • 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 参数优化高并发连接、安全防护

难点与注意事项

  1. 负载解读

    • uptime 输出的负载值需与 CPU 核心数对比,>1 表示可能过载。

    • 需结合 1/5/15 分钟负载趋势综合判断。

  2. I/O 瓶颈判断

    • vmstat 中 wa 值 >20% 表示 I/O 可能成为瓶颈。

    • iowait 高不一定表示磁盘慢,可能是进程等待 I/O。

  3. 内存与 Swap

    • vmstat 中 si/so 非零表示正在使用 Swap,可能内存不足。

    • free 中的 available 列更反映实际可用内存。

  4. 网络带宽分析

    • nload 可查看实时带宽,nethogs 可定位具体进程流量。

    • ab 可用于模拟 HTTP 请求,测试服务端性能。

实践建议

  1. 组合使用工具:如 top + iotop + nethogs 可全面定位 CPU/I/O/网络问题。

  2. 历史数据分析:使用 sar 记录并分析历史性能数据,便于趋势判断。

  3. 模拟测试:使用 ddab 等工具模拟高负载场景,验证系统承受能力。

  4. 权限注意:部分工具(如 iotopnethogs)需 root 权限运行。

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

相关文章:

  • 【学习笔记】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 文字颜色 和 显示样式 源码分析
  • 如何轻松地将数据从安卓设备传输到安卓设备
  • 构建AI智能体:十五、超越关键词搜索:向量数据库如何解锁语义理解新纪元
  • 使用 html2canvas + jspdf 实现页面元素下载为pdf文件
  • Transformer 模型在自动语音识别(ASR)中的应用