# Linux笔记:操作系统优化与资源管理
0、服务器选型
选型核心思路
根据业务场景,匹配 CPU、内存、存储、网络 四类资源,让它们“门当户对”,避免瓶颈或资源浪费。
云服务器 CPU 与内存配比
物理 CPU 与 vCPU 的关系:一颗物理 CPU 有 32 物理核 × 2(超线程)= 64 vCPU(虚拟核)
| 服务器类型 | CPU:内存配比 | 典型应用场景 |
|---|---|---|
| 算力密集型 | 1:2(1vcpu:2G) | Web应用、API网关、代码编译 |
| 内存密集型 | 1:8 | Redis、Elasticsearch、MySQL |
| IO密集型 | 重点看磁盘类型 | 数据库(高IOPS场景) |
| 通用型 | 1:4 | 大多数普通业务 |
| GPU服务器 | 重点看GPU规格 | 大模型训练/推理 |
云服务器推荐
首选:c6.2xlarge.2(通用计算增强型) —— 8 vCPU + 16 GiB 内存,性能稳定,适合生产环境。
物理服务器推荐
面试题参考: 2路 CPU = 2 个物理 CPU,64核,256G 内存。服务器 CPU 一般是 Intel 志强处理器。
| 组件 | 推荐配置 |
|---|---|
| CPU | Intel Xeon 系列。通用计算选 16-32 核;高性能计算/AI 选 64 核以上 |
| 内存 | DDR5 ECC 内存。通用服务器 64GB 起;虚拟化/数据库 256GB 或更高 |
| 存储 | NVMe SSD 成系统盘标配。高性能 NVMe SSD + 大容量 SATA HDD |
| 网络 | 万兆(10GbE)主流,向 25GbE/100GbE 演进。双口 10GbE 网卡并支持链路聚合(从逻辑上看是一个网卡) |
一、Linux 操作系统优化
优化原则
先监控、后调优。盲目修改参数可能引发新的系统风险。基于可观测数据逐层排查,每次只调整一个变量并闭环验证。
明确优化目标
| 业务类型 | 关注指标 |
|---|---|
| 计算密集型(科学计算、渲染) | CPU频率、Cache命中率、上下文切换 |
| 网络密集型(网关、Nginx) | 网络栈参数、网卡队列、中断亲和性 |
| 存储密集型(数据库、消息队列) | IO调度算法、文件系统挂载参数、Page Cache |
1.1 系统安装(生产环境规范)
- 操作系统分区必须安装在 RAID 1 上(系统盘冗余,防止单盘故障导致系统无法启动)
- 数据盘采用 RAID 1 / RAID 5 / RAID 10,根据业务对性能和容错的需求选择
- 不推荐使用 LVM:生产环境严重不推荐 LVM 管理磁盘分区。LVM 的动态扩容功能对现在大硬盘时代来说,基本上没有用处了,且增加了管理复杂度和故障恢复难度
- 操作系统最小化安装:只安装必要的软件包,减少攻击面,降低系统资源消耗
- BIOS 固件优化:将 BIOS 电源管理设置为
Performance或OS Control,禁用深度睡眠状态,以降低 CPU 唤醒延迟
1.2 系统调优(tuned)
tuned-adm 常用命令
| 命令 | 作用 | 示例 |
|---|---|---|
list |
列出所有可用调优配置文件,标记当前激活的 | tuned-adm list |
active |
查看当前激活的配置文件名称 | tuned-adm active |
profile |
切换到指定的配置文件(核心命令) | sudo tuned-adm profile throughput-performance |
recommend |
根据系统类型自动推荐合适配置文件 | tuned-adm recommend |
verify |
验证当前系统设置是否与激活的配置文件匹配 | tuned-adm verify |
常见调优场景
# 虚拟机宿主机
tuned-adm profile virtual-host
# 物理机高并发服务(Redis、MySQL)
tuned-adm profile throughput-performance
# 对延迟极度敏感的业务
tuned-adm profile latency-performance
# Oracle 数据库专项优化
tuned-adm profile oracle
单独调优(内核参数)
并不是所有服务器都需要做高并发性能调优。一般来说,只需要对处理高并发请求的服务器(前端服务器、后端服务器、数据库服务器)进行内核参数调优即可。
常见调优参数有两类:
① 单个进程最大打开文件数
[root@hd1 ~]# vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
② TCP 相关参数(高并发通信优化)
[root@hd1 ~]# vim /etc/sysctl.conf
# 为防止洪水攻击,高并发系统需要将此项关闭
net.ipv4.tcp_syncookies = 0
# 开启 TCP 连接重用
net.ipv4.tcp_tw_reuse = 1
# 开启快速回收 TIME-WAIT 状态连接(⚠️ 注意:该参数在新内核中已被废弃,不推荐使用)
net.ipv4.tcp_tw_recycle = 1
# 修改超时时间(s),连接由本端关闭时处于 FIN-WAIT-2 状态的时间
net.ipv4.tcp_fin_timeout = 30
# keepalive 探测包发送间隔(s),默认 2 小时
net.ipv4.tcp_keepalive_time = 1200
# 服务器对外连接的端口范围
net.ipv4.ip_local_port_range = 1024 65535
# SYN 队列长度,默认为 1024
net.ipv4.tcp_max_syn_backlog = 65535
# TIME-WAIT 状态连接最大数量,默认为 180000
net.ipv4.tcp_max_tw_buckets = 5000
# 网卡接收数据包队列最大数目
net.core.netdev_max_backlog = 65535
# TCP 最大连接数
net.core.somaxconn = 65535
# 接收缓冲内存默认值(字节)
net.core.rmem_default = 8388608
# 接收缓冲内存最大值(字节)
net.core.rmem_max = 16777216
# 发送缓冲内存默认值(字节)
net.core.wmem_default = 8388608
# 发送缓冲内存最大值(字节)
net.core.wmem_max = 16777216
# 避免时间戳异常(⚠️ 注意:设置为 0 可能影响 TCP 性能,推荐保持默认值 1)
net.ipv4.tcp_timestamps = 0
# TCP 最大孤儿套接字数,防止 DoS 攻击
net.ipv4.tcp_max_orphans = 3276800
# 立即生效
sysctl -p
1.3 CPU 亲和性与隔离
原理
将 OS 系统进程隔离到特定 CPU 核心,让业务进程独占剩余核心,避免上下文切换开销。
隔离核心(修改 /etc/default/grub)
GRUB_CMDLINE_LINUX="... isolcpus=2-7 nohz_full=2-7 rcu_nocbs=2-7"
参数说明:
isolcpus=2-7:将核心 2-7 从内核调度器中隔离出来,系统进程无法使用这些核心nohz_full=2-7:在这些核心上关闭 tick(时钟中断),进一步减少干扰rcu_nocbs=2-7:将这些核心从 RCU(Read-Copy-Update)回调处理中排除
配置后需更新 GRUB:
grub2-mkconfig -o /boot/grub2/grub.cfg,然后重启生效。
绑定业务进程
# 将 PID 为 1234 的进程绑定到核心 0 和 1
taskset -cp 0,1 1234
# 启动时绑定(如 Redis)
numactl --cpunodebind=0 --membind=0 redis-server
1.4 磁盘与文件系统优化
磁盘类型
| 类型 | 说明 |
|---|---|
| 机械磁盘(HDD) | 传统磁盘,有物理寻道延迟 |
| 固态磁盘(SSD) | 无机械结构,速度快 |
| NVMe SSD | 通过 PCIe 总线直连 CPU,速度极快 |
IO 调度算法
| 设备类型 | 推荐调度器 | 说明 |
|---|---|---|
| NVMe SSD | none |
NVMe 固态硬盘速度极快,调度器起不到调度作用,反而会成为多余中间件降低读写速率 |
| 普通 SSD / SAS 盘 | mq-deadline |
硬件不够智能,需要软件兜底;避免“请求饿死” |
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 修改为 none(NVMe 推荐)
echo none > /sys/block/nvme0n1/queue/scheduler
1.5 网络协议栈深度优化
适用于高并发 TCP 服务(如 Nginx、网关)的经典配置:
# 文件句柄限制
fs.file-max = 2097152
# 连接队列
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
# 内存与缓冲区(单位:字节)
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
# TCP 连接优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65535
# 拥塞控制(BBR 在高延迟丢包环境下表现优秀)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
1.6 配置时间同步(生产必做)
# 启动 chronyd 服务
systemctl enable --now chronyd
# 同步阿里云时间服务器
sed -i 's/^pool.*/server ntp.aliyun.com iburst/' /etc/chrony.conf
systemctl restart chronyd
# 验证时间
date
chronyc sources
二、服务器负载分析
在性能调优时,需先对服务器负载进行分析,主要分析 CPU使用率、内存使用率、磁盘I/O、服务器负载、带宽使用情况。
2.1 CPU 使用率
CPU 使用率反映 CPU 的忙碌情况。当 CPU 达到 100% 时,部分进程会进入等待状态。生产环境 CPU 使用率建议控制在 75% 以下,若多次高于 75%,应考虑增加服务器。
2.1.1 vmstat
显示系统各资源间相关性能的简要信息。
vmstat 1 5 # 每秒刷新,共5次

