nproc是 Linux 中用于显示当前进程可用的处理器CPU数量的命令。它从/proc/cpuinfo或sysconf系统调用获取 CPU 核心数信息。 基本语法nproc[选项] 主要功能显示可用 CPU 核心数默认显示当前进程可用的 CPU 核心数考虑 CPU affinity受进程的 CPU 亲和性affinity限制系统级查询可显示系统安装的总 CPU 核心数 核心用法示例1. 基本用法# 显示当前进程可用的 CPU 核心数nproc# 显示系统安装的总 CPU 核心数不考虑 affinitynproc--all# 忽略指定数量的 CPU 核心nproc--ignore2# 组合使用nproc--all--ignore22. 输出示例$ nproc8$ nproc--all16$ nproc--ignore44 选项详解选项说明--all显示系统安装的总 CPU 核心数不考虑 affinity 限制--ignoreN忽略 N 个 CPU 核心用于资源限制场景--help显示帮助信息--version显示版本信息 与其他命令对比1. 获取 CPU 信息的各种方法# 1. 使用 nproc推荐nproc# 可用核心数nproc--all# 总核心数# 2. 使用 lscpu详细信息lscpu|grep-E^(CPU\(s\)|Core\(s\)|Socket\(s\))lscpu|grepCPU(s):|awk{print $2}# 3. 查看 /proc/cpuinfogrep-cprocessor/proc/cpuinfo# 逻辑核心数grepphysical id/proc/cpuinfo|sort-u|wc-l# 物理 CPU 数grepcpu cores/proc/cpuinfo|head-1|awk{print $4}# 每 CPU 核心数# 4. 使用 getconfgetconf _NPROCESSORS_ONLN# 在线 CPU 数getconf _NPROCESSORS_CONF# 配置的 CPU 数# 5. 使用 top/htoptop-n1|grepCpu(s)# 显示 CPU 信息# 或直接运行 htop# 6. 使用 nproc 的替代命令cat/sys/devices/system/cpu/online# 在线 CPU 范围cat/sys/devices/system/cpu/present# 存在的 CPU 范围2. 不同方法的比较命令输出内容是否考虑 affinity速度推荐度nproc可用 CPU 核心数✅⚡ 最快⭐⭐⭐⭐⭐nproc --all总 CPU 核心数❌⚡ 快⭐⭐⭐⭐⭐lscpu详细 CPU 架构信息❌⚡ 快⭐⭐⭐⭐/proc/cpuinfo原始 CPU 信息❌⚡ 快⭐⭐⭐getconf系统配置值部分⚡ 快⭐⭐⭐⭐⚡ 实际应用场景场景 1自动化脚本中的 CPU 检测#!/bin/bash# 根据 CPU 核心数自动优化并行任务# 获取 CPU 核心数TOTAL_CORES$(nproc--all)AVAILABLE_CORES$(nproc)echo系统信息:echoecho总 CPU 核心数:$TOTAL_CORESecho可用 CPU 核心数:$AVAILABLE_CORES# 根据可用核心数设置并行任务数if[[$AVAILABLE_CORES-ge8]];thenPARALLEL_JOBS$((AVAILABLE_CORES-2))# 保留 2 个核心echo检测到高性能系统设置并行任务数:$PARALLEL_JOBSelif[[$AVAILABLE_CORES-ge4]];thenPARALLEL_JOBS$((AVAILABLE_CORES-1))# 保留 1 个核心echo检测到中等性能系统设置并行任务数:$PARALLEL_JOBSelsePARALLEL_JOBS1echo检测到低性能系统使用单线程fi# 使用示例编译软件echo开始编译使用$PARALLEL_JOBS个并行任务...make-j$PARALLEL_JOBS# 或处理文件find.-name*.log-typef|xargs-P$PARALLEL_JOBS-I{}gzip{}场景 2资源监控脚本#!/bin/bash# CPU 资源监控脚本LOG_FILE/var/log/cpu_monitor.logCHECK_INTERVAL5# 检查间隔秒THRESHOLD80# CPU 使用率阈值%monitor_cpu(){localtotal_cores$(nproc--all)localavailable_cores$(nproc)localcpu_usage$(top-bn1|grepCpu(s)|awk{print $2}|cut-d%-f1)# 计算每个核心的平均使用率localper_core_usage$(echoscale2;$cpu_usage/$total_cores|bc)echo CPU 监控报告 echo时间:$(date%Y-%m-%d %H:%M:%S)echo总核心数:$total_coresecho可用核心数:$available_coresecho总 CPU 使用率:${cpu_usage}%echo每核心平均使用率:${per_core_usage}%# 检查是否超过阈值if(($(echo $cpu_usage$THRESHOLD|bc-l)));thenecho⚠️ 警告: CPU 使用率超过阈值 (${THRESHOLD}%)# 记录高负载进程echo高负载进程 Top 5:psaux--sort-%cpu|head-6|awkNR1 {printf %-10s %-10s %-10s\n, $2, $3, $11}# 记录到日志文件echo[$(date%Y-%m-%d %H:%M:%S)] CPU 使用率:${cpu_usage}% (阈值:${THRESHOLD}%)$LOG_FILEfiecho}# 主循环echo开始 CPU 监控检查间隔:${CHECK_INTERVAL}秒echo阈值:${THRESHOLD}%echo日志文件:$LOG_FILEecho按 CtrlC 停止监控echowhiletrue;domonitor_cpusleep$CHECK_INTERVALdone场景 3Docker 容器资源限制#!/bin/bash# 在 Docker 容器中合理分配 CPU 资源# 获取宿主机 CPU 核心数HOST_CORES$(nproc--all)# 获取容器可用的 CPU 核心数考虑 cgroup 限制if[[-f/sys/fs/cgroup/cpuset/cpuset.cpus]];thenCONTAINER_CPUS$(cat/sys/fs/cgroup/cpuset/cpuset.cpus)# 计算可用的核心数AVAILABLE_CORES$(echo$CONTAINER_CPUS|tr,\n|whilereadrange;doif[[$range*-*]];thenstart${range%-*}end${range#*-}seq$start $end|wc-lelseecho1fidone|paste-sd|bc)elseAVAILABLE_CORES$(nproc)fiecho容器 CPU 配置:echoecho宿主机总核心数:$HOST_CORESecho容器可用核心数:$AVAILABLE_CORESif[[-n$CONTAINER_CPUS]];thenecho分配的 CPU:$CONTAINER_CPUSfi# 根据可用核心数优化应用配置if[[$AVAILABLE_CORES-eq1]];thenecho单核心环境禁用并行处理exportOMP_NUM_THREADS1exportMKL_NUM_THREADS1exportOPENBLAS_NUM_THREADS1elif[[$AVAILABLE_CORES-le4]];thenecho少核心环境适度并行exportOMP_NUM_THREADS$AVAILABLE_CORESexportMKL_NUM_THREADS$AVAILABLE_CORESexportOPENBLAS_NUM_THREADS$AVAILABLE_CORESelseecho多核心环境充分并行exportOMP_NUM_THREADS$AVAILABLE_CORESexportMKL_NUM_THREADS$AVAILABLE_CORESexportOPENBLAS_NUM_THREADS$AVAILABLE_CORESfi# 启动应用echo启动应用线程配置:echoOMP_NUM_THREADS$OMP_NUM_THREADSechoMKL_NUM_THREADS$MKL_NUM_THREADSechoOPENBLAS_NUM_THREADS$OPENBLAS_NUM_THREADS场景 4并行任务调度器#!/bin/bash# 智能并行任务调度器TASK_LIST(task1task2task3task4task5task6task7task8)TASK_DIR/tmp/tasksLOG_DIR/var/log/parallel_tasks# 创建目录mkdir-p$TASK_DIR$LOG_DIR# 获取可用 CPU 核心数AVAILABLE_CORES$(nproc)MAX_PARALLEL$((AVAILABLE_CORES4?AVAILABLE_CORES-2:AVAILABLE_CORES))echo并行任务调度器启动echoecho可用 CPU 核心数:$AVAILABLE_CORESecho最大并行任务数:$MAX_PARALLELecho总任务数:${#TASK_LIST[]}echo# 任务处理函数process_task(){localtask_name$1localtask_id$2locallog_file$LOG_DIR/${task_name}_$(date%Y%m%d_%H%M%S).logecho[$(date%H:%M:%S)] 开始任务:$task_name(ID:$task_id)|tee-a$log_file# 模拟任务执行实际使用时替换为真实任务sleep$((RANDOM%51))# 生成一些输出echo任务$task_name处理中...|tee-a$log_fileechoCPU 核心:$(nproc)|tee-a$log_fileecho内存使用:$(free-m|awkNR2{printf %.2f%%, $3*100/$2})|tee-a$log_filesleep$((RANDOM%31))echo[$(date%H:%M:%S)] 完成任务:$task_name(ID:$task_id)|tee-a$log_fileecho---|tee-a$log_file}# 导出函数以便在子进程中使用export-fprocess_taskexportLOG_DIR# 使用 GNU parallel 或 xargs 进行并行处理ifcommand-vparallel/dev/null;then# 使用 GNU parallelprintf%s\n${TASK_LIST[]}|\parallel-j$MAX_PARALLEL--tag\process_task {} {#} 21else# 使用 xargs 作为备选printf%s\n${TASK_LIST[]}|\xargs-I{}-P$MAX_PARALLEL\bash-cprocess_task $_{}$(date%s)fiechoecho所有任务完成echo日志文件保存在:$LOG_DIR场景 5系统性能基准测试#!/bin/bash# 系统性能基准测试脚本echo系统性能基准测试echoecho测试时间:$(date)echo# 1. CPU 信息echo1. CPU 信息:echo------------echo逻辑核心数:$(nproc--all)echo可用核心数:$(nproc)# 获取详细 CPU 信息ifcommand-vlscpu/dev/null;thenecholscpu|grep-E^(Model name|CPU MHz|CPU max MHz|CPU min MHz|Architecture|Thread\(s\) per core|Core\(s\) per socket|Socket\(s\))fi# 2. CPU 性能测试echoecho2. CPU 性能测试:echo---------------# 单核性能测试echo-n单核性能测试: timeforiin{1..1000000};doechoscale1000; 4*a(1)|bc-l/dev/null;done# 多核性能测试AVAILABLE_CORES$(nproc)echo-n多核性能测试 ($AVAILABLE_CORES核心): timeseq1$AVAILABLE_CORES|xargs-P$AVAILABLE_CORES-I{}bash-cfor i in {1..200000}; do echo scale500; 4*a(1) | bc -l /dev/null; done# 3. 内存测试echoecho3. 内存性能测试:echo---------------ifcommand-vsysbench/dev/null;thenecho使用 sysbench 进行内存测试...sysbench memory --memory-block-size1K --memory-total-size10G run|grep-E(total time|transferred|operations)elseecho安装 sysbench 以进行内存测试: sudo apt install sysbenchfi# 4. 磁盘 I/O 测试echoecho4. 磁盘 I/O 测试:echo----------------TEST_FILE/tmp/io_test.binecho-n写入测试 (100MB): ddif/dev/zeroof$TEST_FILEbs1Mcount100oflagdirect21|tail-1echo-n读取测试: ddif$TEST_FILEof/dev/nullbs1Miflagdirect21|tail-1rm-f$TEST_FILE# 5. 系统负载echoecho5. 系统负载:echo-----------uptimeechoechoCPU 使用率:mpstat11|tail-2echoecho基准测试完成 高级用法1. 结合 taskset 控制 CPU 亲和性# 查看当前进程的 CPU 亲和性taskset-p$$# 将进程绑定到特定 CPU 核心taskset-c0,2,4 ./program# 结合 nproc 动态绑定AVAILABLE_CORES$(nproc)# 绑定到一半的核心taskset-c0-$((AVAILABLE_CORES/2-1))./program# 在脚本中设置 CPU 亲和性#!/bin/bash# 自动设置 CPU 亲和性TOTAL_CORES$(nproc--all)# 为进程分配前一半的核心FIRST_HALF$((TOTAL_CORES/2))CPU_LIST$(seq-s,0$((FIRST_HALF -1)))echo总核心数:$TOTAL_CORESecho分配的 CPU:$CPU_LIST# 启动程序并设置 CPU 亲和性taskset-c$CPU_LIST./your_program2. 在编程语言中使用 nproc#!/usr/bin/env python3# Python 中获取 CPU 核心数importosimportmultiprocessing# 方法1: 使用 os.cpu_count()print(f逻辑 CPU 核心数:{os.cpu_count()})# 方法2: 使用 multiprocessingprint(f可用 CPU 核心数:{multiprocessing.cpu_count()})# 方法3: 读取 /proc/cpuinfodefget_cpu_count_from_proc():try:withopen(/proc/cpuinfo,r)asf:returnlen([lineforlineinfifline.startswith(processor)])except:returnNoneprint(f从 /proc/cpuinfo 获取:{get_cpu_count_from_proc()})# 方法4: 调用 nproc 命令importsubprocessdefget_cpu_count_from_nproc():try:resultsubprocess.run([nproc],capture_outputTrue,textTrue)returnint(result.stdout.strip())except:returnNoneprint(f从 nproc 命令获取:{get_cpu_count_from_nproc()})#!/bin/bash# 在 Shell 脚本中获取 CPU 核心数的不同方法echo各种获取 CPU 核心数的方法:echo# 方法1: nproc推荐echo1. nproc:$(nproc)# 方法2: nproc --allecho2. nproc --all:$(nproc--all)# 方法3: 从 /proc/cpuinfo 获取echo3. /proc/cpuinfo:$(grep-cprocessor /proc/cpuinfo)# 方法4: 使用 getconfecho4. getconf _NPROCESSORS_ONLN:$(getconf _NPROCESSORS_ONLN)# 方法5: 使用 lscpuecho5. lscpu:$(lscpu|grep^CPU(s):|awk{print $2})# 方法6: 使用 sysctlmacOS/BSDifcommand-vsysctl/dev/null;thenecho6. sysctl hw.ncpu:$(sysctl-nhw.ncpu2/dev/null||echoN/A)elseecho6. sysctl: N/A (Linux only)fi# 方法7: 使用 Pythonecho7. Python os.cpu_count():$(python3-cimport os;print(os.cpu_count())2/dev/null||echoN/A) # 方法8: 使用 nproc 的替代实现 echo 8. 替代实现:$(cat/sys/devices/system/cpu/online2/dev/null||echoN/A)⚠️ 注意事项虚拟化环境在虚拟机或容器中nproc可能显示的是分配给虚拟机的核心数而不是物理核心数CPU 亲和性默认nproc考虑进程的 CPU 亲和性设置使用--all选项可忽略超线程nproc显示的是逻辑核心数包括超线程核心不是物理核心数性能调优在设置并行任务数时通常建议保留 1-2 个核心给系统使用容器环境在 Docker 容器中nproc可能受 cgroup 限制影响 相关命令命令说明与 nproc 的关系lscpu显示详细的 CPU 架构信息提供更详细的 CPU 信息taskset设置或获取进程的 CPU 亲和性影响nproc的输出cpuid显示 CPU 详细信息更底层的 CPU 信息top/htop实时显示系统进程和 CPU 使用率显示 CPU 使用情况mpstat显示每个 CPU 的统计信息显示每个核心的使用率nproc是系统管理和性能调优中非常有用的工具特别适合在脚本中动态确定并行任务数量以充分利用系统资源。
Linux命令-nproc(显示当前进程可用的CPU数量)
发布时间:2026/6/4 15:32:17
nproc是 Linux 中用于显示当前进程可用的处理器CPU数量的命令。它从/proc/cpuinfo或sysconf系统调用获取 CPU 核心数信息。 基本语法nproc[选项] 主要功能显示可用 CPU 核心数默认显示当前进程可用的 CPU 核心数考虑 CPU affinity受进程的 CPU 亲和性affinity限制系统级查询可显示系统安装的总 CPU 核心数 核心用法示例1. 基本用法# 显示当前进程可用的 CPU 核心数nproc# 显示系统安装的总 CPU 核心数不考虑 affinitynproc--all# 忽略指定数量的 CPU 核心nproc--ignore2# 组合使用nproc--all--ignore22. 输出示例$ nproc8$ nproc--all16$ nproc--ignore44 选项详解选项说明--all显示系统安装的总 CPU 核心数不考虑 affinity 限制--ignoreN忽略 N 个 CPU 核心用于资源限制场景--help显示帮助信息--version显示版本信息 与其他命令对比1. 获取 CPU 信息的各种方法# 1. 使用 nproc推荐nproc# 可用核心数nproc--all# 总核心数# 2. 使用 lscpu详细信息lscpu|grep-E^(CPU\(s\)|Core\(s\)|Socket\(s\))lscpu|grepCPU(s):|awk{print $2}# 3. 查看 /proc/cpuinfogrep-cprocessor/proc/cpuinfo# 逻辑核心数grepphysical id/proc/cpuinfo|sort-u|wc-l# 物理 CPU 数grepcpu cores/proc/cpuinfo|head-1|awk{print $4}# 每 CPU 核心数# 4. 使用 getconfgetconf _NPROCESSORS_ONLN# 在线 CPU 数getconf _NPROCESSORS_CONF# 配置的 CPU 数# 5. 使用 top/htoptop-n1|grepCpu(s)# 显示 CPU 信息# 或直接运行 htop# 6. 使用 nproc 的替代命令cat/sys/devices/system/cpu/online# 在线 CPU 范围cat/sys/devices/system/cpu/present# 存在的 CPU 范围2. 不同方法的比较命令输出内容是否考虑 affinity速度推荐度nproc可用 CPU 核心数✅⚡ 最快⭐⭐⭐⭐⭐nproc --all总 CPU 核心数❌⚡ 快⭐⭐⭐⭐⭐lscpu详细 CPU 架构信息❌⚡ 快⭐⭐⭐⭐/proc/cpuinfo原始 CPU 信息❌⚡ 快⭐⭐⭐getconf系统配置值部分⚡ 快⭐⭐⭐⭐⚡ 实际应用场景场景 1自动化脚本中的 CPU 检测#!/bin/bash# 根据 CPU 核心数自动优化并行任务# 获取 CPU 核心数TOTAL_CORES$(nproc--all)AVAILABLE_CORES$(nproc)echo系统信息:echoecho总 CPU 核心数:$TOTAL_CORESecho可用 CPU 核心数:$AVAILABLE_CORES# 根据可用核心数设置并行任务数if[[$AVAILABLE_CORES-ge8]];thenPARALLEL_JOBS$((AVAILABLE_CORES-2))# 保留 2 个核心echo检测到高性能系统设置并行任务数:$PARALLEL_JOBSelif[[$AVAILABLE_CORES-ge4]];thenPARALLEL_JOBS$((AVAILABLE_CORES-1))# 保留 1 个核心echo检测到中等性能系统设置并行任务数:$PARALLEL_JOBSelsePARALLEL_JOBS1echo检测到低性能系统使用单线程fi# 使用示例编译软件echo开始编译使用$PARALLEL_JOBS个并行任务...make-j$PARALLEL_JOBS# 或处理文件find.-name*.log-typef|xargs-P$PARALLEL_JOBS-I{}gzip{}场景 2资源监控脚本#!/bin/bash# CPU 资源监控脚本LOG_FILE/var/log/cpu_monitor.logCHECK_INTERVAL5# 检查间隔秒THRESHOLD80# CPU 使用率阈值%monitor_cpu(){localtotal_cores$(nproc--all)localavailable_cores$(nproc)localcpu_usage$(top-bn1|grepCpu(s)|awk{print $2}|cut-d%-f1)# 计算每个核心的平均使用率localper_core_usage$(echoscale2;$cpu_usage/$total_cores|bc)echo CPU 监控报告 echo时间:$(date%Y-%m-%d %H:%M:%S)echo总核心数:$total_coresecho可用核心数:$available_coresecho总 CPU 使用率:${cpu_usage}%echo每核心平均使用率:${per_core_usage}%# 检查是否超过阈值if(($(echo $cpu_usage$THRESHOLD|bc-l)));thenecho⚠️ 警告: CPU 使用率超过阈值 (${THRESHOLD}%)# 记录高负载进程echo高负载进程 Top 5:psaux--sort-%cpu|head-6|awkNR1 {printf %-10s %-10s %-10s\n, $2, $3, $11}# 记录到日志文件echo[$(date%Y-%m-%d %H:%M:%S)] CPU 使用率:${cpu_usage}% (阈值:${THRESHOLD}%)$LOG_FILEfiecho}# 主循环echo开始 CPU 监控检查间隔:${CHECK_INTERVAL}秒echo阈值:${THRESHOLD}%echo日志文件:$LOG_FILEecho按 CtrlC 停止监控echowhiletrue;domonitor_cpusleep$CHECK_INTERVALdone场景 3Docker 容器资源限制#!/bin/bash# 在 Docker 容器中合理分配 CPU 资源# 获取宿主机 CPU 核心数HOST_CORES$(nproc--all)# 获取容器可用的 CPU 核心数考虑 cgroup 限制if[[-f/sys/fs/cgroup/cpuset/cpuset.cpus]];thenCONTAINER_CPUS$(cat/sys/fs/cgroup/cpuset/cpuset.cpus)# 计算可用的核心数AVAILABLE_CORES$(echo$CONTAINER_CPUS|tr,\n|whilereadrange;doif[[$range*-*]];thenstart${range%-*}end${range#*-}seq$start $end|wc-lelseecho1fidone|paste-sd|bc)elseAVAILABLE_CORES$(nproc)fiecho容器 CPU 配置:echoecho宿主机总核心数:$HOST_CORESecho容器可用核心数:$AVAILABLE_CORESif[[-n$CONTAINER_CPUS]];thenecho分配的 CPU:$CONTAINER_CPUSfi# 根据可用核心数优化应用配置if[[$AVAILABLE_CORES-eq1]];thenecho单核心环境禁用并行处理exportOMP_NUM_THREADS1exportMKL_NUM_THREADS1exportOPENBLAS_NUM_THREADS1elif[[$AVAILABLE_CORES-le4]];thenecho少核心环境适度并行exportOMP_NUM_THREADS$AVAILABLE_CORESexportMKL_NUM_THREADS$AVAILABLE_CORESexportOPENBLAS_NUM_THREADS$AVAILABLE_CORESelseecho多核心环境充分并行exportOMP_NUM_THREADS$AVAILABLE_CORESexportMKL_NUM_THREADS$AVAILABLE_CORESexportOPENBLAS_NUM_THREADS$AVAILABLE_CORESfi# 启动应用echo启动应用线程配置:echoOMP_NUM_THREADS$OMP_NUM_THREADSechoMKL_NUM_THREADS$MKL_NUM_THREADSechoOPENBLAS_NUM_THREADS$OPENBLAS_NUM_THREADS场景 4并行任务调度器#!/bin/bash# 智能并行任务调度器TASK_LIST(task1task2task3task4task5task6task7task8)TASK_DIR/tmp/tasksLOG_DIR/var/log/parallel_tasks# 创建目录mkdir-p$TASK_DIR$LOG_DIR# 获取可用 CPU 核心数AVAILABLE_CORES$(nproc)MAX_PARALLEL$((AVAILABLE_CORES4?AVAILABLE_CORES-2:AVAILABLE_CORES))echo并行任务调度器启动echoecho可用 CPU 核心数:$AVAILABLE_CORESecho最大并行任务数:$MAX_PARALLELecho总任务数:${#TASK_LIST[]}echo# 任务处理函数process_task(){localtask_name$1localtask_id$2locallog_file$LOG_DIR/${task_name}_$(date%Y%m%d_%H%M%S).logecho[$(date%H:%M:%S)] 开始任务:$task_name(ID:$task_id)|tee-a$log_file# 模拟任务执行实际使用时替换为真实任务sleep$((RANDOM%51))# 生成一些输出echo任务$task_name处理中...|tee-a$log_fileechoCPU 核心:$(nproc)|tee-a$log_fileecho内存使用:$(free-m|awkNR2{printf %.2f%%, $3*100/$2})|tee-a$log_filesleep$((RANDOM%31))echo[$(date%H:%M:%S)] 完成任务:$task_name(ID:$task_id)|tee-a$log_fileecho---|tee-a$log_file}# 导出函数以便在子进程中使用export-fprocess_taskexportLOG_DIR# 使用 GNU parallel 或 xargs 进行并行处理ifcommand-vparallel/dev/null;then# 使用 GNU parallelprintf%s\n${TASK_LIST[]}|\parallel-j$MAX_PARALLEL--tag\process_task {} {#} 21else# 使用 xargs 作为备选printf%s\n${TASK_LIST[]}|\xargs-I{}-P$MAX_PARALLEL\bash-cprocess_task $_{}$(date%s)fiechoecho所有任务完成echo日志文件保存在:$LOG_DIR场景 5系统性能基准测试#!/bin/bash# 系统性能基准测试脚本echo系统性能基准测试echoecho测试时间:$(date)echo# 1. CPU 信息echo1. CPU 信息:echo------------echo逻辑核心数:$(nproc--all)echo可用核心数:$(nproc)# 获取详细 CPU 信息ifcommand-vlscpu/dev/null;thenecholscpu|grep-E^(Model name|CPU MHz|CPU max MHz|CPU min MHz|Architecture|Thread\(s\) per core|Core\(s\) per socket|Socket\(s\))fi# 2. CPU 性能测试echoecho2. CPU 性能测试:echo---------------# 单核性能测试echo-n单核性能测试: timeforiin{1..1000000};doechoscale1000; 4*a(1)|bc-l/dev/null;done# 多核性能测试AVAILABLE_CORES$(nproc)echo-n多核性能测试 ($AVAILABLE_CORES核心): timeseq1$AVAILABLE_CORES|xargs-P$AVAILABLE_CORES-I{}bash-cfor i in {1..200000}; do echo scale500; 4*a(1) | bc -l /dev/null; done# 3. 内存测试echoecho3. 内存性能测试:echo---------------ifcommand-vsysbench/dev/null;thenecho使用 sysbench 进行内存测试...sysbench memory --memory-block-size1K --memory-total-size10G run|grep-E(total time|transferred|operations)elseecho安装 sysbench 以进行内存测试: sudo apt install sysbenchfi# 4. 磁盘 I/O 测试echoecho4. 磁盘 I/O 测试:echo----------------TEST_FILE/tmp/io_test.binecho-n写入测试 (100MB): ddif/dev/zeroof$TEST_FILEbs1Mcount100oflagdirect21|tail-1echo-n读取测试: ddif$TEST_FILEof/dev/nullbs1Miflagdirect21|tail-1rm-f$TEST_FILE# 5. 系统负载echoecho5. 系统负载:echo-----------uptimeechoechoCPU 使用率:mpstat11|tail-2echoecho基准测试完成 高级用法1. 结合 taskset 控制 CPU 亲和性# 查看当前进程的 CPU 亲和性taskset-p$$# 将进程绑定到特定 CPU 核心taskset-c0,2,4 ./program# 结合 nproc 动态绑定AVAILABLE_CORES$(nproc)# 绑定到一半的核心taskset-c0-$((AVAILABLE_CORES/2-1))./program# 在脚本中设置 CPU 亲和性#!/bin/bash# 自动设置 CPU 亲和性TOTAL_CORES$(nproc--all)# 为进程分配前一半的核心FIRST_HALF$((TOTAL_CORES/2))CPU_LIST$(seq-s,0$((FIRST_HALF -1)))echo总核心数:$TOTAL_CORESecho分配的 CPU:$CPU_LIST# 启动程序并设置 CPU 亲和性taskset-c$CPU_LIST./your_program2. 在编程语言中使用 nproc#!/usr/bin/env python3# Python 中获取 CPU 核心数importosimportmultiprocessing# 方法1: 使用 os.cpu_count()print(f逻辑 CPU 核心数:{os.cpu_count()})# 方法2: 使用 multiprocessingprint(f可用 CPU 核心数:{multiprocessing.cpu_count()})# 方法3: 读取 /proc/cpuinfodefget_cpu_count_from_proc():try:withopen(/proc/cpuinfo,r)asf:returnlen([lineforlineinfifline.startswith(processor)])except:returnNoneprint(f从 /proc/cpuinfo 获取:{get_cpu_count_from_proc()})# 方法4: 调用 nproc 命令importsubprocessdefget_cpu_count_from_nproc():try:resultsubprocess.run([nproc],capture_outputTrue,textTrue)returnint(result.stdout.strip())except:returnNoneprint(f从 nproc 命令获取:{get_cpu_count_from_nproc()})#!/bin/bash# 在 Shell 脚本中获取 CPU 核心数的不同方法echo各种获取 CPU 核心数的方法:echo# 方法1: nproc推荐echo1. nproc:$(nproc)# 方法2: nproc --allecho2. nproc --all:$(nproc--all)# 方法3: 从 /proc/cpuinfo 获取echo3. /proc/cpuinfo:$(grep-cprocessor /proc/cpuinfo)# 方法4: 使用 getconfecho4. getconf _NPROCESSORS_ONLN:$(getconf _NPROCESSORS_ONLN)# 方法5: 使用 lscpuecho5. lscpu:$(lscpu|grep^CPU(s):|awk{print $2})# 方法6: 使用 sysctlmacOS/BSDifcommand-vsysctl/dev/null;thenecho6. sysctl hw.ncpu:$(sysctl-nhw.ncpu2/dev/null||echoN/A)elseecho6. sysctl: N/A (Linux only)fi# 方法7: 使用 Pythonecho7. Python os.cpu_count():$(python3-cimport os;print(os.cpu_count())2/dev/null||echoN/A) # 方法8: 使用 nproc 的替代实现 echo 8. 替代实现:$(cat/sys/devices/system/cpu/online2/dev/null||echoN/A)⚠️ 注意事项虚拟化环境在虚拟机或容器中nproc可能显示的是分配给虚拟机的核心数而不是物理核心数CPU 亲和性默认nproc考虑进程的 CPU 亲和性设置使用--all选项可忽略超线程nproc显示的是逻辑核心数包括超线程核心不是物理核心数性能调优在设置并行任务数时通常建议保留 1-2 个核心给系统使用容器环境在 Docker 容器中nproc可能受 cgroup 限制影响 相关命令命令说明与 nproc 的关系lscpu显示详细的 CPU 架构信息提供更详细的 CPU 信息taskset设置或获取进程的 CPU 亲和性影响nproc的输出cpuid显示 CPU 详细信息更底层的 CPU 信息top/htop实时显示系统进程和 CPU 使用率显示 CPU 使用情况mpstat显示每个 CPU 的统计信息显示每个核心的使用率nproc是系统管理和性能调优中非常有用的工具特别适合在脚本中动态确定并行任务数量以充分利用系统资源。