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

Linux 系统调优与CPU-IO-网络内核参数调优

1. Linux系统调优

1.1 安装工具包

在开始监控前,需要确保系统已安装以下工具包,它们是后续操作的基础:

  • sysstat:包含 mpstat、iostat、sar 等核心统计工具
  • iotop:专门监控磁盘 I/O 的进程级工具
  • nethogs:按进程查看网络占用的利器
  • nload:实时可视化网络带宽的工具
  • httpd-tools:含 ab 压力测试工具(用于网络测试)

以 CentOS 为例,安装命令如下:

yum install sysstat iotop nethogs nload httpd-tools -y

Ubuntu/Debian 系统则用apt-get install替代即可。

1.2 CPU 负载查看

CPU 是系统的 “大脑”,一旦过载,整个系统都会变慢。下面这些工具能帮你快速定位 CPU 问题。

1. 快速看负载:uptime

最简单的负载查看命令,执行后一秒出结果:

uptime
# 示例输出:16:30:45 up 2 days,  4:12,  2 users,  load average: 1.25, 0.98, 0.85

输出解读:

  • 前半部分是当前时间、系统运行时长、登录用户数
  • 关键看最后三个数字:1 分钟、5 分钟、15 分钟平均负载
  • 判断标准:若 1 分钟负载 > CPU 核心数(可通过lscpu | grep "CPU(s):"查看核心数),说明系统可能短暂过载,需结合 5/15 分钟趋势 —— 如果三者都高,那就是真过载了。

比如我这台机器是 1 核 CPU,1 分钟负载 1.25>1,说明此刻有点 “忙”,但 5/15 分钟负载在下降,问题不大。

2. 实时监控进程:top

top能实时显示进程 CPU 占用。执行top后,按大写 P,进程会按 CPU 使用率降序排列,谁在 “吃 CPU” 一目了然:

top
# 按P后,表头%CPU列会标红,高占用进程排在最前面

如果想退出,按q即可。

3. 批量查高 CPU 进程:ps

如果不想实时监控,只想一次性导出前 10 个高 CPU 进程,用ps命令更方便:

ps -aux --sort -pcpu | head -10

参数解读:

  • -aux:列出所有进程(包括无终端的后台进程),显示 CPU、内存等详细信息
  • --sort -pcpu:按 CPU 使用率(pcpu)降序排列(负号表示降序)
  • | head -10:只显示前 10 条结果,避免输出太多看不过来

4. 看 CPU 核心详情:mpstat

如果想知道每个 CPU 核心的负载(比如是不是某一个核心被占满),用mpstat(来自 sysstat 包):

mpstat -P ALL 1 5
# -P ALL:显示所有核心(包括整体平均)
# 1 5:每1秒采样一次,共采样5次

重点关注这几列:

  • %usr:用户空间进程占用 CPU 比例(比如 Java、Python 程序)
  • %sys:内核空间占用 CPU 比例(比如系统调用、驱动)
  • %iowait:CPU 等待 I/O 的时间比例(如果这个值高,说明不是 CPU 本身忙,而是等磁盘 / 网络)
  • %idle:CPU 空闲比例(越低越忙)

1.3 内存运行状态查看

内存不足时,系统会用磁盘当 “虚拟内存”(swap),而磁盘速度比内存慢 100 倍以上,所以内存监控也很关键。

1. 快速看内存:free

执行free -m(-m 表示以 MB 为单位,更直观):

关键看available 列:这是系统实际可用的内存(包括可回收的缓存),比 free 列更准确。如果 available 很低,说明内存紧张。

2. 看详细内存信息:/proc/meminfo

/proc/meminfo是内核暴露的内存详情文件,用cat查看:

cat /proc/meminfo

重点关注两项:

  • Active:活跃内存(正在被使用,不容易释放)
  • Inactive:非活跃内存(暂时不用,系统可换出到 swap)
    如果 Inactive 很高,说明内存有 “闲置”,可通过调整内核参数释放。

3. 实时看进程内存:top + M

和看 CPU 类似,执行top后按大写 M,进程会按内存使用率降序排列,能快速找到 “内存大户”。