关键字段解读:
| 字段 | 说明 |
|---|---|
r |
运行和等待 CPU 时间片的进程数。若长期 > CPU 核心数 × 2~4,说明 CPU 不足 |
b |
等待资源的进程数 |
swpd |
交换分区使用量(KB) |
free |
空闲物理内存(KB) |
buff |
缓冲区内存(块设备读写) |
cache |
页面缓存内存(频繁访问的文件会被缓存) |
bi |
从块设备读入数据总量(读磁盘 KB) |
bo |
写入块设备数据总量(写磁盘 KB) |
us |
用户进程消耗 CPU 时间百分比 |
sy |
内核进程消耗 CPU 百分比 |
id |
空闲百分比 |
wa |
I/O 等待占用 CPU 百分比(值越高,I/O 等待越严重) |
st |
当前虚拟机被宿主机(物理机)强制“抢走”CPU 的时间百分比, 0是最理想的状态 |
2.1.2 htop
交互式进程查看器,与 top 类似但界面更友好。
# 安装
yum install htop -y
yum install stress-ng -y # 压力测试工具

# 压力测试 CPU(-c 4 表示启动 4 个进程,-t 10m 表示运行 10 分钟)
stress-ng -c 4 -t 10m
2.1.3 实战测验
查找 CPU 占用最高的进程
# top 命令中按大写 P,按 CPU 使用率降序排列
top
# 然后按 P
查找内存占用最高的进程
# top 命令中按大写 M,按内存使用率降序排列
top
# 然后按 M
# 按实际内存使用排序(RSS)
ps -aux --sort -rss | more
ps -aux --sort -rss | head -n 10 # 查看前 10 个
--sort -rss :指定排序规则more :分页显示
2.2 内存相关
free 命令解读

