[内容] Linux CPU 温度的显示 (直接显示)

内容一:显示 CPU 的瞬时温度

# cat /sys/class/thermal/thermal_zone0/temp


补充:
1) 这里以显示第 1 个 CPU 的瞬时温度为例
2) 将显示的数值除以 1000 就是以摄氏为单位的温度
3) 如果显示第 2 个 CPU 的瞬时温度则将 thermal_zone0 换成 thermal_zone1

内容二:显示 CPU 的瞬时温度,并对数值进行处理

# echo "CPU Temperature: $[$(cat /sys/class/thermal/thermal_zone0/temp)/1000]"


补充:
1) 这里以显示第 1 个 CPU 的瞬时温度为例
2) 如果显示第 2 个 CPU 的瞬时温度则将 thermal_zone0 换成 thermal_zone1

[内容] Linux 处理器详细信息的显示 (显示 /proc/cpuinfo 文件里的信息)

内容一:显示处理器详细信息

1.1 显示处理器详细信息

# cat /proc/cpuinfo

或者:

# lscpu

1.2 /proc/cpuinfo 文件里或者 lscpu 命令里重要参数

1) processor,进程 (虚拟核心) ID
2) core ID,物理核心 ID
3) physical id,物理封装处理器 ID (CPU socket ID)
4) cpu cores, 每 1 个物理封装处理器 ID (CPU socket ID) 里的物理核心数量
5) siblings, 每 1 个物理封装处理器 ID (CPU socket ID) 里的进程 (虚拟核心) 数量

内容二:显示 Linux 处理器详细信息的案例

2.1 案例一:显示处理器所有信息

# cat /proc/cpuinfo
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 23
model		: 1
model name	: AMD Ryzen 7 1700 Eight-Core Processor
stepping	: 1
microcode	: 0x8001138
cpu MHz		: 1371.214
cache size	: 512 KB
physical id	: 0
siblings	: 16
core id		: 0
cpu cores	: 8
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif overflow_recov succor smca
bugs		: sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips	: 5987.93
TLB size	: 2560 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 43 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate eff_freq_ro [13] [14]

......

2.2 案例二:显示处理器进程 (虚拟核心) 数

# cat /proc/cpuinfo | egrep "core id|physical id|processor" | tr -d "\n" | sed s/processor/\\nprocessor/g | sed 's/physical/     physical/' | sed 's/core/     core/' | grep -v ^$ | wc -l

2.3 案例三:显示处理器物理核心数

# cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l

2.4 案例四:显示物理封装处理器 (处理器 socket) 数

# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

2.5 案例五:显示处理器所有进程 (虚拟核心) ID

# cat /proc/cpuinfo | grep processor
processor	: 0
processor	: 1
processor	: 2
processor	: 3
processor	: 4
processor	: 5
processor	: 6
processor	: 7
processor	: 8
processor	: 9
processor	: 10
processor	: 11
processor	: 12
processor	: 13
processor	: 14
processor	: 15

2.6 案例六:显示处理器所有物理核心 ID

# cat /proc/cpuinfo | grep 'core id'
core id		: 0
core id		: 1
core id		: 2
core id		: 3
core id		: 4
core id		: 5
core id		: 6
core id		: 7
core id		: 0
core id		: 1
core id		: 2
core id		: 3
core id		: 4
core id		: 5
core id		: 6
core id		: 7

2.7 案例七:显示处理器所有物理封装处理器 ID (处理器 socket ID)

# cat /proc/cpuinfo | grep 'physical id'
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0
physical id	: 0

2.8 案例八:显示处理器所有物理封装处理器 ID (处理器 socket ID) 和物理核心 ID 以及对应关系

# cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | sed 's/core/ core/'g |  grep -v ^$ | sort | uniq
physical id	: 0 core id		: 0
physical id	: 0 core id		: 1
physical id	: 0 core id		: 2
physical id	: 0 core id		: 3
physical id	: 0 core id		: 4
physical id	: 0 core id		: 5
physical id	: 0 core id		: 6
physical id	: 0 core id		: 7

2.9 案例九:显示处理器所有进程 (虚拟核心) ID、物理封装处理器 ID (处理器 socket ID) 、物理核心 ID 以及对应关系