4. 批量查高内存进程:ps

一次性导出前 10 个高内存进程:

ps -aux --sort -rss | head -10
# --sort -rss:按物理内存占用(RSS)降序排列

1.4 磁盘 I/O状态查看

磁盘 I/O 是很多系统的性能瓶颈 —— 比如数据库读写频繁、日志写入量大时,磁盘会成为 “短板”。

1. 先看文件系统块大小

不同文件系统的块大小会影响 I/O 效率(比如 4KB 块适合小文件,64KB 适合大文件),先确认块大小:

  • EXT4/EXT3 系统(常见于旧服务器):
    tune2fs -l /dev/sda1 | grep "Block size"
    # 示例输出:Block size:               4096(4KB)
    
  • XFS 系统(常见于 CentOS 7+):
    xfs_growfs -l /dev/sda1 | grep bsize
    # 示例输出:bsize=4096(4KB)
    

2. 监控磁盘整体 I/O:iostat

iostat能看磁盘的读写速度,执行:

iostat -d -k -p /dev/sda 1 5
# -d:只显示磁盘统计(不显示CPU)
# -k:以KB为单位(默认是块,不直观)
# -p /dev/sda:显示sda磁盘及所有分区
# 1 5:每1秒采样一次,共5次

重点关注:

  • kB_read/s:每秒从磁盘读取的数据量
  • kB_wrtn/s:每秒写入磁盘的数据量
    如果这两个值持续很高(比如超过磁盘标称的 IOPS),说明磁盘很忙。

3. 测试磁盘写入速度:dd

想知道磁盘实际能跑多快,用dd命令做个简单测试(注意:会生成 1GB 大文件,测试后可删除):

dd if=/dev/zero of=testfile bs=1M count=1000; sync
# if=/dev/zero:从“零设备”读数据(无限输出0,不占CPU)
# of=testfile:写入到testfile文件
# bs=1M:每次读写1MB块
# count=1000:共写1000块,总大小1GB
# sync:强制刷内存到磁盘(避免缓存影响结果)

执行后会显示写入速度,比如 “1000+0 records out,1048576000 bytes (1.0 GB) copied, 12.345 seconds, 84.9 MB/s”,表示写入速度约 85MB/s。

4. 看进程级 I/O:iotop

iostat能看磁盘整体情况,但想知道哪个进程在频繁读写,需要iotop(需 root 权限):

iotop -o -d 1
# -o:只显示正在产生I/O的进程(过滤空进程,更简洁)
# -d 1:每秒刷新一次

测试方法:在另一个终端执行find /(遍历整个文件系统,产生大量 I/O),再看iotop输出,就能看到find进程的读写情况。

1.5 网络状态查看

无论是 Web 服务还是数据库同步,网络问题都会直接影响业务,下面两个工具能帮你监控网络。

1. 实时看带宽:nload

nload是可视化工具,执行后能看到流入(Incoming)和流出(Outgoing)的带宽使用:

nload
# 界面左侧是流入,右侧是流出,显示当前/平均/最大速率

比如 “Curr: 41.12 kBit/s” 表示当前流入速率 41KB/s,“Max: 1.33 MBit/s” 是峰值。

2. 按进程看网络:nethogs

想知道哪个进程在占用带宽(比如是不是某个下载进程占满了带宽),用nethogs

nethogs

测试方法:在另一个终端用wget https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso下载大文件,再看nethogs,就能看到wget进程的下载带宽。

1.6 系统整体状态查看

如果想一次性看 CPU、内存、磁盘、网络的整体情况,vmstatsar是最佳选择。

1. 实时全局监控:vmstat

执行vmstat 1 5(每 1 秒采样一次,共 5 次):

vmstat 1 5

重点关注这些列:

  • r:运行队列长度(长期 > CPU 核心数,说明 CPU 不够用)
  • b:阻塞进程数(高则 I/O 忙)
  • si/so:swap 换入 / 换出(非 0 说明内存不足)
  • bi/bo:磁盘读写块数(高则磁盘忙)
  • wa:CPU 等待 I/O 时间占比(>20% 则 I/O 是瓶颈)
  • us/sy:用户态 / 内核态 CPU 占比(us 高是应用忙,sy 高是系统调用多)
  • id:CPU 空闲占比(低则 CPU 忙)