free -h
| 字段 | 说明 |
|---|---|
total |
总容量 |
used |
已使用容量 |
free |
空闲容量 |
shared |
共享内存 |
buff |
缓冲(缓冲区数据) |
cache |
缓存(文件系统缓存) |
内存压力测试
# stress-ng 内存压测(-m 4 表示 4 个进程)
stress-ng -m 4 --timeout 10m
Memtester 内存硬件测试
Memtester 是一款开源、轻量、命令行的内存测试工具,用于检测物理内存(RAM)的硬件错误与稳定性。
# 安装
yum install -y memtester
# 压测(压测 8G 内存两轮)
memtester 8G 2
要点:
- 内存占用率变大,CPU 占用率也会变大
- CPU 占用率变大,内存占用率不一定会变大
2.3 磁盘 I/O
磁盘 I/O 指磁盘的读写。日志、文件操作、数据库操作都会造成磁盘读写压力,其中以数据库操作为甚——高并发下数据库往往首先成为系统瓶颈。
1. iostat(磁盘监控推荐工具)
# 安装
yum install sysstat -y
# 查看磁盘总体读写情况(1 秒刷新一次)
iostat -x 1

关键指标:
| 指标 | 说明 | 警戒值 |
|---|---|---|
%idle |
CPU 除去等待磁盘 I/O 以外的空闲时间百分比 | 应保持 > 70% |
%util |
设备用于 I/O 操作的时间百分比 | 应 < 70%,100% 表示满负载 |
为了降低磁盘负载,可以采用性能更高的磁盘(SSD)或者降低磁盘的操作频率(异步写、合并写)
2. dd 磁盘测试
dd:一个强大的磁盘复制和转换工具
# 写入测试,使用dd生成一个 10000 × 1MB = 10GB 的文件
dd if=/dev/zero of=/tmp/22.txt bs=1M count=10000; sync
sync将内存中的数据强制写入磁盘。只做 dd 不执行 sync,不容易看出实际写入效果。
大量的写入操作,会导致磁盘io的饱和度非常高,会对cpu造成一定的影响,但是不大