# cat /proc/cpuinfo | egrep "core id|physical id|processor" | tr -d "\n" | sed s/processor/\\nprocessor/g | sed 's/physical/     physical/' | sed 's/core/     core/' | grep -v ^$
processor	: 0     physical id	: 0     core id		: 0
processor	: 1     physical id	: 0     core id		: 1
processor	: 2     physical id	: 0     core id		: 2
processor	: 3     physical id	: 0     core id		: 3
processor	: 4     physical id	: 0     core id		: 4
processor	: 5     physical id	: 0     core id		: 5
processor	: 6     physical id	: 0     core id		: 6
processor	: 7     physical id	: 0     core id		: 7
processor	: 8     physical id	: 0     core id		: 0
processor	: 9     physical id	: 0     core id		: 1
processor	: 10     physical id	: 0     core id		: 2
processor	: 11     physical id	: 0     core id		: 3
processor	: 12     physical id	: 0     core id		: 4
processor	: 13     physical id	: 0     core id		: 5
processor	: 14     physical id	: 0     core id		: 6
processor	: 15     physical id	: 0     core id		: 7

2.10 案例十:显示每 1 个物理封装处理器 (处理器 socket) 里物理核心数

# cat /proc/cpuinfo | grep 'cpu cores'
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8
cpu cores	: 8

2.11 案例十一:显示每 1 个物理封装处理器 (处理器 socket) 里进程 (虚拟核心) 核心数

# cat /proc/cpuinfo | grep 'siblings'
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16
siblings	: 16

内容二:理解显示的处理器详细信息

1) processor 的数字从 0 到 15,代表有 16 个进程 (虚拟核心)
2) core id 的数字从 0 到 7,代表有 8 个物理核心
3) physical id 的数字都是 0,代表只有 1 个物理封装处理器 (处理器 socket)
4) cpu cores 的数字都是 8,代表每 1 个物理封装处理器 (处理器 socket) 里有 8 个物理核心
5) siblings 的数字都是 16,代表每 1 个物理封装处理器 (处理器 socket) 里有 16 个进程 (虚拟核心)
6) 总结:1 个处理器,8 个物理核心,16 个进程 (虚拟核心)

[排错] 解决 Linux 运行时报错 “watchdog: Bug: soft lockup – CPU……” (CPU 软锁)

报错代码

watchdog: Bug: soft lockup - CPU......

分析

当 CPU 的负载过高时,一个 CPU 在运行某一个进程时,在内核模式下超过 20 秒没有回应,则看门狗程序会将系统所有 CPU 软锁住,然后会让这些 CPU 显示各自正在运行的进程堆栈跟踪

缓解方法

方法一:通过 /proc/sys/kernel/watchdog_thresh 文件延长看门狗软锁 CPU 的时间

# echo 20 > /proc/sys/kernel/watchdog_thresh

(补充:这里以将看门狗的值延长到 20 为例,也可以根据自己的需求延长更多,默认值为 10)

方法二:通过新建文件延长看门狗软所 CPU 的时间

2.1 通过新建文件延长看门狗软所 CPU 的时间

# echo "kernel.watchdog_thresh = 20" >> /etc/sysctl.conf

(补充:这里以将看门狗的值延长到 20 为例,也可以根据自己的需求延长更多,默认值为 10)

2.2 让新建文件立刻生效

# sysctl -p /etc/sysctl.conf

深究方法

开启 Kdump,等此报错再次发生时分析 Kdump 在内核崩溃时搜集信息 vmcore

[命令] Linux 命令 hdparm (测试硬盘读取速度)

 # hdparm -Ttv /dev/sda

/dev/sda:
 multcount     = 128 (on)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 1024 (on)
 geometry      = 8354/255/63, sectors = 134217728, start = 0
 Timing cached reads:   7304 MB in  2.00 seconds = 3658.90 MB/sec
 Timing buffered disk reads: 612 MB in  3.01 seconds = 203.07 MB/sec

(补充:这里以测试 /dev/sda 硬盘的读取速度为例)

[命令] Linux 命令 sensors 的使用 (显示系统硬件温度)

步骤一:安装 sensors 命令

如果是 RHEL & Rocky Linux:

# yum install lm_sensors

如果是 openSUSE & SLE:

# zypper install lm_sensors

步骤二:检测硬件

2.1 分别选择要检测的区域

# sensors-detect

(补充:此命令是交互式的,当需要确定要检测的区域时,如果要检测则可以按下 “y” 键再按下 “回车” 键或者直接按下 “回车” 键,如果不检测则可以按下 “n” 键)

2.2 检测所有区域

# sh -c "yes|sensors-detect"

(注意:此命令会直接检测所有区域,不会再有选择的机会)

步骤三:显示系统硬件温度

# sensors