LinuxでCPUの情報(コア数・スレッド数・型番など)を確認するには、lscpu コマンドを実行するのが最も簡単です。特別なオプションなしで、CPUの主要な情報を一括表示できます。
lscpu
本記事では、実機で確認した出力例をもとに、lscpu・/proc/cpuinfo・nproc それぞれの使い方と読み方、さらにDockerコンテナでCPUを制限した場合の挙動差まで、実際に検証した結果をまとめて解説します。
Linuxで確認できるCPU情報の種類
「CPUを確認する」といっても、知りたい情報によって使うコマンドが変わります。まず全体像を整理します。
| 知りたい情報 | 内容 | 確認コマンドの例 |
|---|---|---|
| 型番・アーキテクチャ・コア数などの仕様 | Intel Core i5、6コアなどの静的なスペック情報 | lscpu / cat /proc/cpuinfo |
| 論理プロセッサ数(並列実行数) | make -jやxargs -Pなどの並列数の目安 | nproc |
| 現在のCPU使用率 | 今どれだけCPUが使われているか(動的な値) | top / vmstat |
本記事は主に前者2つ(仕様・プロセッサ数の確認)を扱います。CPU使用率をリアルタイムで確認したい場合は、後半の「CPU使用率をリアルタイムで確認したい場合」で紹介する記事を参照してください。
lscpuコマンドでCPU情報を一括確認する(推奨)
基本的な使い方
lscpu は util-linux パッケージに含まれるコマンドで、sysfsや/proc/cpuinfoを読み取り、CPUのアーキテクチャ・コア数・スレッド数・型番・キャッシュサイズなどを整形して一覧表示します。オプションなしで実行するだけで確認できます。
lscpu
出力例(実機で確認、一部抜粋):
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 6
On-line CPU(s) list: 0-5
Vendor ID: GenuineIntel
Model name: Intel(R) Core(TM) i5-8500T CPU @ 2.10GHz
CPU family: 6
Thread(s) per core: 1
Core(s) per socket: 6
Socket(s): 1
CPU max MHz: 3500.0000
CPU min MHz: 800.0000
L1d cache: 192 KiB (6 instances)
L1i cache: 192 KiB (6 instances)
L2 cache: 1.5 MiB (6 instances)
L3 cache: 9 MiB (1 instance)
主要項目の見方
| 項目 | 意味 |
|---|---|
Architecture | CPUのアーキテクチャ(x86_64、aarch64など) |
CPU(s) | OSから見える論理CPU数(後述のnprocと同じ値) |
Model name | CPUの型番・製品名 |
Thread(s) per core | 1コアあたりのスレッド数。2ならハイパースレッディング有効 |
Core(s) per socket | CPUソケット1つあたりの物理コア数 |
Socket(s) | 物理CPUソケット数 |
論理CPU数は「Socket(s) × Core(s) per socket × Thread(s) per core」で計算できます。上記の出力例では 1 × 6 × 1 = 6 で、CPU(s): 6 と一致しています。
CPUごとの状態を一覧で見る(lscpu -e)
どの論理CPUがどのコア・ソケットに属しているかを表形式で確認したい場合は -e オプションを使います。
lscpu -e
出力例(実機で確認):
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 3500.0000 800.0000
1 0 0 1 1:1:1:0 yes 3500.0000 800.0000
2 0 0 2 2:2:2:0 yes 3500.0000 800.0000
スクリプトから機械的に読み取りたい場合は lscpu --json でJSON形式の出力にすることもできます。
/proc/cpuinfoで詳細情報を確認する
/proc/cpuinfo はカーネルがCPU情報を公開する仮想ファイルで、lscpu はこのファイルとsysfsを読み取って整形しています。lscpu が使えない環境や、より詳細なフラグ情報を見たい場合はこちらを直接参照します。
cat /proc/cpuinfo
1つの論理CPUあたり、以下のような情報がプロセッサの数だけ繰り返し出力されます(実機で確認、1プロセッサ分のみ抜粋):
processor : 0
vendor_id : GenuineIntel
model name : Intel(R) Core(TM) i5-8500T CPU @ 2.10GHz
cpu MHz : 3200.112
cache size : 9216 KB
physical id : 0
siblings : 6
core id : 0
cpu cores : 6
モデル名だけを取り出す
出力全体は長いため、型番だけ確認したい場合は grep で絞り込みます。
grep -m1 "model name" /proc/cpuinfo
model name : Intel(R) Core(TM) i5-8500T CPU @ 2.10GHz
論理プロセッサ数を数える
processor の行数を数えると、論理CPU数(後述のnproc --allと同じ値)が分かります。
grep -c ^processor /proc/cpuinfo
6
nprocでプロセッサ数を素早く確認する
コア数の詳細ではなく「並列実行できる数」だけを素早く知りたい場合は nproc コマンドが最も簡単です。make -j$(nproc) のように、ビルドやバッチ処理の並列数指定にもよく使われます。詳しいオプションはnprocコマンドの解説記事で解説しています。
nproc
6
nproc と nproc --all の違い(コンテナで実機検証)
nproc はプロセスに割り当てられたCPUアフィニティ(cgroupやtasksetによる制限)を考慮した値を返し、nproc --all はその制限を無視してシステム全体の論理CPU数を返します。この違いは通常の環境では現れませんが、Dockerコンテナで--cpuset-cpusを使ってCPUを制限すると確認できます。
ホストのCPUのうち2個だけを割り当てたコンテナで実行した結果(実機で確認):
$ docker run --rm --cpuset-cpus="0,1" ubuntu:24.04 bash -c "nproc; echo ---; nproc --all"
2
---
6
nproc はコンテナに割り当てられた2個を返し、nproc --all はホストの全論理CPU数である6個を返しています。同じコンテナでlscpuを実行するとホストと同じCPU(s): 6が表示され、cgroupによるCPU制限は反映されません。実際に使える論理CPU数を確認したい場合はnproc(オプションなし)を基準にしてください。
早見表:目的別のコマンド一覧
| 目的 | コマンド | 備考 |
|---|---|---|
| CPUの型番・コア数・アーキテクチャをまとめて確認したい | lscpu | 最も見やすく整理された出力 |
| CPUごとのオンライン状態や周波数を確認したい | lscpu -e | 表形式で一覧表示 |
| スクリプトでCPU情報を機械的に処理したい | lscpu --json | JSON形式で出力 |
| lscpuが無い環境で詳細を確認したい | cat /proc/cpuinfo | カーネルが提供する生データ |
| 型番だけ知りたい | grep -m1 "model name" /proc/cpuinfo | 1行だけ抽出 |
| 並列実行数の目安(論理CPU数)だけ知りたい | nproc | cgroup/taskset制限を反映 |
| 制限を無視したシステム全体のCPU数を知りたい | nproc --all | コンテナ内でも常にホスト全体の数 |
CPU使用率をリアルタイムで確認したい場合
ここまで紹介したのはCPUの「仕様」を確認する方法です。「今どれだけCPUが使われているか」という使用率を確認したい場合は、別のコマンドを使います。
- プロセスごとのCPU使用率をリアルタイムで見たい場合はtopコマンドの解説記事を参照してください。
- CPU使用率をシステム全体の推移として要約表示したい場合はvmstatコマンドの解説記事を参照してください。
- 高負荷が発生した際の切り分け手順は高負荷時の初動対応の解説記事にまとめています。
注意点
lscpuはutil-linuxパッケージに含まれます。極小構成のコンテナイメージなどでは未インストールの場合があり、その際はcat /proc/cpuinfoで代替できます。lscpu・/proc/cpuinfoはDockerコンテナ内で実行してもホストの物理CPU情報をそのまま表示します(本記事のコンテナ検証でもCPU(s): 6のまま変化しませんでした)。cgroupやcpusetによる制限が反映されるのはnproc(オプションなし)です。- クラウドVM(vCPU)では、1 vCPU が必ずしも1物理コアとは対応しません。
Thread(s) per coreが2の場合、vCPU数は物理コア数の2倍になっていることがあります。
よくある質問(FAQ)
Q. 論理CPUと物理CPU(コア)の違いは?
A. 物理コアは実際のCPU演算ユニットの数、論理CPUはOSから見える処理単位の数です。ハイパースレッディングが有効な場合、1物理コアが2論理CPUとして見えます。lscpuのThread(s) per coreが2ならハイパースレッディング有効、1なら無効です。
Q. lscpu: command not found と表示される場合は?
A. util-linuxパッケージが未インストールです。Ubuntu/Debian系はsudo apt install util-linux、RHEL/CentOS系はsudo yum install util-linuxでインストールできます。インストールしたくない場合はcat /proc/cpuinfoを使ってください。
Q. Dockerコンテナで実際に使えるCPU数を確認するには?
A. コンテナ内でnproc(オプションなし)を実行してください。--cpuset-cpusや--cpusで制限したCPU数が反映されます。lscpuやnproc --allはホストの全CPU数を表示するため、制限値の確認には使えません。
Q. CPUの型番(モデル名)だけを知りたい
A. lscpu | grep "Model name"、またはgrep -m1 "model name" /proc/cpuinfoで1行だけ取り出せます。

コメント