Linux CPUの確認方法まとめ|lscpu・/proc/cpuinfo・nprocコマンドの使い方

コマンドリファレンス

LinuxでCPUの情報(コア数・スレッド数・型番など)を確認するには、lscpu コマンドを実行するのが最も簡単です。特別なオプションなしで、CPUの主要な情報を一括表示できます。

lscpu

本記事では、実機で確認した出力例をもとに、lscpu/proc/cpuinfonproc それぞれの使い方と読み方、さらに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)

主要項目の見方

項目意味
ArchitectureCPUのアーキテクチャ(x86_64、aarch64など)
CPU(s)OSから見える論理CPU数(後述のnprocと同じ値)
Model nameCPUの型番・製品名
Thread(s) per core1コアあたりのスレッド数。2ならハイパースレッディング有効
Core(s) per socketCPUソケット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 --jsonJSON形式で出力
lscpuが無い環境で詳細を確認したいcat /proc/cpuinfoカーネルが提供する生データ
型番だけ知りたいgrep -m1 "model name" /proc/cpuinfo1行だけ抽出
並列実行数の目安(論理CPU数)だけ知りたいnproccgroup/taskset制限を反映
制限を無視したシステム全体のCPU数を知りたいnproc --allコンテナ内でも常にホスト全体の数

CPU使用率をリアルタイムで確認したい場合

ここまで紹介したのはCPUの「仕様」を確認する方法です。「今どれだけCPUが使われているか」という使用率を確認したい場合は、別のコマンドを使います。

注意点

  • 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として見えます。lscpuThread(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数が反映されます。lscpunproc --allはホストの全CPU数を表示するため、制限値の確認には使えません。

Q. CPUの型番(モデル名)だけを知りたい

A. lscpu | grep "Model name"、またはgrep -m1 "model name" /proc/cpuinfoで1行だけ取り出せます。

関連記事

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント