购买或迁移一台 Linux VPS 时,面板上的“4核”不代表四个独占线程,选错底层类型还会把共享资源争抢当成固定上限。OpenVZ、LXC 等共享内核环境会与宿主争抢 CPU,KVM 则通常拥有独立客户机内核和虚拟硬件。只看 uname -a 或一次跑分,容易把宿主机超售误判为配置不足,也会为用不到的能力付费。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:cncsz(海外服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
可靠结论不能押注单一命令。应把内核标识、DMI 硬件信息、虚拟硬件接口与资源隔离边界交叉验证,再用 CPU 指令集暴露复核。以下步骤适用于常见 Linux 环境。
先运行 systemd-detect-virt,再查看 uname -r、/proc/vz 与已加载模块。OpenVZ 常见 OpenVZ内核标识,线索是定制内核中的 vz 模块或 /proc/vz;LXC 通常直接运行宿主机发行版内核,没有独有 vz 标识,但存在 PID、挂载和网络命名空间。管理员可以隐藏或改写这些字段,因此它们只构成第一层证据。

随后核对 LXC容器边界:比较 /proc/1/ns/pid 与 /proc/self/cgroup,查看 cgroup v2 的 memory.max、cpu.max,并确认网卡是否为 veth、根目录是否使用 overlay。KVM 客户机通常有自己的内核、块设备和虚拟网卡,也不会直接显示宿主机 cgroup 路径;但 cgroup namespace、挂载裁剪或定制系统会模糊边界,不能凭“看不到某文件”定案。
读取 /sys/class/dmi/id/ 下的 product_name、sys_vendor、board_name,可核对 DMI硬件信息。KVM 环境常见 QEMU 等虚拟机提供的 DMI 条目;容器可能继承宿主名称,也可能被改写,所以它能支持判断,却不是可信凭证。CPU 侧的 lscpu 会显示 hypervisor 标志及 vmx、svm 等虚拟化指令集暴露;共享宿主 CPU 的容器也会出现这些字段,屏蔽标志或嵌套配置同样会改变结果。

最后合看虚拟硬件接口与隔离参数:KVM 常见 virtio 块设备、虚拟 SCSI 控制器,这些是典型的 KVM虚拟化特征;容器常见 overlay 根目录和 veth 网络,但 PCI 直通、块设备映射会制造“完整机”假象。再结合 cgroup 配额、CPU steal time、磁盘队列深度和调度延迟,才能解释性能波动来自配置限制还是宿主机争抢。可在 ServLlama 中保存命令输出、CPU 型号、DMI 字段及 cgroup 限额,作为迁移前后的环境基线。结论必须来自多项证据一致,而非商品名称、主机名或一次跑分。
OpenVZ 最稳定的线索是 专用 vz 内核。执行 uname -a、cat /proc/version,若版本或构建字符串含 OpenVZ、virtuozzo,或存在 /proc/vz,通常可判定为 OpenVZ。它虽属于系统容器,却有隔离于宿主机的内核层;普通 LXC 则通常共享宿主机内核。看到容器 ID 或 cgroup 路径,只能证明存在运行时线索,不能据此认定底层是 KVM。
确认 LXC 容器边界,可运行 systemd-detect-virt --container,再查看 cat /proc/1/cgroup、findmnt -T /,并读取 readlink /proc/self/ns/{mnt,pid,net,uts,ipc} 与宿主机对照。若根目录为 overlay,cgroup 带有容器 ID,且挂载、进程和网络命名空间存在差异,便形成了较完整的容器证据链。不过,cgroup v2、systemd 或安全策略可能隐藏路径,PID 1 也可能被运行时伪装,因此不能依赖单一结果。

KVM 虚拟机常见特征包括 CPUID 的 hypervisor 标志位、虚拟 CPU 型号,以及 DMI 中的 KVM、QEMU 等信息,可检查 lscpu、cat /sys/class/dmi/id/sys_vendor 和 product_name。但 hypervisor 位并非 KVM 专属,Xen、VMware、Hyper-V 同样可能设置;DMI 也允许被云平台改写或屏蔽,所以必须交叉验证。
另一个常见误区是把 /dev/kvm 当作虚拟机证明。该设备通常出现在 KVM 宿主机上,普通 KVM 客户机反而未必存在,只有启用嵌套虚拟化或设备透传时才可能看到。CPU 的 vmx、svm 指令也只表示虚拟化扩展可能被暴露,容器继承宿主 CPU 标志时同样会出现,不能单独用于识别。
可执行检查清单:先执行 systemd-detect-virt --vm 与 systemd-detect-virt --container;再检查 cat /proc/version、grep -m1 hypervisor /proc/cpuinfo、cat /sys/class/dmi/id/product_name;随后用 cat /proc/1/cgroup、findmnt -T / 和命名空间链接确认容器边界;最后结合 virt-what、云厂商控制台及供应商文档复核。若权限不足导致 dmidecode -t system 或 dmesg | grep -iE 'kvm|hypervisor' 失败,应记录为“未知”,不要直接判定为非虚拟机。
最终结论应来自证据组合:OpenVZ 内核标记或隔离命名空间指向容器,CPUID 与 DMI 共同指向 KVM;遇到标识被裁剪、透传或篡改时,以服务商资料和实际隔离能力为准。