1. 项目概述:为什么需要查看CPU信息
在对Linux服务器去进行运维、展开性能调优或者只是从事评估一台二手电脑的有关工作时, 查验CPU详细信息属于一项基础且极为关键的技能。针对Ubuntu用户而言, 不管是桌面版还是服务器版, 系统当中都内置有许多的命令行工具, 这些工具能够使你从不一样的维度去洞察CPU这颗“大脑”的各个方面。这并非仅仅是获取一个型号以及频率这般容易, 它涉及到系统稳定性的探测、软件兼容性的判定、性能瓶颈的解析乃至硬件采购决策。
试想一下这样几个场景, 你所负责的线上服务忽然间响应速度减缓下来, 你得迅速去判断是不是CPU资源已经被耗尽了, 你计划要在服务器上去部署一个数据库, 此时需要确认CPU是不是支持那必要的虚拟化或者指令集, 又或者你刚刚拿到一台云主机, 想要去核实供应商所提供的配置是不是跟合同相契合, 在这些情形之下, lscpu、/proc/cpuinfo等命令就是你手头最为直接、最为可靠的“硬件检测仪”, 把控住它们, 这意味着你具备了与系统硬件直接进行对话的能力。
2. 核心命令详解与使用场景
在Ubuntu环境下, 用作查看CPU信息的命令, 存在着许多, 并且这些命令有着各自不同的侧重之处。接下来, 对于几个最为常用的、最为强大的命令, 我们会挨个将它们分解开来, 还要详细地去说明这些命令输出的含义以及它们典型的使用场景。
2.1, /proc/cpuinfo是底层接口, 它拥有最为全面的信息。
/ proc / cpuinfo并非是一个能够执行的命令, 而是属于一个虚拟性质的文件, 它能够提供在Linux内核视角之下的有关CPU最为详细的信息。你能够采用cat这种命令去查看它, 或者采用less命令去查看它, 又或者采用more命令去查看它。
cat /proc/cpuinfo
它的输出依照逻辑处理器(针对支持超线程的 CPU 而言, 所指的便是线程)列表进行, 每一个逻辑处理器都是一段独立的信息块, 对于一块具有 8 核 16 线程的 CPU, 此处将会存在 16 个信息块, 我们来查看几个关键字段。
实操收获体会: 怎样迅速统计核心数量呢? 有一个极为实用的窍门是进行运用grep命令, 从 /proc/cpuinfo里快速提取相关信息:
# 查看物理CPU个数
cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l
# 查看每个物理CPU的核心数(假设是单路CPU)
cat /proc/cpuinfo | grep “cpu cores” | uniq
# 查看总逻辑CPU数(总线程数)
cat /proc/cpuinfo | grep “processor” | wc -l
你把“总逻辑CPU数”跟“物理核心数”相比较, 就能马上晓得CPU时候开启了超线程(Hyper-Threading)。比如说, 要是物理核心有8个, 总逻辑CPU是16个, 那超线程就是开启的。
2.2 lscpu :人类可读的汇总报告
倘若觉着, /proc/cpuinfo的信息太过原始, 那么, lscpu命令将为你备好。它以一种别类更清晰、结构更规整的方式, 汇总了源自于, /proc/cpuinfo 以及系统架构里被提取出的信息。
直接运行 lscpu ,你会得到类似下面的输出:
架构: x86_64
CPU 运行模式: 32-bit, 64-bit
字节序: Little Endian
CPU: 16
在线 CPU 列表: 0-15
每个核的线程数: 2
每个座的核数: 8
座: 1
NUMA 节点: 1
厂商 ID: GenuineIntel
CPU 系列: 6
型号: 165
型号名称: Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz
步进: 5
CPU MHz: 800.093
CPU 最大 MHz: 5100.0000
CPU 最小 MHz: 800.0000
BogoMIPS: 7599.98
虚拟化: VT-x
L1d 缓存: 256 KiB
L1i 缓存: 256 KiB
L2 缓存: 2 MiB
L3 缓存: 16 MiB
NUMA 节点0 CPU: 0-15
信息解读与场景 :
lscpu命令, 还对一些有用参数予以支持, 诸如lscpu -p, 能够将更为便利于脚本处理的信息, 以CSV格式输出。
2.3, 这是top, 还有htop, 它们展现的是处于动态视角里的CPU状态。
top命令主要用于实时监控系统资源, htop命令同样主要用于实时监控系统资源, 它们还都提供了CPU的宏观视图。
运行 top 后,看第一行:
top - 14:30:01 up 10 days, 3:15, 1 user, load average: 0.08, 0.03, 0.01
呈现在load average之后的那三个数字, 各自表示着系统于过去1分钟之时、过去5分钟之时、过去15分钟之时的平均负载情况。针对于拥有16线程的CPU来讲, 要是负载在长时间范围之内高于16, 那就意味着CPU资源始终处于紧张状态。
摁下1这个按键, 能够将显示每个逻辑CPU核心利用率状况予以展开体现, 这对于察觉到单个核心被充满利用这一问题极其有助益。
hlop是top的升级版, 其界面变得更为友善亲切, 它默认使用彩色条形图形展现各个核心的使用效率的态势情况, 一切显得清清楚楚, 明明白白一目了然。它自身并不供给静态的CPU规定的数值信息, 不过它却是观测CPU在即时工作时的状态状况的最好的工具。
2.4, nproc, 与, getconf这个、_NPROCESSORS_ONLN两者, 快速, 获取, 核心数。
有时所需唯一的只是一个数字: 系统当中可使用的逻辑处理器究竟有多少个。此情形在编写脚本之际, 或者配置软件这样来做(就好比编译之时的 -j 参数那般)的时候, 格外具备实用性。
这两个命令返回的具体结果, 一般情况下, 会跟前述的 /proc/cpuinfo里头所呈现的逻辑处理器数量保持一致。
2.5 dmidecode :获取更深层的硬件信息
那个dmidecode命令, 是直接, 从系统的DMI也就是Desktop Management Interface, 如今叫SMBIOS, 这个表里面提取讯息的数据的, 而这是需要root权限才能够做到的。它能够提供, 连/proc/cpuinfo都不具备的详尽信息, 像是CPU的正规名称, 还有资产标签, 以及序列号也就是部分CPU才支持提取的那种, 等等之类的信息。
sudo dmidecode -t processor