2. 记录历史状态:sar

sar不仅能实时监控,还能记录历史数据,方便后续分析(比如排查 “昨天下午系统卡顿” 的原因)。

  • 记录 CPU 状态(保存到 cpu.sar 文件):

    sar -u 2 5 -o cpu.sar
    # -u:监控CPU
    # 2 5:每2秒采样一次,共5次
    # -o cpu.sar:保存到文件
    

    后续查看记录:sar -u -f cpu.sar

  • 记录内存状态

    sar -r 1 5
    # -r:监控内存和swap
    
  • 记录网络状态

    sar -n DEV 1 5
    # -n DEV:监控网络接口(如eth0)
    # 重点看rxkB/s(接收)、txkB/s(发送)
    
  • 查看系统自带的历史日志
    系统默认会在/var/log/sa目录下保存历史 sar 日志(如 sa15 表示 15 号的日志),查看 15 号的网络日志:

    sar -n DEV -f /var/log/sa/sa15
    

2. CPU、磁盘 I/O、网络与内核参数调优

2.1 CPU 资源调优

1. 调整进程优先级(nice 值)

  • 作用:通过修改nice值改变进程 CPU 调度优先级,实现资源合理分配。
  • 范围-20(最高优先级)~19(最低优先级),默认值为0
  • 核心命令
    • 启动时设置:nice -n -5 vim a.txt,将vim a.txt进程的nice值设为-5,提升其优先级,系统繁忙时优先分配 CPU。
    • 运行中修改:renice -n 6 24318,将 PID 为24318的进程nice值设为6,降低优先级,使其 “谦让” CPU 资源。
  • 关键规律nice值越小,进程优先级越高,获取 CPU 资源越多;值越大,优先级越低,资源获取越少。
  • 适用场景:给核心业务进程(如服务器进程)提权,给后台备份等非紧急进程降权。

2. 设置 CPU 亲和力(taskset)

  • 作用:将进程绑定到指定 CPU 核心,减少上下文切换开销,提升运行稳定性。
  • 安装:需先安装util-linux包(yum install util-linux)。
  • 核心命令
    • 绑定单个核心:taskset -c 0 vim a.txt,启动的vim进程仅在 CPU0 上运行。
    • 查看绑定情况:taskset -cp 20146,查看 PID 为20146进程的 CPU 绑定核心(示例输出绑定 CPU0)。
    • 绑定多个核心:taskset -c 1,3 vim b.txtvim进程仅在 CPU1 和 CPU3 间调度。

3. 查看 CPU 信息(cat /proc/cpuinfo)

  • 作用:读取/proc虚拟文件系统,获取 CPU 硬件详细参数,相当于 “CPU 身份证”。
  • 核心信息解读
    • 核心数量:processor条目数 = 总逻辑核心数(含超线程);cpu cores= 单个物理 CPU 的物理核心数(如cpu cores : 4表示 4 核)。
    • 型号与主频:model name显示 CPU 型号(如i7-7700HQ)和基础主频;cpu MHz显示实时运行频率(动态调频时会变化)。
    • 厂商与功能:vendor_id区分 Intel/AMD;flags列出支持的指令集(如avx2加速多媒体、vmx支持虚拟化)。
  • 常用操作指令
    • 查看物理 CPU 数量:cat /proc/cpuinfo | grep "physical id" | sort | uniq
    • 查看逻辑 CPU 数量:cat /proc/cpuinfo | grep "processor" | sort -u | wc -l
    • 查看 CPU 核数:cat /proc/cpuinfo | grep "cpu cores" | sort | uniq

