0

0

Linux系统负载优化教程_CPU内存磁盘网络瓶颈调优

冷漠man

冷漠man

发布时间:2026-01-02 18:27:08

|

147人浏览过

|

来源于php中文网

原创

CPU负载高时用top/htop查看%CPU和load average,超核心数需排查进程、上下文切换、中断等;内存不足时用free/vmstat分析swap和缓存,调swappiness、限制内存、清理cache;I/O瓶颈用iostat/iotop定位,调调度器和挂载参数;网络问题用ss/netstat分析,优化RPS、缓冲区和TIME_WAIT。

linux系统负载优化教程_cpu内存磁盘网络瓶颈调优

CPU使用率过高怎么办

查看CPU负载最直接的方式是运行 tophtop,重点关注 %CPU 列和平均负载(load average)。若 1 分钟负载持续高于 CPU 核心数,说明存在压力。

常见原因包括:单进程占满 CPU、频繁上下文切换、软中断/硬中断偏高、大量短生命周期进程(如 fork 爆炸)。

  • pidstat -u 1 定位具体占用高的进程和线程
  • perf top 查看内核态热点函数(需安装 perf 工具
  • 检查是否因锁竞争导致自旋或调度延迟,可结合 pidstat -w 1 观察 cswch/s(每秒上下文切换次数)
  • 确认是否开启 CPU 频率调节器(如 ondemand),在性能敏感场景建议设为 performance 模式:
    echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

内存不足或频繁换页怎么处理

运行 free -hvmstat 1,关注 si/so(swap in/out)、pgpgin/pgpgout、以及 cat /proc/meminfo 中的 Active/Inactive、SwapCached、PageTables 等字段。

即使物理内存未耗尽,也可能因内核内存分配(如 slab、page cache 过度缓存)或内存碎片引发 OOM Killer 启动。

  • slabtop 查看内核 slab 分配器占用,重点关注 dentry、inode_cache、ext4_inode_cache 等
  • 限制用户进程内存使用:对关键服务配置 systemd 的 MemoryLimit=,或用 cgroup v2 手动控制
  • 调整 swappiness(默认 60):降低值(如 10)可减少主动 swap,命令:
    sudo sysctl vm.swappiness=10(临时);写入 /etc/sysctl.conf 持久生效
  • 清理 page cache(仅调试用):
    echo 3 | sudo tee /proc/sys/vm/drop_caches

磁盘 I/O 成为瓶颈如何识别与缓解

iostat -x 1 关注 %util(接近 100% 表示设备饱和)、await(I/O 平均等待时间)、r_await/w_await、svctm(已弃用,参考 await 即可)及 %iowait(需结合 CPU 整体使用率判断)。

阿里云-虚拟数字人
阿里云-虚拟数字人

阿里云-虚拟数字人是什么? ...

下载

高 iowait 不一定代表磁盘慢,也可能是进程阻塞在同步 I/O(如 fsync、direct I/O 等待落盘)。

  • iotop -o 找出实际发起 I/O 的进程和线程
  • 检查文件系统挂载参数:禁用 atime(noatime,nodiratime)、启用 barrier(如需数据安全)或关闭(如 SSD 上可设 barrier=0
  • 数据库类应用建议使用 deadlinenone(NVMe)IO 调度器:
    echo deadline | sudo tee /sys/block/sda/queue/scheduler
  • 日志类写入可批量合并、异步刷盘,或迁移到更快存储(如 tmpfs 存临时日志)

网络延迟高或吞吐上不去怎么调优

先用 ss -i 查连接状态与重传、RTT、cwnd;netstat -s 看 TCP 统计异常(如 retransmits、timeouts);iftopiptraf-ng 观察实时流量分布。

常见瓶颈点:网卡中断集中到单个 CPU、TCP 缓冲区过小、TIME_WAIT 连接堆积、网卡 offload 功能异常、MTU 不匹配。

  • 启用 RPS/RFS(软件层面多队列分发):
    echo 3ff | sudo tee /sys/class/net/eth0/queues/rx-0/rps_cpus(适配 CPU 掩码)
  • 增大 socket 缓冲区:
    sudo sysctl -w net.core.rmem_max=16777216
    sudo sysctl -w net.core.wmem_max=16777216
  • 优化 TIME_WAIT:适当缩短 net.ipv4.tcp_fin_timeout,或启用 net.ipv4.tcp_tw_reuse=1(客户端适用)
  • 确认网卡驱动与固件版本,开启 GSO/TSO/LRO/GRO:
    ethtool -K eth0 gso on tso on gro on

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

373

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

563

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

459

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.06

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

473

2023.08.10

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

335

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2068

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

346

2023.08.31

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.4万人学习

Git 教程
Git 教程

共21课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号