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

CPU使用率过高怎么办
查看CPU负载最直接的方式是运行 top 或 htop,重点关注 %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 -h 和 vmstat 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)
- 数据库类应用建议使用 deadline 或 none(NVMe)IO 调度器:
echo deadline | sudo tee /sys/block/sda/queue/scheduler - 日志类写入可批量合并、异步刷盘,或迁移到更快存储(如 tmpfs 存临时日志)
网络延迟高或吞吐上不去怎么调优
先用 ss -i 查连接状态与重传、RTT、cwnd;netstat -s 看 TCP 统计异常(如 retransmits、timeouts);iftop 或 iptraf-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