4. 用 vmstat 分析系统瓶颈

  • 关键指标
    • r:等待运行的进程数,持续大于 “CPU 核心数 ×3” 表示 CPU 繁忙。
    • us:用户态 CPU 时间占比,高则说明应用程序消耗资源多。
    • sy:系统态 CPU 时间占比,高则表示内核消耗资源多。
    • wa:CPU 等待 I/O 的时间占比,高则提示磁盘 I/O 存在瓶颈。
    • id:空闲 CPU 时间占比,低则表示 CPU 负载高。
  • 实战场景对应
    • 上传大文件:wa高、bo(每秒写入块数)大,说明写磁盘繁忙。
    • 复制文件:bi(每秒读取块数)和bo均高、wa高,说明磁盘读写均繁忙。
    • 高并发 HTTP 请求:r高、us高,说明 CPU 处理能力不足。

2.2 磁盘 I/O 调优

1. ulimit 资源限制

  • 配置文件/etc/security/limits.conf(或/etc/security/limits.d/目录下文件),用于限制用户进程资源上限。
  • 常用设置(对所有用户生效)
    • * soft nofile 1024000:软限制,最多打开 1024000 个文件描述符(超限时警告)。
    • * hard nofile 1024000:硬限制,绝对不能超过 1024000 个文件描述符(软限制≤硬限制)。
    • * soft nproc 65535:软限制,最多创建 65535 个进程 / 线程(超限时警告)。
    • * hard nproc 65535:硬限制,绝对不能超过 65535 个进程 / 线程。
  • 查看与临时修改
    • 查看nofile软限制:ulimit -n;硬限制:ulimit -Hn
    • 查看nproc软限制:ulimit -u
    • 临时修改nofile限制:ulimit -n 10000(重启后失效)。

2. 测试磁盘速度

  • 读速度测试hdparm -t --direct /dev/sda
    • hdparm:硬盘参数查看与调整工具;-t测试缓存读取速度;--direct启用直接 IO(跳过系统缓存,反映真实物理读速);/dev/sda指定测试硬盘。
  • 写速度测试dd if=/dev/zero of=/test.dbf bs=1M count=2000 oflag=direct
    • dd:文件复制工具;if=/dev/zero从 “无限空数据设备” 读数据;of=/test.dbf写入到test.dbfbs=1M块大小 1MB;count=2000共 2000 块(约 2GB);oflag=direct直接 IO(跳过缓存,反映真实物理写速)。
  • 时间测试time dd if=/dev/zero of=/test.dbf bs=1M count=200
    • time统计命令耗时;无oflag=direct时,速度含系统缓存加速,需注意与真实物理速度区分。
    • 输出解读:real为实际总耗时,user为用户态耗时,sys为内核态耗时(主要是磁盘 IO 处理时间)。

2.3 内核参数调优(防御 SYN 洪水攻击)

1. 配置文件与参数

  • 修改文件/etc/sysctl.conf,添加以下参数:

    plaintext

    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(使配置立即生效)。

2. 关键参数说明

  • tcp_synack_retries = 0:不重发 SYN+ACK 包,快速释放半连接。
  • tcp_syncookies = 1:启用 SYN Cookie,防御少量 SYN 洪水攻击。
  • fs.file-max = 819200:设置系统最大文件句柄数。
  • net.core.somaxconn = 65535:设置最大连接队列长度。

2.4 扩展:网卡绑定(Bonding)

1. 常用模式

  • mode=0:负载均衡,需交换机支持。
  • mode=1:主备模式,常用(一个网卡故障时自动切换到备用网卡)。
  • mode=4:LACP 聚合,需交换机支持。

2. 配置命令(主备模式示例)

# 创建bond0连接,指定主备模式、监控间隔、主网卡及IP
nmcli connection add type bond ifname bond0 con-name bond0 miimon 100 mode active-backup primary ens33 ip4 192.168.1.63/24
# 添加ens33为bond从网卡
nmcli connection add type bond-slave ifname ens33 master bond0
# 添加ens38为bond从网卡
nmcli connection add type bond-slave ifname ens38 master bond0

3. 验证命令

cat /proc/net/bonding/bond0,查看网卡绑定状态。

2.5 调优模块汇总表

模块调优手段适用场景
CPUnice、taskset、vmstat高 CPU 负载、多进程调度优化
磁盘 I/Oulimit、hdparm、dd高并发读写、磁盘速度测试与优化
网络网卡 Bonding、内核参数(防 SYN 攻击)高可用、负载均衡、网络安全防护
内核sysctl 参数优化(连接、文件句柄等)高并发连接、系统资源限制调整

