Proxmox 性能调优全攻略

Proxmox 性能调优全攻略

系列文章 #8 | 后 VMware 时代企业虚拟化实战

目录

  1. 调优的基本原则
  2. [CPU 调优](#CPU 调优)
  3. 内存调优
  4. [磁盘 I/O 调优](#磁盘 I/O 调优)
  5. 网络调优
  6. [Guest OS 内调优](#Guest OS 内调优)
  7. 性能基准测试
  8. 典型场景调优案例

一、调优的基本原则

  1. 先测量,再调优:没 baseline 就没有调优
  2. 一次只改一个参数:否则无法归因
  3. 关注瓶颈,不要"通用优化":CPU 不是瓶颈时调 CPU 没意义
  4. 记录每次变更:方便回滚和复盘

性能瓶颈定位工具链:

bash 复制代码
# 整体概览
top / htop / atop

# CPU
mpstat -P ALL 1
perf top

# 内存
free -h / slabtop

# 磁盘
iostat -xz 1
iotop

# 网络
iftop / nload / sar -n DEV 1

# 综合
dstat -tcmnd 1

二、CPU 调优

2.1 CPU Type 选择

PVE 默认 CPU 类型 kvm64 是最大兼容性,但性能损失大。选项:

CPU 类型 适用 性能
kvm64 最大兼容
x86-64-v2-AES 2012+ CPU
x86-64-v3 Haswell+ (2013+) 较高
x86-64-v4 AVX-512 最高
host 直接透传物理 CPU 最高(不能迁移异构)

推荐 :集群 CPU 一致用 host,否则用 x86-64-v3

2.2 NUMA 配置

多路 CPU(2 socket+)必配 NUMA,避免跨节点访问:

复制代码
VM → Hardware → Processors:
  Sockets: 2
  Cores: 8
  NUMA: [✓]

CLI:

bash 复制代码
qm set 100 --numa 1 --sockets 2 --cores 8

2.3 CPU Pinning(极致场景)

绑定 VM 到特定物理核,避免调度抖动:

bash 复制代码
# 查看拓扑
lscpu -e

# 编辑 VM 配置
echo "args: -cpu host,+topoext -smp sockets=1,cores=4,threads=1 -object memory-backend-ram,id=ram0,size=16G,host-nodes=0,policy=bind -numa node,memdev=ram0" >> /etc/pve/qemu-server/100.conf

代价:失去灵活性,不能自由迁移。仅用于 DB 等关键应用。

2.4 vCPU 超分比例

业务类型 推荐比例 说明
CPU 密集(编码、DB) 1:1 不超分
Web 应用 1:2 - 1:4 适度超分
办公/测试 1:4 - 1:8 可以激进

监控 pve_cpu_ready,持续 > 5% 说明超分过度。


三、内存调优

3.1 Ballooning

开启气球驱动可动态回收未用内存:

复制代码
VM → Hardware → Memory:
  Minimum: 2048
  Maximum: 8192
  Ballooning: [✓]

注意 :DB/JVM 类应用禁用 balloon,否则 GC 抖动。

3.2 HugePages(大页内存)

对大内存 VM(> 16GB)显著减少 TLB miss:

bash 复制代码
# 计算需要的 2M 大页数量(如 32GB VM)
echo "vm.nr_hugepages = 16384" >> /etc/sysctl.conf
sysctl -p

# 验证
grep HugePages /proc/meminfo

VM 配置:

复制代码
qm set 100 --hugepages 1024   # 1GB 大页
# 或 2 表示 2MB 大页

3.3 KSM(Kernel Same-Page Merging)

相当于 VMware TPS,去重相同内存页。默认开启:

bash 复制代码
systemctl status ksmtuned
cat /sys/kernel/mm/ksm/pages_sharing   # 已合并页数

缺点:CPU 有开销,安全隐患(Side channel)。内存充足时可关。

3.4 VM 内存对齐

bash 复制代码
# 禁用 swap 尽量让 VM 用物理内存
sysctl vm.swappiness=10

# 关闭透明大页(和 HugePages 冲突)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

四、磁盘 I/O 调优

4.1 存储后端性能对比

后端 顺序读 4K 随机读 延迟
Local NVMe 7 GB/s 600K IOPS µs 级
Local SATA SSD 500 MB/s 80K IOPS ms 级
Ceph 25GbE 6 GB/s 200K IOPS 2-5ms
Ceph 10GbE 1.2 GB/s 60K IOPS 5-10ms
NFS over 10GbE 1 GB/s 30K IOPS 3-8ms

4.2 VM 磁盘缓存策略

Cache 模式 性能 数据安全 说明
none 推荐默认
writethrough 最高 DB 用
writeback 最高 非关键业务 + UPS
unsafe 最高 仅测试
directsync -
bash 复制代码
qm set 100 --scsi0 local-zfs:vm-100-disk-0,cache=none

4.3 SCSI Controller 选择

必选 VirtIO SCSI single:每个磁盘独立 queue,支持 IO 多线程。

bash 复制代码
qm set 100 --scsihw virtio-scsi-single
qm set 100 --scsi0 local-zfs:vm-100-disk-0,iothread=1,ssd=1,discard=on
  • iothread=1:独立 IO 线程
  • ssd=1:上报 SSD,Guest 会用 TRIM
  • discard=on:回收已删除块(thin provisioning 必开)

4.4 ZFS 专项

bash 复制代码
# 根据盘类型调
zfs set recordsize=16K pool/vm   # DB 用小块
zfs set recordsize=128K pool/vm  # 默认,通用
zfs set primarycache=metadata pool/vm  # 内存紧张时

# ARC 大小限制
echo "options zfs zfs_arc_max=17179869184" > /etc/modprobe.d/zfs.conf  # 16GB
update-initramfs -u

4.5 磁盘 IO 调度器

bash 复制代码
# NVMe 用 none,SSD 用 mq-deadline,HDD 用 bfq
echo none > /sys/block/nvme0n1/queue/scheduler
echo mq-deadline > /sys/block/sda/queue/scheduler

五、网络调优

5.1 MTU Jumbo Frame

bash 复制代码
# Host
ip link set eno1 mtu 9000

# VM 内 (Linux)
ip link set eth0 mtu 9000

注意:链路全程必须都支持 9000,否则分片反而慢。

5.2 VirtIO 多队列

bash 复制代码
# 8 queue 可跑满 25GbE
qm set 100 --net0 virtio,bridge=vmbr0,queues=8

VM 内启用:

bash 复制代码
ethtool -L eth0 combined 8

5.3 内核网络参数

bash 复制代码
# /etc/sysctl.conf
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_congestion_control = bbr
sysctl -p

5.4 SR-IOV(直通场景)

网卡支持 SR-IOV 时,VF(虚拟功能)直通给 VM,绕过软件交换机:

bash 复制代码
# 启用 VF
echo 4 > /sys/class/net/eno1/device/sriov_numvfs

# VM 直通 VF
qm set 100 --hostpci0 0000:01:10.0

性能等同物理网卡,但失去迁移能力。


六、Guest OS 内调优

6.1 Linux VM

bash 复制代码
# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 时钟源
echo kvm-clock > /sys/devices/system/clocksource/clocksource0/current_clocksource

# IRQ 均衡
systemctl enable --now irqbalance

# 安装 qemu-guest-agent
apt install qemu-guest-agent

6.2 Windows VM

复制代码
1. 安装 virtio-win 最新驱动
2. 关闭可视特效(性能选项)
3. 关闭 Windows Search / Superfetch(服务器版)
4. 电源选项设"高性能"
5. 禁用不需要的服务(Print Spooler 等)
6. 安装 QEMU Guest Agent

七、性能基准测试

7.1 CPU

bash 复制代码
# sysbench
sysbench cpu --threads=8 --time=60 run

# 预期:现代 CPU 单核 1000+ events/s

7.2 内存

bash 复制代码
sysbench memory --memory-block-size=1M --memory-total-size=100G run
# 预期:DDR4 > 10 GB/s

7.3 磁盘

bash 复制代码
# fio 随机 4K 读写
fio --name=rand --rw=randrw --bs=4k --size=10G \
    --numjobs=8 --iodepth=32 --runtime=60 \
    --group_reporting --direct=1

# 顺序读写
fio --name=seq --rw=rw --bs=1M --size=10G \
    --numjobs=1 --iodepth=16 --runtime=60 \
    --direct=1

7.4 网络

bash 复制代码
# 服务端
iperf3 -s

# 客户端
iperf3 -c <server> -P 8 -t 60

八、典型场景调优案例

8.1 MySQL/PostgreSQL DB

复制代码
CPU: host, 1:1 不超分, NUMA 开
内存: 无 balloon, HugePages 开
磁盘: cache=none, iothread=1, Local NVMe 或 Ceph NVMe
网络: VirtIO, 多队列, jumbo frame

8.2 高密度 Web 服务器

复制代码
CPU: 1:4 超分, x86-64-v3
内存: balloon 可开
磁盘: cache=writeback(有 UPS)
网络: 1GbE 够,无需调优

8.3 Jenkins/CI 构建机

复制代码
CPU: 1:2, host
内存: 大(> 32GB)
磁盘: Local NVMe + writeback, iothread
网络: 10GbE(下载包用)

8.4 GPU 计算 VM

复制代码
CPU: host, pinning
PCI 直通: GPU passthrough
IOMMU: 启用
内存: HugePages, balloon 关

结语

性能调优不是拼参数,是拼对瓶颈的判断。先测量、再调优、一次一个变量------这三条做到了,调优效果不会差。常见的"通用优化指南"大部分对你的具体场景收益有限,根据业务画像针对性调整才是正解。

下一篇 → 虚拟化平台横评:Proxmox vs XCP-ng vs OpenStack vs Nutanix

相关推荐
caimouse7 分钟前
Reactos 第 9 章 设备驱动 — 9.14 IRP请求的完成与返回
windows
虾壳云官方11 分钟前
openclaw 一键安装教程(2026年6月15最新)
运维·人工智能·windows·自动化·openclaw
qq_338432372 小时前
VSCode Remote-SSH 远程 Windows Server 卡死的排查与解决
windows·vscode·ssh
大佐不会说日语~2 小时前
在 Windows 本地用 Docker 部署向量模型(bge-m3)
windows·docker·容器·llm·ollama
凡人叶枫2 小时前
Effective C++ 条款37:绝不重新定义继承而来的缺省参数值
linux·c++·windows
ccino .3 小时前
【电脑的睡眠和休眠区别】
windows
AndyHuang19764 小时前
【避坑指南】Visual Studio 插件报错 “Windows Terminal (wt.exe) was not found in PATH“ 完美解决
ide·windows·visual studio
2601_961875244 小时前
花生十三资料网盘|百度云|下载
数据库·windows·git·svn·eclipse·github
caimouse4 小时前
Reactos 第 10 章 网络操作 — 10.1 概述
网络·windows
CingSyuan4 小时前
服务器现场排障:在 Windows 下使用 Linux reader 直接查看 Linux 系统 U 盘中的日志文件与文件结构
linux·运维·服务器·网络·windows