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 系统安装(生产环境规范)

  1. 操作系统分区必须安装在 RAID 1 上(系统盘冗余,防止单盘故障导致系统无法启动)
  2. 数据盘采用 RAID 1 / RAID 5 / RAID 10,根据业务对性能和容错的需求选择
  3. 不推荐使用 LVM:生产环境严重不推荐 LVM 管理磁盘分区。LVM 的动态扩容功能对现在大硬盘时代来说,基本上没有用处了,且增加了管理复杂度和故障恢复难度
  4. 操作系统最小化安装:只安装必要的软件包,减少攻击面,降低系统资源消耗
  5. BIOS 固件优化:将 BIOS 电源管理设置为 PerformanceOS 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:设定刷新时间间隔

场景2stress-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. 小结
  1. 内存不可达到 100% 占用,否则系统卡死,导致 OOM (内存溢出)
  2. 网络、磁盘 I/O 对 CPU 有影响,但不至于让 CPU 达到 100%;对内存影响不大
  3. CPU 到达 100% 对内存有影响,但不是特别大
  4. 内存、网络、磁盘是不可压榨资源,但 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

三、核心命令速查表

场景 命令
查看系统负载 uptimetop
CPU 排序 topP
内存排序 topM
系统资源综合 vmstat 1 5
CPU 综合 sar -u 1 5
内存查看 free -hsar -h -r 1 5
磁盘剩余 df -h
磁盘 I/O iostat -x 1sar -d 1 5
I/O 进程 iotop -o -d 1
网络流量 nloadsar -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
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