不同的磁盘类型有对应的速度参考范围:
机械硬盘(HDD):100~200 MB/s
SATA SSD:400~550 MB/s
NVMe SSD:1500~7000+ MB/s
3. fio 磁盘压测
fio 可测试 IOPS、吞吐量、IO 延迟,支持多种 IO 引擎。
# 安装
yum -y install fio
# 顺序写
fio -filename=/dev/test -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
# 顺序读
fio -filename=/dev/test -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
# 随机写
fio -filename=/dev/test -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest
4.场景实战
场景1:公司的服务器很卡,查看CPU使用率不高,内存也够用,但是就是卡,尤其时在打开新程序或者文件的时候,更卡,此时问题出现在哪?
这是典型的磁盘 I/O 瓶颈,可以通过iotop查看是哪个程序。
iotop(查找 I/O 占用最高的进程):
# 安装
yum -y install iotop
# 显示正在使用磁盘的进程
iotop -o -d 1
参数说明:
-o(–only):只显示在读写硬盘的程序-d SEC:设定刷新时间间隔
场景2 :stress-ng 磁盘 I/O 压测
# 测试磁盘 I/O 写入(-d 4 表示 4 个进程)
stress-ng -d 4 -t 10m
场景3 :检测磁盘坏道
磁盘坏道典型现象:
- 读取磁盘数据时设备发出异常声响
- 访问某文件时反复读取且出错,提示文件损坏
- 新建分区无法完成格式化
- 系统使用该磁盘时频繁死机
# 检查磁盘坏道
badblocks -sv /dev/sda
# 修复 ext4 磁盘坏道
fsck -y /dev/sdb
# 修复 xfs 磁盘坏道
xfs_repair /dev/sdb
2.4 网络
网络使用情况也是监控的重要指标。当带宽不足时会大大增加请求的响应时间。为了防止突发性并发压力,带宽使用率建议控制在 80% 以下。
1. ping 查看网络延迟
ping www.cisco.com
64 bytes from (23.198.100.118): icmp_seq=1 ttl=128 time=196 ms
64 bytes from (23.198.100.118): icmp_seq=2 ttl=128 time=202 ms
局域网网络延时应小于 1ms。
2. nload 查看网络流量负载
# 安装
yum install nload -y
# 执行
nload
执行nload命令后,网络使用情况如下图所示其中,网络使用情况分为流入网卡的数据与流出网卡的数据
指标说明:
Curr:当前网速Avg:平均网速Min:最小网速Max:最大网速Ttl:总流量
流入网卡 = 下行带宽,流出网卡 = 上行带宽。若 “当前网速” 持续接近 “最大网速”,代表带宽使用率已接近 100%。
3. nethogs(查找带宽占用最高的进程)
实战场景:运维人员接到 IDC 机房电话,说网站对外输出流量很大。
# 安装依赖
yum install libpcap libpcap-devel
# 安装 nethogs
yum -y install nethogs
# 监视指定网卡网络带宽
nethogs ens33
4. 小结
- 内存不可达到 100% 占用,否则系统卡死,导致 OOM (内存溢出)
- 网络、磁盘 I/O 对 CPU 有影响,但不至于让 CPU 达到 100%;对内存影响不大
- CPU 到达 100% 对内存有影响,但不是特别大
- 内存、网络、磁盘是不可压榨资源,但 CPU 是可压榨资源
5.场景实战
场景:运维人员接到IDC机房电话,说你的网站流量对外输出很多,这样该怎么办
接下来需要使用nethogs找出使用带宽最多的进程
#安装依赖库
[root@hd1 ~]# yum install libpcap libpcap-devel
#安装nethogs
[root@hd1 ~]# yum -y install nethogs
#执行nethogs命令,监视指定网卡网络带宽
[root@hd1 ~]# nethogs ens33
#在另外一个终端执行测试命令如下
[root@hd1 ~]# wget http://清华大学镜像源/gitlab/xxxx
回到第一个终端,查看nethogs的输出
2.5 综合系统资源查看命令 sar
# 安装
yum install sysstat
1. 查看 CPU
# 1 秒间隔,共 5 次
sar -u 1 5

%iowait:CPU 等待磁盘读写完成的时间。若持续 > 10%,说明磁盘是瓶颈,CPU 不干活光等着。%user + %system:两者之和 > 80% 时,CPU 确实在满负荷运行。
2. 查看内存
# 人类可读单位显示
sar -h -r 1 5

kbmemused 与 %memused:实际使用量。
3. 查看交换分区
sar -S 1 5

