买 VPS 时「几核」是最容易被误读的参数之一。原因不复杂:你看到的核数往往不是物理核心数,而商家卖的「共享」与「独享」也没有统一定义。这篇文章只做两件事:把核与线程的关系讲清,给你几个能自己跑的核对命令。

核、线程、vCPU 的层级

先看厂商自己怎么写。AWS 的 EC2 文档在「CPU options」一节的原文:

Many Amazon EC2 instances support simultaneous multithreading (SMT), which enables multiple threads to run concurrently on a single CPU core. Each thread is represented as a virtual CPU (vCPU) on the instance. An instance has a default number of CPU cores, which varies according to instance type. For example, an m5.xlarge instance type has two CPU cores and two threads per core by default—four vCPUs in total.

这段把三层关系讲全了:

  • **物理核心(core)**是硬件单位;
  • SMT / 超线程让一个核心同时跑多个线程;
  • 每个线程对外呈现为一个 vCPU。

所以「4 vCPU」在这个例子里等于「2 个物理核心」,而不是 4 个物理核心。两个线程共享同一个核心的执行单元,单线程性能不会因为线程翻倍而翻倍。

Linux 内核的 CPU 拓扑文档用的是另一套字段名,但说的是同一件事。thread_siblings 的定义原文是:

thread_siblings: internal kernel map of cpuX’s hardware threads within the same core as cpuX.

也就是:内核知道「哪些逻辑 CPU 属于同一个物理核心」。这正是 lscpu 输出里 Thread(s) per core 那一行的来源。

共享核与独享核,差在哪

这两个词是售卖口径,不是技术标准。可核的差别只有一条:宿主的物理核心是否同时分给其他租户使用。

共享核(常见写法:vCPU / shared) 独享核(常见写法:dedicated / 独享 / 绑定)
物理核归属 多租户分时复用 分配给单台实例
你拿到的 CPU 时间额度 固定核心
邻居影响 有,高峰期可能排队 基本没有
超卖可能 有,比例由商家决定 通常不做
价格 低 明显更高

要注意的是:没有任何法规或标准规定这两个词怎么写。同一个词在不同商家那里边界可能完全不同。判断依据只有条款:有没有明确写 dedicated CPU、CPU pinning、no CPU overcommit 这类字眼;只写「高性能」「独享型」但不说明物理核归属的,按未核处理。

三个能自己跑的命令

以下命令的用途依据 man 手册,未在本文环境复现,参数以你所用系统的文档为准。

1. 看拓扑

lscpu 的官方说明是:

lscpu - display information about the CPU architecture

跑完之后重点看四行:

lscpu | grep -Ei "^(CPU\(s\)|Thread|Core|Socket|Model name)"
  • CPU(s):逻辑 CPU 总数,也就是你看到的「核数」;
  • Thread(s) per core:每核线程数,2 就说明开了超线程;
  • Core(s) per socket × Socket(s):物理核心数;
  • Model name:宿主 CPU 型号。

这三者一对照,就能算出「商家写的 4 核」到底是 4 个物理核心,还是 2 核超线程出来的 4 个逻辑 CPU。

2. 看可用处理单元

nproc

官方说明是:

nproc - print the number of processing units available

它给的是当前可用的处理单元数量,通常等于 CPU(s),但在被 cgroup 限制的环境里可能更小。

3. 看有没有被邻居挤

vmstat 1 5

看 st 列(steal time),也可以看 top 第一行的 st。这个值表示虚拟机等待物理 CPU 的时间:持续偏高,说明宿主 CPU 被抢得厉害。

单次采样没意义,要在你自己的业务高峰时段连续看几分钟。本站不做跑分,不给「多少算高」的阈值——不同业务对 CPU 的敏感度差别太大,阈值应该由你自己的业务表现决定。

一个容易踩的坑:容器方案

如果你的 VPS 是 OpenVZ / LXC 这类容器方案(判断方法见 KVM、OpenVZ、LXC 有什么区别),lscpu 读到的很可能是宿主的 CPU 信息,而不是分配给你的额度。部分环境会用 lxcfs 之类的工具做伪装,让数字看起来像独立机器。

这种情况下,CPU(s) 不能当作购买依据。容器方案真正要看的是条款里的 CPU 配额与超限策略。

什么时候值得为独享核多付钱

判断标准不是「独享更高级」,而是你的负载是否持续吃满 CPU:

  • 值得:持续编译、视频转码、数据库高并发、长时间跑满单核的任务。邻居抢 CPU 会直接拉长你的任务时间。
  • 不值得:建站、博客、轻量 API、个人服务。这类负载大部分时间在等 IO 和网络,共享核完全够用。

反过来说,一台共享核机器如果 st 长期很低,实际体验可能好于一台配置虚标的「独享核」机器。参数是承诺,st 是事实。

三个常见误判

误判一:核数越多越快。 单线程性能、内存带宽、磁盘 IO 都会影响结果。4 个逻辑 CPU 可能来自 2 个物理核心,也可能来自 4 个不同核心,性能不是一回事。

误判二:看到 Model name 是高端型号就认为整颗 CPU 归自己。 Model name 只说明宿主用的什么 CPU,不说明你分到多少。共享核方案下,同一颗 CPU 上通常还跑着其他租户。

误判三:用一次压测结果给商家定性。 压测受时段、邻居、磁盘缓存影响很大。本站不写「谁家超卖」这类结论,只提供方法与指标,结论留给你在自己的业务场景里验证。

一句话总结

1 个 vCPU 通常是物理核心上的 1 个线程;共享核卖的是时间额度,独享核卖的是固定核心。核对顺序:先看 lscpu 的三行拓扑,再看条款有没有写明物理核归属,最后在业务高峰看 %st。