3. 总结

3.1 核心监控工具

  1. CPU

    • 负载:uptime(1/5/15 分钟负载,超 CPU 核心数需警惕)
    • 进程:top(按 P 排序)、ps -aux --sort -pcpu | head -6(前 6 高耗进程)
    • 详情:mpstat -P ALL 1 5(各核心使用率)
  2. 内存

    • 概览:free -m(关注 available 列)
    • 详情:cat /proc/meminfo(Active/Inactive)
    • 进程:top(按 M 排序)、ps -aux --sort -rss | head -10
  3. 磁盘 I/O

    • 信息:XFS 用xfs_growfs -l,EXT4 用tune2fs -l(查块大小)
    • 统计:iostat -d -k -p /dev/sda 1 5(读写速率)
    • 进程:iotop -o -d 1(实时 I/O 进程)
    • 测试:dd if=/dev/zero of=testfile bs=1M count=1000; sync
  4. 网络

    • 带宽:nload(实时流入 / 流出)
    • 进程:nethogs(各进程占用)
    • 压测:ab -n 1000 -c 2 网址
  5. 整体状态

    • 实时:vmstat 1 5(运行队列、I/O 等待等)
    • 记录:sar(CPU / 内存 / 网络,支持历史查询)

3.2 关键调优手段

  1. CPU

    • 优先级:nice/renice(-20~19,值小优先级高)
    • 亲和性:taskset -c 核心号 进程(减少切换)
  2. 磁盘 I/O

    • 限制:/etc/security/limits.conf(设 nofile/nproc 上限)
    • 测速:hdparm -t --direct(读)、time dd(时间统计)
  3. 内核

    • 配置:/etc/sysctl.conf(防 SYN 攻击:tcp_syncookies=1;高并发:somaxconn=65535等)
    • 生效:sysctl -p
http://www.xdnf.cn/news/1377793.html

相关文章:

  • MySQL InnoDB vs MyISAM
  • 深度学习——卷积神经网络CNN(原理:基本结构流程、卷积层、池化层、全连接层等)
  • LeetCode - 反转链表 / K 个一组翻转链表
  • day2_softmax回归的实现 李沐动手学深度学习pytorch记录
  • 神经网络学习笔记12——高效卷积神经网络架构MobileNet
  • PLC_博图系列☞基本指令”S_ODT:分配接通延时定时器参数并启动“
  • leecode-三数之和
  • 如何防御安全标识符 (SID) 历史记录注入
  • 【Linux实时内核机制】ww_rt_mutex 的contending_lock异常问题
  • wireshark解析FLV插件分享
  • Unity Shader unity文档学习笔记(二十一):几种草体的实现方式(透明度剔除,GPU Instaning, 曲面细分+几何着色器实现)
  • HTML5超详细学习内容
  • GPIO推挽和开漏的名称由来和本质含义
  • FactoryBean接口作用
  • 使用Stone 3D快速制作第一人称视角在线小游戏
  • 【PyTorch】基于YOLO的多目标检测项目(二)
  • 基于Cursor AI IDE的Vue3留言板系统实战:从零搭建到智能优化全流程
  • 《金融对账系统雪崩隐患的深度复盘与架构重生》
  • 从CTFshow-pwn入门-pwn40理解64位栈溢出不都需要堆栈平衡
  • 致远OA新闻公告讨论调查信息查询SQL
  • Linux操作系统——TCP服务端并发模型
  • 域名、ip、DSN、URL
  • 虚拟机逃逸攻防演练
  • 装饰器模式(C++python)
  • 如何提升素材检索效率?语义搜索在 DAM 中的应用效果全解
  • 广东省省考备考(第八十八天8.27)——判断推理(听课后强化训练)
  • 基于NXP iMXRT600音频算法开发方法
  • 【ros-humble】【虚拟机】网络配置
  • 【leetcode】105. 从前序与中序遍历序列构造二叉树
  • 机器视觉学习-day05-图片颜色识别及颜色替换