这个命令输出极为详尽, 涵盖制造商, 版本, 序列号, 核心数, 线程数, 当前频率, 最大频率, 外部时钟, 缓存信息等情况, 在对要求万分精细的硬件展开审计期间, 这一命令极具效用。
留意, dmidecode所给出的是由固件(BIOS/UEFI)传达给系统的资讯, 于有些虚拟化环境里, 这些资讯有可能是虚拟化的或者受限的。
3. 进阶分析与实战应用
掌握了基础命令,我们可以结合它们来解决一些实际问题。
3.1 性能监控与瓶颈排查
当系统变慢时,一个标准的排查流程是:
启用htop或者top来作整体查看, 首先要关注平均负载以及总体CPU使用率也就是%Cpu(s)那一行, 要是us即用户空间或者sy即系统空间长期处于高位, 那就表明有进程正在大幅度 consumingCPU。先定位问题进程, 在top中按P(此为按CPU使用率排序的操作), 或者在htop中直接去看排在较前位置的进程。接下来进行深入进程分析, 运用pidstat或perf等工具, 针对可疑进程开展更细致粒度的分析, 以此查看究竟是用户代码方面的问题还是系统调用方面的问题。关联CPU架构: 要是怀疑程序没针对当下CPU的指令集做优化, 那就能够运用lscpu来查看所支持的指令集(Flags字段, 在/proc/cpuinfo里更全面), 比如有没有avx2, avx512等。某些科学计算或者多媒体软件需要特定的指令集方可发挥出最佳性能。3.2虚拟化与云环境下的CPU信息。
看那显示在虚拟机也就是 VM 里头, 或者是像 Docker 这样的容器当中的 CPU 信息, 这可得格外留意着:
3.3 编写脚本自动化收集信息
身为运维人员, 你或许要有规律地去搜集一批服务器的CPU信息, 这儿给出一个简易的Bash脚本示例。
#!/bin/bash
HOSTNAME=$(hostname)
echo “=== CPU信息报告 - $HOSTNAME ===”
echo “生成时间: $(date)”
echo “”
echo “1. CPU型号与架构:”
lscpu | grep -E “架构|型号名称”
echo “”
echo “2. CPU核心与线程拓扑:”
echo “物理CPU数量: $(lscpu | grep ‘^座’ | awk ‘{print $NF}’)”
echo “每CPU物理核心数: $(lscpu | grep ‘每个座的核数’ | awk ‘{print $NF}’)”
echo “每核心线程数: $(lscpu | grep ‘每个核的线程数’ | awk ‘{print $NF}’)”
echo “总逻辑CPU数: $(nproc)”
echo “”
echo “3. 频率信息:”
lscpu | grep -E “CPU MHz|最大 MHz|最小 MHz”
echo “”
echo “4. 缓存信息:”
lscpu | grep -i cache
echo “”
echo “5. 虚拟化支持:”
lscpu | grep -i virtualization
if [ $? -ne 0 ]; then
echo “未检测到硬件虚拟化支持。”
fi
echo “”
echo “=== 报告结束 ===”
把这个脚本存为, cpu_report.sh形式的名称, 给予执行权限, 也就是执行chmod 加 +x的指令 添加到cpu_report.sh上, 如此一来就能够在任意的Ubuntu服务器这一环境上运行起来了。 你能够借助Ansible、SaltStack等工具, 以批量的方式去执行, 并且收集得出的结果。
4. 常见问题与排查技巧实录
在实际操作中,你可能会遇到一些令人困惑的输出或情况。
4.1 频率显示异常低或不变化
遇到的情况是, 当运用 cat /proc/cpuinfo | grep MHz 这种方式去进行查看的时候, 或者是采用 lscpu 这个工具进行查看的时候, 察觉到所有核心的频率皆被锁定在了一个很低的数值上面(就好比是800MHz这样的情况), 哪怕当下系统的负载处于很高的状态, 其频率同样不会往上升高。
排查与解决 :
检测CPU调速器(Governor), Linux内核借由CPUfreq子系统管控频率, 运行cpupower frequency-info查看当下策略, 若策略为powersave, CPU趋向于保持低频。如果你要临时去改成performance, 那可这样来, 就是sudo cpupower frequency-set -g performance。不过, 这样做可是会让功耗有所增加的。还有, 想要检查散热以及温度方面, CPU是存在可能由于过度热而出现降频情况的, 这叫Thermal Throttling。要去安装lm-sensors这个包, 然后去运行sensors命令, 从而以此来来查看CPU的温度情况。温度要是快要接近或者已然达到那TjMax(结温最大值)了, 那就得去清理灰尘, 然后改善散热情况。BIOS/UEFI这样设置: 一些主板或者服务器的BIOS里头可能存在功耗限制或者性能模式选项, 得保证把它们设置成性能优先。虚拟机存在如下限制情况: 在云主机或者虚拟机当中, CPU频率很可能是被宿主管理程序(Hypervisor)给限制住或者是模拟出来的, 没办法达到标称的那个最高频率, 4.2情形下核心数/线程数与预期不相符合。
出现的状况变成了这样一种情形, 即系统所探测到的核心数, 或者是线程数的值, 比物理CPU本来应该拥有的数量少了。
排查 :
把BIOS/UEFI设置一下, 进入BIOS/UEFI, 去检查有没有禁用掉部分CPU核心这一项(某些主板是支持这样做的), 或者有没有关闭超线程技术(一般它这个叫Hyper-Threading Technology或者SMT)。内核启动参数需检查, 查看 /proc/cmdline 文件, 以此判断内核启动之际有无使用 maxcpus= 或者 isolcpus= 等相关参数从而限制或隔离部分 CPU。硬件有故障, 虽说这种情况较为罕见, 然而 CPU 或者主板插槽存在故障也极有可能致使核心无法被识别, 针对此可尝试于另一台已知状况正常的主板之上对该 CPU 展开测试。操作系统存在限制, 即某些免费的虚拟机或者容器平台, 有可能去限制能够可用的CPU核心数。关于4.3, 怎样去判断CPU是不是支持特定指令集, 像AVX2?
有的时候, 当你尝试去展开安装操作, 或者运行某些具备高性能特质的软件, 像是TensorFlow, 又或是PyTorch, 再或者是FFmpeg的时候, 系统会给出提示, 表明需要CPU来支持AVX2等指令集。
得以解决的方式为, 直接去查看, 于 /proc/cpuinfo 当中的 flags 字段, 或者借助 lscpu 命令。
cat /proc/cpuinfo | grep flags | uniq
于输出的那一连长串标志里头, 寻觅avx2, 寻觅avx512f, 寻觅sse4_2等等。grep能够迅速加以确认:
cat /proc/cpuinfo | grep -o avx2 | head -1
要是这个命令存在输出, 输出的内容为“avx2”, 那便表示对此是支持的。若不存在输出, 那就意味着不支持。
4.4 在脚本中安全地获取CPU信息
要编写那种需要去兼容不一样环境的脚本之际, 获取CPU信息就得有个更稳健些的方法。
经由上述自基础迈向进阶的梳理, 你理应已然能够仿若一位娴熟老道的系统管理员那般, 从容不迫、得心应手地去探查 Ubuntu 系统之中 CPU 的随便一项细节。要记得, 这些命令可不单单只是查询工具而已, 更是你理解系统行为、诊断复杂问题的根基。下次碰到性能疑云之际, 不妨率先从这些命令着手开启你的探究。