Linux下查看与设置线程数(CPU相关)的常用方法
在Linux系统中,线程数通常指逻辑CPU数量(即物理核心数×超线程数,若支持超线程)。以下是常用查看方法:
nproc命令(最简方式)nproc直接返回系统可用的逻辑CPU线程数,适用于快速查询。
示例输出:
$ nproc
8
表示系统有8个逻辑线程(若为4核CPU且启用超线程,则逻辑线程数为8)。
lscpu命令(详细拓扑信息)lscpu提供CPU架构、核心数、线程数等详细信息,关键字段包括:
CPU(s):逻辑CPU总数(总线程数);Thread(s) per core:每个物理核心的线程数(超线程技术下通常为2);Core(s) per socket:每个CPU插槽的物理核心数;Socket(s):物理CPU插槽数。$ lscpu
Architecture: x86_64
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
...
表示:1个插槽、4个物理核心、每个核心2个线程,总逻辑线程数为8。
/proc/cpuinfo文件(底层信息)通过统计processor字段的数量,获取逻辑线程数;或通过core id统计物理核心数。
$ grep -c "processor" /proc/cpuinfo
8
$ grep -c "core id" /proc/cpuinfo
4
(注:core id唯一标识物理核心,重复次数即为物理核心数)。top/htop命令(动态监控)top后按1键,可查看每个逻辑CPU核心的负载(顶部会标注CPU数量,如Cpu0-Cpu7);htop(需安装)可直接显示逻辑线程数及实时使用情况。线程数的设置需根据应用场景调整,以下是常见场景的设置方法:
Linux系统对线程数有全局限制和用户级限制,需分别调整:
ulimit)ulimit -u命令设置用户最大线程数(nproc的软限制),例如设置为2048:$ ulimit -u 2048
/etc/security/limits.conf文件,添加以下内容(以用户testuser为例):testuser hard nproc 4096
testuser soft nproc 2048
其中hard为硬限制(不可超越),soft为软限制(可在硬限制内调整)。修改后需编辑/etc/pam.d/common-session,添加:session required pam_limits.so
使设置生效。kernel.threads-max)sysctl命令调整系统最大线程数,例如设置为4096:$ sysctl -w kernel.threads-max=4096
/etc/sysctl.conf文件,添加:kernel.threads-max=4096
执行sysctl -p使设置生效。多线程应用的线程数应根据逻辑核心数调整,避免过多线程导致上下文切换开销:
Tomcat的maxThreads参数(最大并发请求数)建议设置为逻辑核心数的1~4倍(如8核逻辑线程数设置为16~32):
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="32"
... />
JVM的Parallel GC线程数默认等于逻辑核心数,可通过-XX:ParallelGCThreads覆盖:
$ java -XX:ParallelGCThreads=8 -jar your_app.jar
make -j)内核编译时,线程数建议设置为逻辑核心数(最大化利用多核性能),例如:
$ make -j$(nproc)
若内存不足,可调整为$(nproc)/2(如8核设置为4)。
Thread(s) per core为2,逻辑线程数为物理核心数的2倍;