この記事は Linux コマンド 全部オレ Advent Calendar 2017 の16日目の記事です。
free
NAME
free - Display amount of free and used memory in the system
SYNOPSIS
free [options]
DESCRIPTION
free displays the total amount of free and used physical and swap memory in the system, as well as the buffers and caches used by
the kernel. The information is gathered by parsing /proc/meminfo. The displayed columns are:
total Total installed memory (MemTotal and SwapTotal in /proc/meminfo)
used Used memory (calculated as total - free - buffers - cache)
free Unused memory (MemFree and SwapFree in /proc/meminfo)
shared Memory used (mostly) by tmpfs (Shmem in /proc/meminfo, available on kernels 2.6.32, displayed as zero if not available)
buffers
Memory used by kernel buffers (Buffers in /proc/meminfo)
cache Memory used by the page cache and slabs (Cached and Slab in /proc/meminfo)
buff/cache
Sum of buffers and cache
available
Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided by the
cache or free fields, this field takes into account page cache and also that not all reclaimable memory slabs will be
reclaimed due to items being in use (MemAvailable in /proc/meminfo, available on kernels 3.14, emulated on kernels 2.6.27+,
otherwise the same as free)
現在のメモリーの使用状況を知ることができる。/proc/meminfo を整形して表示するコマンド。
主な使い方
[sinsengumi ~]$ free -wh
total used free shared buffers cache available
Mem: 3.7G 273M 1.8G 560K 1.9M 1.6G 3.1G
Swap: 4.0G 0B 4.0G
-w
を指定すると、buffers
と cache
を別カラムで表示する。
用語 | 意味 |
---|---|
total | OS が認識している物理的なメモリサイズ(RAID カードや NIC などでメモリが使われておりその分は計上されていない) |
used | 使用しているメモリサイズ(total - free - buffers - cache )つまり、buffers と cache は含まない |
free | 空きメモリサイズ(buffers と cache は含まれていない) |
shared | 共有メモリに割り当てられたメモリサイズ |
buffers | バッファキャッシュに割り当てられたメモリサイズ(バッファキャッシュとはブロックデバイス用のキャッシュ) |
cache | ページキャッシュに割り当てられたメモリサイズ(ページキャッシュはファイルに対するキャッシュ) |
available | 新しいアプリがスワップせずに使えるメモリサイズ |
Swap | スワップに割り当てたメモリサイズ(スワップとはディスク領域の一部をメモリとして利用する技術なので、実態はディスクが 4.0G 割り当てられているということ) |
OS は使い続けるほど、メモリにキャッシュを割り当てる。そのため free はどんどん減っていく。
なので、free が無いからといってメモリが枯渇しているということではない。buffers と cache の値も見る必要がある。
以前の free には -/+ buffers/cache
行があって、実際に使用できる空きメモリ(buffers と cache を考慮した)はこちらの free カラムを見ていたが、最新の CentOS7 では無くなって available カラムが追加されている。基本的に今どれくらいのメモリが空いてるのかはこれを見ればよさそう(キャッシュも考慮してるみたい)
top
NAME
top - display Linux processes
SYNOPSIS
top -hv|-bcHiOSs -d secs -n max -u|U user -p pid -o fld -w [cols]
The traditional switches `-' and whitespace are optional.
DESCRIPTION
The top program provides a dynamic real-time view of a running system. It can display system summary information as well as a list of processes or
threads currently being managed by the Linux kernel. The types of system summary information shown and the types, order and size of information
displayed for processes are all user configurable and that configuration can be made persistent across restarts.
The program provides a limited interactive interface for process manipulation as well as a much more extensive interface for personal configuration
-- encompassing every aspect of its operation. And while top is referred to throughout this document, you are free to name the program anything
you wish. That new name, possibly an alias, will then be reflected on top's display and used when reading and writing a configuration file.
システム全体の負荷やプロセス, CPU, メモリ, スワップの統計情報を表示する。
主な使い方
[sinsengumi ~]$ top
top - 15:49:30 up 26 days, 4:20, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 90 total, 1 running, 89 sleeping, 0 stopped, 0 zombie
%Cpu(s): 18.7 us, 0.7 sy, 0.0 ni, 80.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1883472 total, 151348 free, 442012 used, 1290112 buff/cache
KiB Swap: 2097148 total, 2097096 free, 52 used. 1204188 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2027 root 20 0 767764 78556 8508 S 18.9 4.2 84:48.73 ds_agent
1653 root 20 0 913600 17796 3780 S 0.3 0.9 94:18.24 box
101960 root 20 0 285792 68272 3060 S 0.3 3.6 28:20.82 ruby
1 root 20 0 51744 4060 2504 S 0.0 0.2 3:15.58 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.17 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:31.20 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 1:10.49 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:08.48 watchdo
デフォルトでは3秒間隔で表示が更新される。
1行目
top - 15:49:30 up 26 days, 4:20, 2 users, load average: 0.00, 0.01, 0.05
- 15:49:30
- 現在時刻
- up 26 days, 4:20
- 稼働時間
- 2 users
- ログインユーザ数
- load average: 0.00, 0.01, 0.05
- 1分,5分,15分間の単位時間あたりの平均待ちタスク数。
ロードアベレージが、CPU のコア数以上になっていると負荷が高い。
ちなみに CPU のコア数は以下のように取る。
[sinsengumi ~]$ cat /proc/cpuinfo | grep processor | wc -l
2
2行目
Tasks: 90 total, 1 running, 89 sleeping, 0 stopped, 0 zombie
タスク(= プロセス)の情報を表示している。
項目 | 意味 |
---|---|
total | タスクの合計数 |
running | 稼働中のタスク数 |
sleeping | 待機中のタスク数 |
stopped | 停止タスク数 |
zombie | ゾンビタスク数 |
ちなみに、スレッドの数は以下のような感じで取ることができる。
[sinsengumi ~]$ cat /proc/99020/status | grep -i thread
Threads: 2
[sinsengumi ~]$ ls /proc/99020/task
99020 99021
[sinsengumi ~]$ ls /proc/99020/task | wc -l
2
3行目
%Cpu(s): 18.7 us, 0.7 sy, 0.0 ni, 80.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
CPU 使用率を表示している。
man には、以下のように記載があるので、ほぼほぼリアルタイムの CPU 使用率と思ってよさそう(Web の記事を見ると、OS を起動してからの平均値
と書いてあったりするので注意。昔はそうだった?)
Line 2 shows CPU state percentages based on the interval since the last refresh.
項目 | 意味 |
---|---|
us | ユーザプロセスの使用時間 |
sy | システムプロセスの使用時間 |
ni | 実行優先度を変更したユーザプロセスの使用時間 |
id | アイドル状態の時間 |
wa | I/O の終了待をしている時間 |
hi | ハードウェア割込み要求での使用時間 |
si | ソフトウェア割込み要求での使用時間 |
また、top 中に 1
を押すと、CPU のコア毎の値が見れるようになる。
%Cpu0 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
4,5行目
KiB Mem : 1883472 total, 151348 free, 442012 used, 1290112 buff/cache
KiB Swap: 2097148 total, 2097096 free, 52 used. 1204188 avail Mem
メモリーの使用状況を表示している。
項目 | 意味 |
---|---|
total | トータルのメモリサイズ |
free | 使用していないメモリサイズ |
used | 使用中のメモリメモリサイズ |
buff/cache | バッファキャッシュ/ページキャッシュとして割り当てられたメモリサイズ |
avail Mem | 新しいアプリがスワップせずに使えるメモリサイズ |
7行目以降
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2027 root 20 0 767764 78556 8508 S 18.9 4.2 84:48.73 ds_agent
1653 root 20 0 913600 17796 3780 S 0.3 0.9 94:18.24 box
101960 root 20 0 285792 68272 3060 S 0.3 3.6 28:20.82 ruby
1 root 20 0 51744 4060 2504 S 0.0 0.2 3:15.58 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.17 kthreadd
プロセスの一覧を表示している。
項目 | 意味 | 説明 |
---|---|---|
PID | プロセス ID | プロセス ID |
USER | ユーザ | プロセスを実行しているユーザ |
PR | 優先度 | プロセスの静的優先度(数字が低い程優先度は高い) |
NI | 相対優先度 | プロセスの相対的優先度(相対的優先度)-20(最高)~19(最低) |
VIRT | 仮想メモリ | Virtual Image (KiB)。確保された(まだ使われてない可能性もある)仮想メモリ全て。スワップしたメモリ使用量を含む。 |
RES | 物理メモリ | Resident Size (KiB)。 スワップしていない、使用した物理メモリのサイズ。 |
SHR | 共有メモリ | Shared Memory (KiB)。 他のプロセスと共有される可能性のあるメモリのサイズ。 |
S | 状態 | Process Status。 以下のいずれの状態であるかを示している。 D : 割り込み不能 R : 実行中 S : スリープ状態 T : 停止中 Z : ゾンビプロセス |
%CPU | CPU 使用率 | タスクの CPU 使用率 |
%MEM | メモリ使用率 | Memory Usage (RES)。タスクの物理メモリの使用率 |
TIME+ | 実行時間 | タスクが起動してから利用した CPU 時間の総量(なので sleep してるだけだと増えない) |
COMMAND | 実行時間 | 現在実行中のコマンド名 |