kbswpused(已使用的交换分区大小):若此项数值持续增加,说明物理内存不够用了。
4. 查看磁盘
# 查看具体某块盘的响应时间
sar -d 1 5

tps:每秒 I/O 请求数。机械盘通常几百,NVMe 盘可达几十万。await:I/O 平均等待时间。若机械盘 > 20ms 或 SSD > 5ms,说明磁盘繁忙或性能衰退。
5. 查看网络
默认网络单位是
bit/s,存储单位是byte。
# n 表示网络,DEV 表示网络设备
sar -n DEV 1 5

rxpck/s:接收的包数txpck/s:发送的包数rxkB/s / txkB/s:每秒接收(rx)和发送(tx)的数据量,单位是千字节(KB/s)。(二者相加的最高值或单个的最高值不超网卡的带宽上限。千兆网卡满速约 125000 kB/s)%ifutil:网卡利用率
2.6 网络性能测试工具 iperf3
iperf3 用于测量最大带宽、延迟抖动和数据包丢失等网络性能指标。
服务端:
[root@hd2 ~]# yum -y install iperf3
# -s 服务端模式,-D 后台运行,默认端口 5201
[root@hd2 ~]# iperf3 -s -D
客户端:
[root@hd1 ~]# yum -y install iperf3
# -c 连接服务端,-p 端口,-t 测试时长,-b 限速,-i 结果输出间隔
[root@hd1 ~]# iperf3 -c 192.168.1.12 -p 5201 -t 30 -b 10M -i 1
2.7 带外管理
带外管理 是一种独立于数据网络之外的设备管理和维护方式。通过专用的管理通道(独立的硬件接口或带外控制器),远程访问和控制服务器、网络设备等 IT 基础设施,即使在主操作系统崩溃、网络中断或设备死机时,也能进行故障排查和恢复。
比喻:就像大楼除了正常进出口外,还设有一条消防或维修用的独立通道。

ipmitool 是开源的 IPMI 命令行工具,核心通过 BMC(基板管理控制器) 实现独立于系统的远程硬件管理,支持带内/带外双模式。
核心功能:
- 远程监控硬件状态(温度、电压、风扇、电源)
- 远程开关机/重启
- 查看系统事件日志(SEL)
- 配置 BMC 网络/用户、固件更新
- 无需 OS 运行,通电即可管理
# 安装
yum -y install ipmitool
核心公共选项:
| 选项 | 说明 |
|---|---|
-I lanplus |
指定 IPMI v2.0 协议通过 LAN 通道连接 |
-H <IP> |
目标服务器 BMC IP 地址 |
-U <用户名> |
登录 BMC 的用户名 |
-P <密码> |
登录 BMC 的密码(注意安全风险) |
-f <密码文件> |
更安全的方式,从文件读取密码 |
-L <级别> |
会话权限级别(USER/OPERATOR/ADMINISTRATOR) |
-p <端口> |
BMC UDP 端口,通常为 623 |
-C <认证> |
IPMI v2.0 加密套件,17 是通用且安全的选项 |
本地执行:
# 查看电源状态
ipmitool chassis power status
# 开机
ipmitool chassis power on
#正常关机
ipmitool chassis power soft
#强制关机
ipmitool chassis power off
#重启
ipmitool chassis power reset
#冷重启
ipmitool chassis power cycle
远程执行:
# 远程开机
ipmitool -I lanplus -H <BMC-IP> -U <用户名> -P <密码> chassis power on
三、核心命令速查表
| 场景 | 命令 |
|---|---|
| 查看系统负载 | uptime、top |
| CPU 排序 | top 按 P |
| 内存排序 | top 按 M |
| 系统资源综合 | vmstat 1 5 |
| CPU 综合 | sar -u 1 5 |
| 内存查看 | free -h、sar -h -r 1 5 |
| 磁盘剩余 | df -h |
| 磁盘 I/O | iostat -x 1、sar -d 1 5 |
| I/O 进程 | iotop -o -d 1 |
| 网络流量 | nload、sar -n DEV 1 5 |
| 带宽进程 | nethogs ens33 |
| 网络测试 | iperf3 -c <IP> -p 5201 |
| 内核参数生效 | sysctl -p |
| 调优切换 | tuned-adm profile <profile> |
| 进程绑定 | taskset -cp <核心> <PID> |
| 磁盘坏道 | badblocks -sv /dev/sda |
| 远程硬件管理 | ipmitool -I lanplus -H <BMC-IP> -U <用户> chassis power on |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)