proc -
プロセスの情報を含む擬似ファイルシステム
proc
ファイルシステムは擬似的なファイルシステムであり、
カーネル内のデータへのインターフェースとして使用される。
一般的には
/proc
にマウントされる。
大部分のファイルは読み出し専用
(read-only) であるが、
いくつかのファイルは書き込み可能であり、
そのファイルに書き込めばカーネルの内部変数を変更できる。
以下のリストでは
/proc
階層以下のファイルやディレクトリの多くについて説明している。
- /proc/[pid]
- 実行中のプロセスについてのサブディレクトリ。
サブディレクトリ名は
(そのプロセスの)
プロセス ID である。
各サブディレクトリは、以下の擬似ファイルとディレクトリを含む。
-
/proc/[number]/auxv
(カーネル 2.6.0-test7 以降)
- 実行時にプロセスに渡された
ELF
インタープリター情報が格納されている。
個々のエントリーは、
unsigned long 型の ID 1 個に unsigned
long 型の値 1
個が続くフォーマットである。
最後のエントリーには
0 が 2 個入っている。
getauxval(3) も参照。
-
/proc/[pid]/cgroup (Linux 2.6.24
以降)
- このファイルは、プロセスやタスクが所属するコントロールグループを示す。
cgroup
の各階層についてエントリーが
1 つあり、
各エントリーは以下の形式のコロン区切りのフィールドで構成される。
5:cpuacct,cpu,cpuset:/daemons
- コロン区切りの各フィールドは、左から右の順で、以下の意味を持つ。
- 1.
- 階層 ID 番号
- 2.
- その階層に関連付けたサブシステムの集合
- 3.
- プロセスが所属する階層内のコントロールグループ
- このファイルが存在するのは、カーネルのコンフィギュレーションオプショ
ン CONFIG_CGROUPS
を有効にした場合だけである。
-
/proc/[pid]/clear_refs (Linux 2.6.22
以降)
-
このファイルは書き込み専用ファイルで、書き込めるのはプロセスの所有者だけである。
このファイルには以下の値を書き込むことができる。
- 1 (Linux 2.6.22 以降)
- Reset the PG_Referenced and ACCESSED/YOUNG bits for all the
pages associated with the process. (Before kernel 2.6.32, writing any
nonzero value to this file had this effect.)
- 2 (Linux 2.6.32 以降)
- Reset the PG_Referenced and ACCESSED/YOUNG bits for all
anonymous pages associated with the process.
- 3 (Linux 2.6.32 以降)
- Reset the PG_Referenced and ACCESSED/YOUNG bits for all
file-mapped pages associated with the process.
- Clearing the PG_Referenced and ACCESSED/YOUNG bits provides
a method to measure approximately how much memory a process is using. One
first inspects the values in the "Referenced" fields for the
VMAs shown in /proc/[pid]/smaps to get an idea of the memory
footprint of the process. One then clears the PG_Referenced and
ACCESSED/YOUNG bits and, after some measured time interval, once again
inspects the values in the "Referenced" fields to get an idea of
the change in memory footprint of the process during the measured
interval. If one is interested only in inspecting the selected mapping
types, then the value 2 or 3 can be used instead of 1.
A further value can be written to affect a different bit:
- 4 (Linux 3.11 以降)
- Clear the soft-dirty bit for all the pages associated with
the process. This is used (in conjunction with /proc/[pid]/pagemap)
by the check-point restore system to discover which pages of a process
have been dirtied since the file /proc/[pid]/clear_refs was written
to.
- Writing any value to /proc/[pid]/clear_refs other
than those listed above has no effect.
/proc/[pid]/clear_refs
ファイルが存在するのは、カーネルのコンフィギュレーションオプション
CONFIG_PROC_PAGE_MONITOR
を有効にした場合だけである。
- /proc/[pid]/cmdline
- この読み出し専用のファイルはプロセスの完全なコマンド行を保持する。
ただし、そのプロセスがゾンビプロセスの場合は、
このファイルは空となる。
つまり、
このファイルを読み出しても一文字も返らない。
このファイルではコマンドライン引き数が、
ヌルバイト ('\0')
で区切られた文字列として書かれており、
最後の文字列の後にヌルバイトが一つ置かれる。
-
/proc/[pid]/comm (Linux 2.6.33
以降)
- This file exposes the process's comm
value—that is, the command name associated with the process.
Different threads in the same process may have different comm
values, accessible via /proc/[pid]/task/[tid]/comm. A thread may
modify its comm value, or that of any of other thread in the same
thread group (see the discussion of CLONE_THREAD in
clone(2)), by writing to the file
/proc/self/task/[tid]/comm. Strings longer than
TASK_COMM_LEN (16) characters are silently truncated.
This file provides a superset of the prctl(2) PR_SET_NAME and
PR_GET_NAME operations, and is employed by
pthread_setname_np(3) when used to rename threads other than the
caller.
-
/proc/[pid]/coredump_filter (Linux 2.6.23
以降)
-
core(5) 参照。
-
/proc/[pid]/cpuset (Linux 2.6.12
以降)
-
cpuset(7) 参照。
- /proc/[pid]/cwd
- プロセスのカレントワーキングディレクトリへのシンボリックリンク。
例えば、プロセス 20
のカレントワーキングディレクトリを見つけるためには、
次のようにすればよい。
$ cd /proc/20/cwd; /bin/pwd
pwd
コマンドはシェルの内部コマンドのことがよくあり、
うまく動作しないかもしれない。
bash(1) では pwd -P
を使ってもよい。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、
このシンボリックリンクの内容は参照できない
(スレッドの終了は通常
pthread_exit(3)
を呼び出しにより行われる)。
- /proc/[pid]/environ
- このファイルはプロセスの環境変数を含んでいる。
各エントリーはヌルバイト
('\0')
で区切られていて、
末尾にヌルバイトがあるかもしれない。
したがって、プロセス
1
の環境変数を表示するためには
次のようにすればよい。
$ strings /proc/1/environ
- /proc/[pid]/exe
- Linux 2.2
以降では、このファイルはシンボリックリンクで、
実行可能コマンドの実際のパス名を格納している。
このシンボリックリンクは通常のように辿ることができる;
これをオープンすると実行可能ファイルがオープンされる。
(コマンドラインで)
/proc/[pid]/exe
と入力すると、プロセス番号
[pid] で実行されている
実行可能ファイルをもう一つ実行することができる。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、
このシンボリックリンクの内容は参照できない
(スレッドの終了は通常
pthread_exit(3)
を呼び出しにより行われる)。
Linux 2.0 以前では、 /proc/[pid]/exe
は実行されたバイナリへのポインターで、シンボリックリンクのように見える。
Linux 2.0
以前では、このファイルに対して
readlink(2)
を実行すると、次のフォーマットの文字列が返る。
[デバイス番号]:iノード番号
たとえば、[0301]:1502
はメジャーデバイス番号
03 (IDE, MFM などのドライブ)
マイナーデバイス番号
01
(最初のドライブの最初のパーティション)
の デバイス上の
iノード番号 1502
である。
-inum
オプションをつけて
find(1) を使うと、
このファイルの所在を探すことができる。
- /proc/[pid]/fd/
- プロセスがオープンしたファイル各々に対するエントリーを含むサブディレクトリ。
ファイルディスクリプターがファイル名で、
実際のファイルへのシンボリックリンクになっている。
したがって 0
は標準入力、1
は標準出力、2
は標準エラー出力、などとなる。
パイプやソケットのファイルディスクリプターでは、
エントリーはファイル種別が
inode
という内容を持つシンボリックリンクとなる。
このファイルに対して
readlink(2)
を呼び出すと以下の形式の文字列が返る。
type:[inode]
例えば、 socket:[2248868] は inode
が 2248868
のソケットである。
ソケットの場合、
その inode を元に /proc/net/
以下のファイルを参照し詳しい情報を得ることができる。
対応する inode
がないファイルディスクリプター
(例えば epoll_create(2), eventfd(2),
inotify_init(2), signalfd(2), timerfd(2)
により生成されたファイルディスクリプター)
では、
エントリーはその内容が以下の形式のシンボリックリンクとなる。
anon_inode:<file-type>
file-type
は角括弧で囲まれる場合がある。
例えば、 epoll
ファイルディスクリプターは、
内容が文字列
anon_inode:[eventpoll]
のシンボリックリンクを持つ場合がある。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、
このディレクトリの内容は参照できない
(スレッドの終了は通常
pthread_exit(3)
を呼び出しにより行われる)。
コマンドライン引き数としてファイル名を受け取るが、引き数が
渡されなかった場合
に標準入力から入力を受け取らないようなプログラムや、
コマンドライン引き数とし
て書き込みファイルを受け取るが、引き数が
渡されなかった場合に標準出力に出力を
行わないようなプログラムであっても、
/proc/[pid]/fd
を使うことで標準入力や
標準出力を使用できるようになる。
例えば、 -i
を入力ファイルを指定するフラ
グ、 -o
を出力ファイルを指定するフラグと仮定すると、
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
を実行することにより、フィルタとして動作させることができる。
/proc/self/fd/N は、ある種の
UNIX や UNIX
風のシステムにある
/dev/fd/N
とだいたい同じである。
事実 Linux のたいていの
MAKEDEV スクリプトは、
/dev/fd を /proc/self/fd
へのシンボリックリンクにしている。
ほとんどのシステムでは、シンボリックリンク
/dev/stdin, /dev/stdout, /dev/stderr
が提供されており、それぞれ
/proc/self/fd 内のファイル
0, 1, 2
にリンクされている。
したがって、上述のサンプルコマンドは次のようにも書くことができる。
$ foobar -i /dev/stdin -o /dev/stdout ...
-
/proc/[pid]/fdinfo/ (Linux 2.6.22
以降)
- このサブディレクトリには、そのプロセスがオープンしているファイル毎の
エントリーが入っており、ファイルディスクリプターがファイル名となっている。
各ファイルの内容を読み出すことで、対応するファイルディスクリプターに関する
情報を得ることができる。以下に例を示す。
$ cat /proc/12015/fdinfo/4
pos: 1000
flags: 01002002
pos フィールドは 10
進数で、現在のファイルオフセットを示す。
flags フィールドは 8
進数で、
ファイルのアクセスモードとファイル状態フラグを示す
( open(2) 参照)。
このディレクトリのファイルは、プロセスの所有者だけが読み出すことができる。
-
/proc/[pid]/io (kernel 2.6.20 以降)
- このファイルは、
プロセスの I/O
統計情報を表示する。
以下に例を挙げる。
# cat /proc/3828/io
rchar: 323934931
wchar: 323929600
syscr: 632687
syscw: 632675
read_bytes: 0
write_bytes: 323932160
cancelled_write_bytes: 0
フィールドの詳細は以下の通りである。
-
rchar:
読み出し文字数
- このタスクがきっかけでストレージから読み出されたバイト数。
この値は、単純に
read(2)
や同様のシステムコールからこのプロセスに渡されたバイト数の合計である。
この値には、
端末入出力なども含まれ、
実際に物理ディスク
I/O が必要であったか
(読み出しがページキャッシュからの読み出しで十分であったか)
どうかは関係ない。
-
wchar:
書き込み文字数
- このタスクがきっかけで行われたか行われるはずのディスクへの書き込みバイト数。
rchar
と同じ注意があてはまる。
-
syscr:
読み出しシステムコール数
- 読み出し I/O
操作— read(2) や pread(29
などのシステムコール—を試みた回数。
-
syscw:
書き込みシステムコール数
- 書き込み I/O
操作— write(2) や pwrite(29
などのシステムコール—を試みた回数。
-
read_bytes:
読み出しバイト数
- このプロセスが実際にストレージ層から取得しようとしたバイト数。
ブロックデバイス上のファイルシステムでは正確な値となる。
-
write_bytes:
書き込みバイト数
- このプロセスが実際にストレージ層に転送しようとしたバイト数。
-
cancelled_write_bytes:
- The big inaccuracy here is truncate. If a process writes
1MB to a file and then deletes the file, it will in fact perform no
writeout. But it will have been accounted as having caused 1MB of write.
In other words: this field represents the number of bytes which this
process caused to not happen, by truncating pagecache. A task can cause
"negative" I/O too. If this task truncates some dirty pagecache,
some I/O which another task has been accounted for (in its
write_bytes) will not be happening.
-
注意:
現在の実装では 32
ビットシステムでは少しいやらしい点がある。
プロセス B が 64
ビットカウンターの一つを更新している途中に、プロセス
A がプロセス B の
/proc/[pid]/io
を読んだ場合、
プロセス A
に更新中の結果が見えることがある。
-
/proc/[pid]/gid_map (Linux 3.5
以降)
-
/proc/[pid]/uid_map
の説明を参照すること。
-
/proc/[pid]/limits (Linux 2.6.24
以降)
- このファイルは、そのプロセスの各リソース制限について、
ソフトリミット、ハードリミット、計測単位を表示する
( getrlimit(2) 参照)。 Linux 2.6.35
以前では、
プロセスの実 UID
を持つプロセスだけが、
このファイルを読み出すことができる。
Linux 2.6.36 以降では、
システム上のすべてのユーザーがこのファイルを読み出すことができる。
-
/proc/[pid]/map_files/ (kernel 3.3
以降)
- このサブディレクトリには、
メモリーマップされたファイルに対応するエントリーが置かれる
( mmap(2) 参照)。
エントリーの名前がメモリー領域の
(16 進数表現の)
開始アドレスと終了アドレスの組で、
エントリーはマップされているファイルへのシンボリックリンクである。
以下に例を示す。
なお、 出力は幅が 80
文字のディスプレイに合うように折り返して整形されている。
$ ls -l /proc/self/map_files/
lr--------. 1 root root 64 Apr 16 21:31
3252e00000-3252e20000 -> /usr/lib64/ld-2.15.so
...
これらのエントリーが存在するのは
MAP_FILE
フラグでマッピングされたメモリー領域についてであるが、
Linux
での無名の共有メモリー
( MAP_ANON | MAP_SHARED
で作成された領域)
の実装方法では、
このディレクトリに無名の共有メモリーに関するエントリーも存在する。
以下は、
マッピング元のファイルが削除された
/dev/zero
ファイルでの例である。
lrw-------. 1 root root 64 Apr 16 21:33
7fc075d2f000-7fc075e6f000 -> /dev/zero (deleted)
このディレクトリが存在するのは、
カーネルのコンフィギュレーションオプション
CONFIG_CHECKPOINT_RESTORE
が有効になっている場合だけである。
- /proc/[pid]/maps
- 現在マッピングされているメモリー領域とそのアクセスパーミッションを含む。
メモリーマッピングについての詳しい情報は
mmap(2) を参照。
ファイルのフォーマットは以下のとおり:
address perms offset dev inode pathname
00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
00651000-00652000 r--p 00051000 08:02 173521 /usr/bin/dbus-daemon
00652000-00655000 rw-p 00052000 08:02 173521 /usr/bin/dbus-daemon
00e03000-00e24000 rw-p 00000000 00:00 0 [heap]
00e24000-011f7000 rw-p 00000000 00:00 0 [heap]
...
35b1800000-35b1820000 r-xp 00000000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a20000-35b1a21000 rw-p 00020000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a21000-35b1a22000 rw-p 00000000 00:00 0
35b1c00000-35b1dac000 r-xp 00000000 08:02 135870 /usr/lib64/libc-2.15.so
35b1dac000-35b1fac000 ---p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fac000-35b1fb0000 r--p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fb0000-35b1fb2000 rw-p 001b0000 08:02 135870 /usr/lib64/libc-2.15.so
...
f2c6ff8c000-7f2c7078c000 rw-p 00000000 00:00 0 [stack:986]
...
7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0 [stack]
7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0 [vdso]
address フィールドは、
そのマッピングが占めているプロセスのアドレス空間である。
perms
フィールドはパーミッションのセットである。
r = read
w = write
x = execute
s = shared
p = private (copy on write)
offset はファイル
(などの)
中でのオフセット、
dev はデバイス
(メジャーデバイス番号:マイナーデバイス番号)、
inode
はそのデバイスの i
ノード番号である。 0
は、BSS
(初期化されていないデータ領域)
の場合のように、
このメモリー領域はどの
i
ノードとも関連付けられていないことを意味する。
pathname フィールドは、
通常そのマッピングに対応するファイルである。
ELF ファイルの場合、 ELF
プログラムヘッダーの
Offset
フィールドを見ることで
( readelf -l))、 簡単に
offset
との対応付けをすることができる。
これに加え、
役に立つ擬似パス名がある。
- [stack]
- 初期プロセスのスタック
(初期プロセスはメインスレッドとも呼ばれる)。
-
[stack:<tid>] (Linux 3.4
以降)
- スレッドのスタック
( <tid> はスレッド ID
である)。 パス
/proc/[pid]/task/[tid]/
に対応する。
- [vdso]
- 動的にリンクされる仮想共有オブジェクト
(virtual dynamically linked shared object)。
- [heap]
- プロセスのヒープ。
-
pathname
が空の場合、
その領域は mmap(2)
を使って確保された無名マッピングである。
gdb(1), strace(1)
などを使ってプロセスを実行しない限り、
この領域をプロセスのソースと対応付ける簡単な方法はない。
Linux 2.0
ではパス名を書いたフィールドがない。
- /proc/[pid]/mem
- このファイルは、
open(2), read(2), lseek(2)
を通して、プロセスのメモリーのページにアクセスするために使われる。
-
/proc/[pid]/mountinfo (Linux 2.6.26
以降)
- このファイルには、マウントポイントについての情報が入っている。
以下のような形式の行から構成される。
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
- 括弧付きの数字は、以下の説明のためのものである。
- (1)
- マウント ID:
マウントの一意な識別子
( umount(2)
の後は再利用されるかもしれない)。
- (2)
- parent ID: 親マウントの
ID
(マウントツリーの最上位の場合は自分自身の
ID となる)。
- (3)
- major:minor:
ファイルシステム上のファイルの
st_dev の値 (stat(2)
参照)。
- (4)
- ルート:
そのファイルシステム内のマウントのルート。
- (5)
- マウントポイント:
マウントポイントのそのプロセスのルートからの相対パス。
- (6)
- マウントオプション:
各マウントのオプション。
- (7)
- オプションフィールド:
"tag[:value]"
形式のフィールドが 0
個以上並ぶ。
- (8)
- セパレータ:
オプションフィールドの終わりを示す。
- (9)
- ファイルシステム種別:
ファイルシステムの名前。
"type[.subtype]"
という形式となる。
- (10)
- マウント元:
ファイルシステム固有の情報。ない場合は
"none" となる。
- (11)
- super options:
スーパーブロック単位のオプション。
- 解釈する側は認識できないオプションフィールドは全て無視すべきである。
現在のところ、オプションフィールドとしては以下のようなものがある。
- shared:X
- マウントはピアグループ
(peer group) X
で共有されている。
- master:X
- マウントはピアグループ
(peer group) X
のスレーブである。
- propagate_from:X
- マウントはスレーブであり、ピアグループ
X (*) から mount propagation
を受信する。
- unbindable
- マウントは unbind
できない。
- (*) X
は、プロセスの root
で直近の dominant peer group
である。 X
がマウントの直接のマスターである場合や、
同じ root に dominant peer group
がない場合は、
"master:X"
フィールドだけが存在し、
"propagate_from:X"
フィールドは存在しない。
mount propagation
の詳細については、
Linux
カーネルソースツリー内の
Documentation/filesystems/sharedsubtree.txt
を参照。
-
/proc/[pid]/mounts (Linux 2.4.19
以降)
- そのプロセスのマウント名前空間に現在マウントされている
全ファイルシステムのリスト。
このファイルのフォーマットは
fstab(5) に載っている。
カーネル 2.6.15
以降では、このファイルを監視することができる
(pollable)。
このファイルを読み出し用にオープンした後で、このファイルに変更があると
(つまりファイルシステムのマウントやアンマウントがあると)、
select(2)
ではそのファイルディスクリプターは読み出し可能となり、
poll(2) と epoll_wait(2)
ではそのファイルはエラー状態として通知される。
詳細は namespaces(7)
を参照。
-
/proc/[pid]/mountstats (Linux 2.6.17
以降)
- このファイルを通じて、そのプロセスのマウント名前空間内のマウントポイントに関する
各種情報
(統計、設定情報)
を参照できる。
ファイルの各行は以下のフォーマットである。
device /dev/sda7 mounted on /home with fstype ext3 [statistics]
( 1 ) ( 2 ) (3 ) (4)
- 各行のフィールドは以下の通りである。
- (1)
- マウントされているデバイス名
(対応するデバイスがない場合は
"nodevice" となる)。
- (2)
- マウントポイントのファイルシステムツリーにおけるパス名。
- (3)
- ファイルシステム種別。
- (4)
- 追加の統計や設定情報。
現在のところ (Linux 2.6.26
時点では)、
このフィールドで情報が提供されているのは
NFS
ファイルシステムだけである。
- このファイルはプロセスの所有者だけが読み出すことができる。
詳しい情報は namespaces(7)
を参照。
-
/proc/[pid]/ns/ (Linux 3.0 以降)
- このサブディレクトリには、名前空間毎に
1
エントリーが置かれる。
各エントリーは setns(2)
による操作をサポートしている。
詳細な情報は namespaces(7)
を参照。
-
/proc/[pid]/numa_maps (Linux 2.6.14
以降)
-
numa(7) を参照。
-
/proc/[pid]/oom_adj (Linux 2.6.11
以降)
- このファイルは、メモリー不足
(OOM)
の状況下でどのプロセスを殺すべきかを選択す
るのに使用されるスコアを調整するのに使用される。カーネルは、プロセスの
oom_score
値のビットシフト操作に、この値を使用する。この値として有効な値
は -16 から +15
までと、特別な意味を持つ
-17 である。 -17
はそのプロセス
に対する OOM-killing
を完全に無効にすることを意味する。正の値ほど、そのプロ
セスが OOM-killer
により殺される可能性が高くなり、負の値ほど可能性が低くなる。
- このファイルのデフォルト値は
0 である。
新しいプロセスは親プロセスの
oom_adj
の設定を継承する。
このファイルを変更するためには、プロセスは特権
( CAP_SYS_RESOURCE)
を持っていなければならない。
- Linux 2.6.36 以降では、
このファイルの使用は非推奨とされ、
代わりに /proc/[pid]/oom_score_adj
が推奨されている。
-
/proc/[pid]/oom_score (Linux 2.6.11
以降)
- このファイルは、OOM-killer
のプロセス選択用として、カーネルが
このプロセス
に対して与えた現在のスコアを表示する。
高いスコアは、そのプロセスが
OOM-killer
により選択される
可能性が高いことを意味する。
このスコアの基本は
そのプロセスが使用しているメモリー量であり、
以下の要因により加算
(+) 減算 (-)
が行われる。
- *
- そのプロセスが多くの子プロセスを
fork(2)
を使って作成しているか
(+)。
- *
- そのプロセスが長時間実行されて来たか、
もしくは 多くの CPU
時間を使用しているか
(-)。
- *
- そのプロセスが低い
nice 値 (> 0)
を持っているか (+)。
- *
- そのプロセスが特権を持っているか
(-)。
- *
- そのプロセスが
direct hardware access
を行っているか (-)。
-
oom_score
は、そのプロセスの
oom_score_adj や oom_adj
設定で規定される調整にも影響を与える。
-
/proc/[pid]/oom_score_adj (Linux 2.6.36
以降)
- This file can be used to adjust the badness heuristic used
to select which process gets killed in out-of-memory conditions.
The badness heuristic assigns a value to each candidate task ranging from 0
(never kill) to 1000 (always kill) to determine which process is targeted.
The units are roughly a proportion along that range of allowed memory the
process may allocate from, based on an estimation of its current memory
and swap use. For example, if a task is using all allowed memory, its
badness score will be 1000. If it is using half of its allowed memory, its
score will be 500.
There is an additional factor included in the badness score: root processes
are given 3% extra memory over other tasks.
The amount of "allowed" memory depends on the context in which the
OOM-killer was called. If it is due to the memory assigned to the
allocating task's cpuset being exhausted, the allowed memory represents
the set of mems assigned to that cpuset (see cpuset(7)). If it is
due to a mempolicy's node(s) being exhausted, the allowed memory
represents the set of mempolicy nodes. If it is due to a memory limit (or
swap limit) being reached, the allowed memory is that configured limit.
Finally, if it is due to the entire system being out of memory, the
allowed memory represents all allocatable resources.
The value of oom_score_adj is added to the badness score before it is
used to determine which task to kill. Acceptable values range from -1000
(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). This allows user space
to control the preference for OOM-killing, ranging from always preferring
a certain task or completely disabling it from OOM killing. The lowest
possible value, -1000, is equivalent to disabling OOM-killing entirely for
that task, since it will always report a badness score of 0.
Consequently, it is very simple for user space to define the amount of
memory to consider for each task. Setting a oom_score_adj value of
+500, for example, is roughly equivalent to allowing the remainder of
tasks sharing the same system, cpuset, mempolicy, or memory controller
resources to use at least 50% more memory. A value of -500, on the other
hand, would be roughly equivalent to discounting 50% of the task's allowed
memory from being considered as scoring against the task.
For backward compatibility with previous kernels, /proc/[pid]/oom_adj
can still be used to tune the badness score. Its value is scaled linearly
with oom_score_adj.
Writing to /proc/[pid]/oom_score_adj or /proc/[pid]/oom_adj
will change the other with its scaled value.
-
/proc/[pid]/pagemap (Linux 2.6.25
以降)
- このファイルは、
プロセスの各仮想ページの物理ページフレームやスワップ領域へのマッピングを表示する。
各仮想ページに 64
ビットの値 1
つが対応し、
各ビットは以下のとおりである。
- 63
- セットされている場合、
このページは RAM
に存在する。
- 62
- セットされている場合、
このページはスワップ領域に存在する。
- 61 (Linux 3.5 以降)
- このページはファイルマップされたページか共有無名ページである。
- 60-56 (Linux 3.11 以降)
- ゼロ。
- 55 (Linux 3.11 以降)
- PTE が soft-dirty である
(カーネルのソースファイル
Documentation/vm/soft-dirty.txt
を参照)。
- 54-0
- このページが RAM
に存在する場合
(ビット 63)、
これらのビットはページフレーム番号を示す。
このページフレーム番号は
/proc/kpageflags と /proc/kpagecount
のインデックスに使用できる。
このページがスワップに存在する場合
(ビット 62)、 ビット 4-0
はスワップ種別を示し、
ビット 54-5
はスワップオフセットを示す。
- Linux 3.11 より前では、
ビット 60-55
はページサイズの基数
2 の log
を示すのに使われていた。
-
/proc/[pid]/pagemap
を効率的に活用するには、
/proc/[pid]/maps
を使ってメモリーのどの領域が実際にマップされているかを判断し、
seek
でマップされていない領域をスキップするのがよい。
-
/proc/[pid]/pagemap
ファイルが存在するのは、カーネルのコンフィギュレーションオプション
CONFIG_PROC_PAGE_MONITOR
を有効にした場合だけである。
-
/proc/[pid]/personality (Linux 2.6.28
以降)
- This read-only file exposes the process's execution domain,
as set by personality(2). The value is displayed in hexadecimal
notation.
- /proc/[pid]/root
- UNIX と Linux では、
ファイルシステムのルート
(/)
をプロセスごとに別々にできる。
これはシステムコール
chroot(2)
によって設定する。
このファイルはプロセスのルートディレクトリを指すシンボリックリンクで、
exe や fd/*
などと同じような動作をする。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、
このシンボリックリンクの内容は参照できない
(スレッドの終了は通常
pthread_exit(3)
を呼び出しにより行われる)。
-
/proc/[pid]/smaps (Linux 2.6.14
以降)
- このファイルは、そのプロセスの各マッピングのメモリー消費量を表示する
( pmap(1)
コマンドは解析しやすいであろう形式で同様の情報を表示する)。
マッピングのそれぞれについて、以下のような内容が表示される。
00400000-0048a000 r-xp 00000000 fd:03 960637 /bin/bash
Size: 552 kB
Rss: 460 kB
Pss: 100 kB
Shared_Clean: 452 kB
Shared_Dirty: 0 kB
Private_Clean: 8 kB
Private_Dirty: 0 kB
Referenced: 460 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
最初の行には、
/proc/[pid]/maps
で表示されるマッピングと同じ情報が表示される。
残りの行には、マッピングのサイズ、現在
RAM
上に存在するマッピングの量
("Rss")、
このマッピングのこのプロセスの
proportional share ("Pss")、
マッピング内の共有ページのうちクリーンなページ数とダーティページ数、
マッピング内のプライベートページのうちクリーンなページ数とダーティページ数、を示す。
"Referenced" は参照された
(referenced)
かアクセスされたと現在印が付いているメモリー量を示す。
"Anonymous"
はどのファイルにも属していないメモリー量を示す。
"Swap"
は使用中だがスワップされている無名メモリー
(would-be-anonymous memory)
の量を示す。
The "KernelPageSize" entry is the page size used by the kernel to
back a VMA. This matches the size used by the MMU in the majority of
cases. However, one counter-example occurs on PPC64 kernels whereby a
kernel using 64K as a base page size may still use 4K pages for the MMU on
older processors. To distinguish, this patch reports
"MMUPageSize" as the page size used by the MMU.
The "Locked" indicates whether the mapping is locked in memory or
not.
"VmFlags" field represents the kernel flags associated with the
particular virtual memory area in two letter encoded manner. The codes are
the following:
rd - readable
wr - writable
ex - executable
sh - shared
mr - may read
mw - may write
me - may execute
ms - may share
gd - stack segment grows down
pf - pure PFN range
dw - disabled write to the mapped file
lo - pages are locked in memory
io - memory mapped I/O area
sr - sequential read advise provided
rr - random read advise provided
dc - do not copy area on fork
de - do not expand area on remapping
ac - area is accountable
nr - swap space is not reserved for the area
ht - area uses huge tlb pages
nl - non-linear mapping
ar - architecture specific flag
dd - do not include area into core dump
sd - soft-dirty flag
mm - mixed map area
hg - huge page advise flag
nh - no-huge page advise flag
mg - mergeable advise flag
/proc/[pid]/smaps
ファイルが存在するのは、カーネルのコンフィギュレーションオプション
CONFIG_PROC_PAGE_MONITOR
を有効にした場合だけである。
-
/proc/[pid]/stack (Linux 2.6.29
以降)
- This file provides a symbolic trace of the function calls
in this process's kernel stack. This file is provided only if the kernel
was built with the CONFIG_STACKTRACE configuration option.
- /proc/[pid]/stat
- プロセスの状態についての情報。
これは ps(1)
で使われ、
カーネルのソースファイル
fs/proc/array.c
で定義されている。
各フィールドを順番に、
scanf(3)
のフォーマット指定子付きで以下に示す。
- (1) pid %d
-
プロセス ID。
- (2) comm %s
- 括弧でくくられた実行形式のファイル名。
実行形式がスワップアウトされているかどうかによらず、
見ることができる。
- (3) state %c
- プロセスの状態を示す、以下のいずれか
1 文字。
- R
- 実行中 (Running)
- S
- Sleeping in an interruptible wait
- D
- Waiting in uninterruptible disk sleep
- Z
- ゾンビ (Zombie)
- T
- (シグナルでの)
停止、または (Linux 2.6.33
より前では)
トレースによる停止
- t
- トレースによる停止
(Tracing stop) (Linux 2.6.33 以降)
- W
- ページング中 (Linux
2.6.0 より前のみ)
- X
- 死亡 (Dead) (Linux 2.6.0 以降)
- x
- 死亡 (Dead) (Linux 2.6.33 から 3.13
までのみ)
- K
- Wakekill (Linux 2.6.33 から 3.13
までのみ)
- W
- Waking (Linux 2.6.33 から 3.13
までのみ)
- P
- Parked (Linux 3.9 から 3.13
までのみ)
- (4) ppid %d
- このプロセスの親プロセスの
PID。
- (5) pgrp %d
- プロセスのプロセスグループ
ID。
- (6) session %d
- プロセスのセッション
ID。
- (7) tty_nr %d
- プロセスの制御端末
(マイナーデバイス番号はビット
31〜20 と 7〜0
にまたがって格納され、
メジャーデバイス番号はビット
15〜8 に格納される)。
- (8) tpgid %d
- プロセスの制御端末のフォアグランド・プロセスグループの
ID。
- (9) flags %u
- プロセスのカーネルフラグワード。
ビットの意味は、
<linux/sched.h>
で定義されている PF_*
を参照すること。
詳細はカーネルのバージョンに依存する。
このフィールドのフォーマットは
Linux 2.6 より前では %lu
であった。
- (10) minflt %lu
- プロセスが引き起こしたマイナーフォールト
(minor fault、ディスクから
メモリーページへのロードを必要としないフォールト)
の回数。
- (11) cminflt %lu
- (そのプロセスが終了を待っている)
子プロセスが引き起こしたマイナーフォールトの回数。
- (12) majflt %lu
- プロセスが引き起こしたメジャーフォールト
(major
fault、ディスクからメモリーページへのロードを必要とするフォールト)
の回数。
- (13) cmajflt %lu
- (そのプロセスが終了を待っている)
子プロセスが引き起こしたメジャーフォールトの回数。
- (14) utime %lu
- このプロセスがユーザーモードでスケジューリングされた時間の合計。
clock tick
単位で計測される (
sysconf(_SC_CLK_TCK)
で割った値が表示される)。
この値にはゲスト時間
guest_time (仮想 CPU
の実行に消費された時間)
も含まれる。これは、ゲスト時間のフィールドを認識しないアプリケーションにおいて、ゲスト時間分を計算に入れ損ねないようにするためである。
- (15) stime %lu
- プロセスのカーネルモードでの実行時間
(単位 jiffies)。
このプロセスがカーネルモードでスケジューリングされた時間の合計。
clock tick
単位で計測される (
sysconf(_SC_CLK_TCK)
で割った値が表示される)。
- (16) cutime %ld
- このプロセスの子プロセスで、終了待ち
(waited-for) のプロセスが、
ユーザーモードでスケジューリングされた時間の合計。
clock tick
単位で計測される (
sysconf(_SC_CLK_TCK)
で割った値が表示される)。
( times(2)
も参照すること。)
この値にはゲスト時間
cguest_time (仮想 CPU
を実行するのに消費した時間、下記参照)
も含まれる。
- (17) cstime %ld
- このプロセスの子プロセスで、終了待ち
(waited-for)
のプロセスが、カーネルモードでスケジューリングされた時間の合計。
clock tick
単位で計測される (
sysconf(_SC_CLK_TCK)
で割った値が表示される)。
- (18) priority %ld
- (Linux 2.6
の場合の説明)
リアルタイムスケジューリングポリシー
(下記の policy ; sched_setscheduler(2)
参照)
で動作しているプロセスでは、
この
値はスケジューリング優先度を反転した値
(スケジューリング優先度を
マイナスにし た値)
となる。値は -2 から -100
までの範囲の数値で、
それぞれリアルタイム優先
度の 1 から 99
に対応する。
リアルタイム以外のスケジューリングポリシーで動作し
ているプロセスでは、
この値はカーネル内で管理されている
nice 値そのもの ( setpriority(2))
となる。 カーネルは
nice 値を 0 (高) から 39 (低)
の範囲
の値として保持しており、
それぞれユーザーに見える
nice 値の -20 から 19 に対応
する。
Linux 2.6
より前では、このプロセスに割り当てられたスケジューリング
重みを変換した値が表示されていた。
- (19) nice %ld
- nice 値 (setpriority(2)
参照)。 19 (最低優先)
から -20 (最高優先)
の範囲の値である。
- (20) num_threads %ld
- このプロセスのスレッド数
(Linux 2.6 以降)。 カーネル 2.6
より前では、このフィールドは削除されたフィールドの
場所埋めとして 0
にハードコードされていた。
- (21) itrealvalue %ld
- インターバルタイマーによって、次に
SIGALRM
がプロセスへ送られるまでの時間
(単位 jiffies)。 カーネル 2.6.17
以降では、このフィールドはメンテナンスされなくなり、
0
にハードコードされている。
- (22) starttime %llu
- プロセスの起動時刻。システムが起動した時刻が起点である。
Linux 2.6
より前のカーネルでは、
この値の単位は jiffies
であった。 Linux 2.6
以降では、
値の単位はクロック
tick である ( sysconf(_SC_CLK_TCK)
で割った値となる)。
このフィールドのフォーマットは
Linux 2.6 より前では %lu
であった。
- (23) vsize %lu
- 仮想メモリーのサイズ。単位はバイト。
- (24) rss %ld
- Resident Set
Size。プロセスが持っている実メモリー上のページ数。
これはちょうどテキスト、データ、スタック空間に使われているページ数である。
デマンドロードされていないページや
スワップアウトされたページの数は含んでいない。
- (25) rsslim %lu
- このプロセスの
rss
の現在のソフトリミット
(バイト単位)。 getrlimit(2)
の RLIMIT_RSS
の説明を参照。
- (26) startcode %lu
- プログラムテキストが実行可能であるような領域の先頭アドレス。
- (27) endcode %lu
- プログラムテキストが実行可能であるような領域の末尾アドレス。
- (28) startstack %lu
- スタックの開始アドレス
(すなわち、スタックの底)。
- (29) kstkesp %lu
- 現在の ESP
(スタックポインター)
の値。
プロセスのカーネルスタックページにある。
- (30) kstkeip %lu
- 現在の EIP
(インストラクションポインター)
の値。
- (31) signal %lu
- 処理待ちのシグナルのビットマップ。
10
進数で表示される。このフィールドは廃止予定である。リアルタイムシグナルに関する情報は表示されないからである。代わりに
/proc/[pid]/status
を使うこと。
- (32) blocked %lu
- ブロックされた
(blocked)
シグナルのビットマップ。
10
進数で表示される。
このフィールドは廃止予定である。
リアルタイムシグナルに関する情報は表示されないからである。
代わりに /proc/[pid]/status
を使うこと。
- (33) sigignore %lu
- 無視された (ignored)
シグナルのビットマップ。
10
進数で表示される。
このフィールドは廃止予定である。
リアルタイムシグナルに関する情報は表示されないからである。
代わりに /proc/[pid]/status
を使うこと。
- (34) sigcatch %lu
- 捕捉された (caught)
シグナルのビットマップ。
10
進数で表示される。
このフィールドは廃止予定である。
リアルタイムシグナルに関する情報は表示されないからである。
代わりに /proc/[pid]/status
を使うこと。
- (35) wchan %lu
- This is the "channel" in which the process is
waiting. It is the address of a location in the kernel where the process
is sleeping. The corresponding symbolic name can be found in
/proc/[pid]/wchan.
- (36) nswap %lu
- スワップされたページ数
(メンテナンスされていない)。
- (37) cnswap %lu
- 子プロセスの
nswap の累計
(メンテナンスされていない)。
- (38) exit_signal %d (Linux 2.1.22
以降)
- プロセスが死んだときに親プロセスに送られるシグナル。
- (39) processor %d (Linux 2.2.8
以降)
- このプロセスを最後に実行した
CPU の番号。
- (40) rt_priority %u (Linux 2.5.19
以降)
- リアルタイムスケジューリングの優先度。
リアルタイムポリシーの元でスケジューリングされるプロセスでは
1 から 99
の範囲の値となり、
リアルタイム以外のスケジューリングポリシーのプロセスでは
0 となる ( sched_setscheduler(2)
参照)。
- (41) policy %u (Linux 2.5.19
以降)
- スケジューリングポリシー
( sched_setscheduler(2) 参照)。
値は、 linux/sched.h の SCHED_*
定数を使ってデコードすればよい。
このフィールドのフォーマットは
Linux 2.6.22 より前は %lu
であった。
- (42) delayacct_blkio_ticks %llu
(Linux 2.6.18 以降)
- (clock tick (100分の1秒)
単位での) ブロック I/O
の総遅延量。
- (43) guest_time %lu (Linux 2.6.24
以降)
- プロセスのゲスト時間
(ゲスト OS の仮想 CPU
を実行するのに消費された時間)。
clock tick
単位で計測される (
sysconf(_SC_CLK_TCK)
で割った値が表示される)。
- (44) cguest_time %ld (Linux 2.6.24
以降)
- プロセスの子プロセスのゲスト時間。
clock tick
単位で計測される (
sysconf(_SC_CLK_TCK)
で割った値が表示される)。
- (45) start_data %lu (Linux 3.3
以降)
- Address above which program initialized and uninitialized
(BSS) data are placed.
- (46) end_data %lu (Linux 3.3
以降)
- Address below which program initialized and uninitialized
(BSS) data are placed.
- (47) start_brk %lu (Linux 3.3
以降)
- Address above which program heap can be expanded with
brk(2).
- (48) arg_start %lu (Linux 3.5
以降)
- プログラムのコマンドライン引き数
( argv)
が置かれる開始アドレス。
- (49) arg_end %lu (Linux 3.5
以降)
- プログラムのコマンドライン引き数
( argv)
が置かれる終了アドレス。
- (50) env_start %lu (Linux 3.5
以降)
- プログラムの環境
(environment)
が置かれる開始アドレス。
- (51) env_end %lu (Linux 3.5
以降)
- プログラムの環境
(environment)
が置かれる終了アドレス。
- (52) exit_code %d (Linux 3.5
以降)
-
waitpid(2)
が報告する形式のスレッドの終了ステータス。
- /proc/[pid]/statm
- (ページ単位で計測した)
メモリー使用量についての情報を提供する。
各列は以下の通りである。
size プログラムサイズの総計
( /proc/[pid]/status の VmSize と同じ)
resident 実メモリー上に存在するページ
( /proc/[pid]/status の VmRSS と同じ)
share 共有ページ (ファイルと関連付けられているページ)
text テキスト (コード)
lib ライブラリ (Linux 2.6 では未使用)
data データ + スタック
dt ダーティページ (Linux 2.6 では未使用)
- /proc/[pid]/status
-
/proc/[pid]/stat と /proc/[pid]/statm
にある多くの情報を、人間が解析しやすい形式で提供する。
以下に例を示す。
$ cat /proc/$$/status
Name: bash
State: S (sleeping)
Tgid: 3515
Pid: 3515
PPid: 3452
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 100 100 100 100
FDSize: 256
Groups: 16 33 100
VmPeak: 9136 kB
VmSize: 7896 kB
VmLck: 0 kB
VmHWM: 7572 kB
VmRSS: 6316 kB
VmData: 5224 kB
VmStk: 88 kB
VmExe: 572 kB
VmLib: 1708 kB
VmPTE: 20 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/3067
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Seccomp: 0
Cpus_allowed: 00000001
Cpus_allowed_list: 0
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 150
nonvoluntary_ctxt_switches: 545
- フィールドの詳細は以下の通りである。
- *
-
Name:
このプロセスにより実行されたコマンド。
- *
-
State:
プロセスの現在の状態。
"R (running; 実行中)", "S (sleeping;
休眠状態)", "D (disk sleep;
ディスク待ちの休眠状態)",
"T (stopped; 停止状態)", "T
(tracing stop;
トレースによる停止)",
"Z (zombie; ゾンビ状態)", "X
(dead; 死亡)"
のいずれかである。
- *
-
Tgid:
スレッドグループ ID
(すなわち、プロセス
ID)。
- *
-
Pid: スレッド ID
(gettid(2) 参照)。
- *
-
PPid:
親プロセスの PID。
- *
-
TracerPid:
このプロセスをトレースしているプロセスの
PID
(トレースされていない場合は
0)。
- *
-
Uid, Gid: 実
UID/GID、実効 UID/GID、保存
set-UID/GID、ファイルシステム
UID/GID。
- *
-
FDSize:
現在割り当てられているファイルディスクリプターのスロット数。
- *
-
Groups:
補助グループのリスト。
- *
-
VmPeak:
仮想メモリーサイズのピーク値。
- *
-
VmSize:
仮想メモリーサイズ。
- *
-
VmLck:
ロックされているメモリーサイズ
( mlock(3) 参照)。
- *
-
VmHWM:
実メモリー上に存在するページサイズ
(resident set size) のピーク値 ("high
water mark")。
- *
-
VmRSS:
実メモリー上に存在するページサイズ。
- *
-
VmData, VmStk, VmExe:
データ、スタック、テキストセグメントのサイズ。
- *
-
VmLib:
共有ライブラリコードのサイズ。
- *
-
VmPTE:
ページテーブルエントリーのサイズ
(Linux 2.6.10 以降)。
- *
-
VmSwap:
スワップアウトされた仮想メモリーサイズ
(Linux 2.6.34 以降).
- *
-
Threads:
このスレッドが属するプロセスのスレッド数。
- *
-
SigQ:
このフィールドにはスラッシュで区切られた
2
つの数字が入っている。この数字はこのプロセスの実ユーザー
ID
宛にキューイングされたシグナルに関するものである。一つ目の数字は、この実ユーザー
ID
宛に現在キューイングされているシグナル数である。二つ目の数字は、このプロセス宛にキューイングされたシグナル数に関するリソース上限値である
( getrlimit(2) の RLIMIT_SIGPENDING
の説明を参照)。
- *
-
SigPnd, ShdPnd:
スレッド宛およびプロセス全体宛の処理待ちシグナルの数
( pthreads(7), signal(7) 参照)。
- *
-
SigBlk, SigIgn, SigCgt:
ブロックされるシグナル、無視されるシグナル、捕捉待ちのシグナルを
示すマスク値 (
signal(7))。
- *
-
CapInh, CapPrm, CapEff:
継承可能 (inheritable)、許可
(permitted)、実効 (effective)
の各ケーパビリティセットで有効になっているケーパビリティのマスク値
( capabilities(7) 参照)。
- *
-
CapBnd:
ケーパビリティバウンディングセット
(Linux 2.6.26 以降、 capabilities(7)
参照)。
- *
-
Seccomp: Seccomp mode of the process (since Linux
3.8, see seccomp(2)). 0 means SECCOMP_MODE_DISABLED; 1 means
SECCOMP_MODE_STRICT; 2 means SECCOMP_MODE_FILTER. This field
is provided only if the kernel was built with the CONFIG_SECCOMP
kernel configuration option enabled.
- *
-
Cpus_allowed:
このプロセスが実行を許可されている
CPU のマスク値 (Linux 2.6.24
以降、 cpuset(7) 参照)。
- *
-
Cpus_allowed_list:
前項と同じだが、「リスト形式」での表示
(Linux 2.6.26 以降、 cpuset(7)
参照)。
- *
-
Mems_allowed:
このプロセスが使用できるメモリーノードのマスク値
(Linux 2.6.24 以降、 cpuset(7)
参照)。
- *
-
Mems_allowed_list:
前項と同じだが、「リスト形式」での表示
(Linux 2.6.26 以降、 cpuset(7)
参照)。
- *
-
voluntary_ctxt_switches,
nonvoluntary_ctxt_switches:
自発的/非自発的なコンテキストスイッチの回数
(Linux 2.6.23 以降)。
-
/proc/[pid]/syscall (Linux 2.6.27
以降)
- This file exposes the system call number and argument
registers for the system call currently being executed by the process,
followed by the values of the stack pointer and program counter registers.
The values of all six argument registers are exposed, although most system
calls use fewer registers.
If the process is blocked, but not in a system call, then the file displays
-1 in place of the system call number, followed by just the values of the
stack pointer and program counter. If process is not blocked, then file
contains just the string "running".
カーネルの設定で
CONFIG_HAVE_ARCH_TRACEHOOK
が有効になっている場合にのみ、このファイルは存在する。
-
/proc/[pid]/task (Linux 2.6.0-test6
以降)
- このディレクトリには、そのプロセスのスレッド情報を含む
サブディレクトリが 1
スレッドにつき 1
つ置かれる。
各サブディレクトリの名前はスレッドのスレッド
ID ( [tid])
を示す数字である
(gettid (2) を参照)。
これらの各サブディレクトリには、
/proc/[pid]
ディレクトリ以下と同じ名前と内容のファイル群がある。
すべてのスレッドで共有される属性の場合、
task/[tid]
サブディレクトリ以下の各ファイルの内容は
親ディレクトリ
/proc/[pid]
の対応するファイルと同じになることだろう
(例えば、マルチスレッドプロセスではファイル
task/[tid]/cwd
はいずれも親ディレクトリ内の
/proc/[pid]/cwd
と同じ値を持つことになる。なぜなら、一つのプロセスに属すすべての
スレッドは作業ディレクトリを共有するからである)。
スレッド毎に独立な属性の場合、
task/[tid]
サブディレクトリ以下の各ファイルは異なる値を持つことがある
(例えば、ファイル
task/[tid]/status
はスレッド毎に異なる値を持つ可能性がある)。
マルチスレッドプロセスでは、メインスレッドがすでに終了している場合、
/proc/[pid]/task
ディレクトリの内容は参照できない
(スレッドの終了は通常
pthread_exit(3)
を呼び出しにより行われる)。
-
/proc/[pid]/uid_map, /proc/[pid]/gid_map
(Linux 3.5 以降)
- These files expose the mappings for user and group IDs
inside the user namespace for the process pid. The description here
explains the details for uid_map; gid_map is exactly the
same, but each instance of "user ID" is replaced by "group
ID".
The uid_map file exposes the mapping of user IDs from the user
namespace of the process pid to the user namespace of the process
that opened uid_map (but see a qualification to this point below).
In other words, processes that are in different user namespaces will
potentially see different values when reading from a particular
uid_map file, depending on the user ID mappings for the user
namespaces of the reading processes.
Each line in the file specifies a 1-to-1 mapping of a range of contiguous
between two user namespaces. The specification in each line takes the form
of three numbers delimited by white space. The first two numbers specify
the starting user ID in each user namespace. The third number specifies
the length of the mapped range. In detail, the fields are interpreted as
follows:
- (1)
- The start of the range of user IDs in the user namespace of
the process pid.
- (2)
- The start of the range of user IDs to which the user IDs
specified by field one map. How field two is interpreted depends on
whether the process that opened uid_map and the process pid
are in the same user namespace, as follows:
- a)
- If the two processes are in different user namespaces:
field two is the start of a range of user IDs in the user namespace of the
process that opened uid_map.
- b)
- If the two processes are in the same user namespace: field
two is the start of the range of user IDs in the parent user namespace of
the process pid. (The "parent user namespace" is the user
namespace of the process that created a user namespace via a call to
unshare(2) or clone(2) with the CLONE_NEWUSER flag.)
This case enables the opener of uid_map (the common case here is
opening /proc/self/uid_map) to see the mapping of user IDs into the
user namespace of the process that created this user namespace.
- (3)
- The length of the range of user IDs that is mapped between
the two user namespaces.
- After the creation of a new user namespace, the
uid_map file may be written to exactly once to specify the mapping
of user IDs in the new user namespace. (An attempt to write more than once
to the file fails with the error EPERM.)
- The lines written to uid_map must conform to the
following rules:
- *
- The three fields must be valid numbers, and the last field
must be greater than 0.
- *
- Lines are terminated by newline characters.
- *
- There is an (arbitrary) limit on the number of lines in the
file. As at Linux 3.8, the limit is five lines.
- *
- The range of user IDs specified in each line cannot overlap
with the ranges in any other lines. In the current implementation (Linux
3.8), this requirement is satisfied by a simplistic implementation that
imposes the further requirement that the values in both field 1 and field
2 of successive lines must be in ascending numerical order.
- Writes that violate the above rules fail with the error
EINVAL.
In order for a process to write to the /proc/[pid]/uid_map (
/proc/[pid]/gid_map) file, the following requirements must be
met:
- *
- The process must have the CAP_SETUID
(CAP_SETGID) capability in the user namespace of the process
pid.
- *
- The process must have the CAP_SETUID
(CAP_SETGID) capability in the parent user namespace.
- *
- The process must be in either the user namespace of the
process pid or inside the parent user namespace of the process
pid.
For further details, see
namespaces(7).
-
/proc/[pid]/wchan (Linux 2.6.0
以降)
- The symbolic name corresponding to the location in the
kernel where the process is sleeping.
- /proc/apm
- Advanced Power Management
のバージョンとバッテリ情報。
カーネルのコンパイル時に
CONFIG_APM
を定義したときに存在する。
- /proc/buddyinfo
- This file contains information which is used for diagnosing
memory fragmentation issues. Each line starts with the identification of
the node and the name of the zone which together identify a memory region
This is then followed by the count of available chunks of a certain order
in which these zones are split. The size in bytes of a certain order is
given by the formual:
(2^order) * PAGE_SIZE
The binary buddy allocator algorithm inside the kernel will split one chunk
into two chunks of a smaller order (thus with half the size) or combine
two contiguous chunks into one larger chunk of a higher order (thus with
double the size) to satisfy allocation requests and to counter memory
fragmentation. The order matches the column number, when starting to count
at zero.
For example on a x86_64 system:
Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404
Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
In this example, there is one node containing three zones and there are 11
different chunk sizes. If the page size is 4 kilobytes, then the first
zone called DMA (on x86 the first 16 megabyte of memory) has 1
chunk of 4 kilobytes (order 0) available and has 3 chunks of 4 megabytes
(order 10) available.
If the memory is heavily fragmented, the counters for higher order chunks
will be zero and allocation of large contiguous areas will fail.
Further information about the zones can be found in
/proc/zoneinfo.
- /proc/bus
- インストールされている各バス用にサブディレクトリがある。
- /proc/bus/pccard
- PCMCIA
デバイスの情報が書かれるサブディレクトリ。
カーネルのコンパイル時に
CONFIG_PCMCIA
を定義したときに存在する。
-
/proc/[pid]/timers (Linux 3.10
以降)
- このプロセスの
POSIX
タイマーのリスト。
各タイマーは文字列
"ID:"
で始まる行に表示される。
例:
ID: 1
signal: 60/00007fff86e452a8
notify: signal/pid.2634
ClockID: 0
ID: 0
signal: 60/00007fff86e452a8
notify: signal/pid.2634
ClockID: 1
各タイマーに表示される行の意味は次の通りである。
- ID
- このタイマーの
ID。 この ID は timer_create(2)
が返すタイマー ID
と同じではない。
siginfo_t 構造化の si_timerid
フィールドで参照できるカーネル内部での
ID と同じである ( sigaction(2)
参照)。
- signal
- このタイマーが通知の配送に使用するシグナル番号である。
スラッシュの後ろは、シグナルハンドラーに渡される
sigev_value.sival_ptr 値である。
シグナルで通知されるタイマーでのみ有効である。
- notify
- スラッシュの前の部分は、このタイマーが使用する通知の配送方法であり、「スレッド」「シグナル」「なし」のいずれかである。
スラッシュのすぐ後には、
SIGEV_THREAD_ID
通知を行うタイマーでは文字列の
"tid" が、
もしくは他の方法で通知するタイマーでは
"pid" が表示される。
"." の後ろは、
そのタイマーがシングルで通知を配送する場合にはシグナルの配送対象となるプロセスの
PID である。
- ClockID
- このフィールドはタイマーが時間を計測するのに使用するクロックを示す。
ほとんどのクロックでは、このフィールドは
<time.h>
で公開されるユーザー空間の
CLOCK_*
定数のいずれかの数字である。
CLOCK_PROCESS_CPUTIME_ID
タイマーでは、このフィールドに
-6 が表示される。
CLOCK_THREAD_CPUTIME_ID
タイマーでは -2
が表示される。
- /proc/bus/pccard/drivers
- /proc/bus/pci
- いくつかのサブディレクトリがあり、
PCI
バス・インストールされているデバイス・
デバイスドライバの情報が書かれた仮想ファイルがある。
これらのファイルのうちいくつかは
ASCII
フォーマットではない。
- /proc/bus/pci/devices
- PCI
デバイスの情報。
lspci(8) や setpci(8)
でアクセスすることができる。
- /proc/cmdline
- ブート時に Linux
カーネルに渡された引き数。
引き数の受け渡しは、たいてい
lilo(8) や grub(8)
といったブートマネージャを使って行われる。
-
/proc/config.gz (Linux 2.6 以降)
- このファイルでは、現在実行中のカーネルの構築時に使用された
設定オプションを参照できる。
書式は、 ( make xconfig, make
config などを使って)
カーネルの設定を変更した際に生成される
.config
ファイルのものと同じである。
ファイルの内容は圧縮されており、
zcat(1) や zgrep(1)
を使うと、表示や検索ができる。
ファイルが変更されていない限り、
/proc/config.gz
の内容は次のコマンドで得られる内容と同じである。
cat /lib/modules/$(uname -r)/build/.config
-
/proc/config.gz
が提供されるのは、カーネルの設定で
CONFIG_IKCONFIG_PROC
が有効になっている場合のみである。
- /proc/cpuinfo
- このファイルは、CPU
およびシステムアーキテクチャーに依存する項目を
集めたもので、リストの内容はサポートされているアーキテクチャー毎に異なる。
2
つだけ共通の項目がある。
processor
はプロセッサ番号で、
bogomips
はカーネルの初期化時に計算されるシステム定数である。
SMP マシンでは各 CPU
についての情報が書かれている。
lscpu(1)
コマンドはこのファイルから情報を収集する。
- /proc/devices
- メジャーデバイス番号とデバイスグループのテキスト形式のリスト。
MAKEDEV
スクリプトはこのファイルを使って、
カーネルとの整合性を保つことができる。
-
/proc/diskstats (Linux 2.5.69 以降)
- このファイルには各ディスクデバイスのディスク
I/O
統計情報が書かれている。
更に詳しい情報は、Linux
カーネルソースファイル
Documentation/iostats.txt
を参照すること。
- /proc/dma
- 登録されている
ISA DMA (direct memory access)
チャネルのリスト。
- /proc/driver
- 空のサブディレクトリ。
- /proc/execdomains
- 実行ドメインのリスト
(ABI
パーソナリティ)。
- /proc/fb
- カーネルのコンパイル時に
CONFIG_FB
が定義されている場合、フレームバッファーの情報が書かれる。
- /proc/filesystems
- カーネルが対応しているファイルシステムのテキスト形式のリスト。
カーネルに組み込まれてコンパイルされたファイルシステムと、
カーネルモジュールが現在ロードされているファイルシステムが列挙される
( filesystems(5) 参照)。
ファイルシステムに
"nodev"
という印が付いている場合、
そのファイルシステムがマウントするためのブロックデバイスを
必要としないことを意味する
(例えば、
仮想ファイルシステム、ネットワークファイルシステムなど)。
ちなみに、マウント時にファイルシステムが指定されず、
どうやってもファイルシステムの種類を判定できなかった際に、
このファイルを mount(8)
が使用するかもしれない。
その場合、このファイルに含まれるファイルシステムが試される
(ただし、"nodev"
の印がついたものは除く)。
- /proc/fs
- マウントされているファイルシステムに関する情報を提供するファイルが入ったサブディレクトリが入っている。
- /proc/ide
- このディレクトリは
IDE
バスをもつシステムに存在する。
各 IDE
チャネルとそれに取り付けられている各デバイスごとにディレクトリがあり、
以下のファイルが含まれている。
cache バッファーサイズ (KB)
capacity セクタ数
driver ドライバのバージョン
geometry 物理ジオメトリと論理ジオメトリ
identify 16 進数表記
media メディアのタイプ
model 製造者のモデル番号
settings ドライブの設定
smart_thresholds 16 進数表記
smart_values 16 進数表記
hdparm(8)
ユーティリティは、分かりやすい形式で
この情報にアクセスするための手段を提供する。
- /proc/interrupts
- IO デバイス毎の CPU
別の割り込み回数の記録に使われる。
Linux 2.6.24
以降、少なくとも i386
と x86_64
アーキテクチャーでは、
(デバイスと関連がない)
システム内部の割り込みについても記録される。
システム内部の割り込みには、NMI
(nonmaskable interrupt), LOC (local timer interrupt) や、SMP
システムでは TLB (TLB flush
interrupt), RES (rescheduling interrupt), CAL (remote function call
interrupt) などがある。
簡単に読むことのできるフォーマットで、ASCII
で表記されている。
- /proc/iomem
- Linux 2.4 における I/O
メモリーマップ。
- /proc/ioports
- 現在登録され使われている
I/O
ポート領域のリスト。
-
/proc/kallsyms (Linux 2.5.71 以降)
- カーネルの外部シンボル定義を保持する。
modules(X)
関係のツールがローダーブルモジュールを動的にリンクしたり
バインド (bind)
するのに使われる。
Linux 2.5.47
以前では、微妙に異なる書式の似たようなファイルが
ksyms
という名前であった。
- /proc/kcore
- このファイルはシステムの物理メモリーを表現しており、
ELF コアファイル形式 (core
file format)
で保持されている。
この擬似ファイルと
strip
されていないカーネルのバイナリ
( /usr/src/linux/vmlinux) [訳注:
パッケージに依存する])
があれば、 GDB
はカーネル内の任意のデータ構造の現在の状態を調べられる。
このファイルの大きさは物理メモリー
(RAM) のサイズに 4KB
を加えた値である。
- /proc/kmsg
- このファイルは
syslog(2)
システムコールでカーネルメッセージを読み出す代りに使える。
プロセスがこのファイルを読むためにはスーパーユーザー権限が必要であり、
ファイルを読み出すのは
1
つのプロセスのみに限るべきである。
カーネルメッセージを記録するために、
syslog(2)
システムコールの機能を使う
syslog
プロセスが稼働している場合、
このファイルを読み出すべきではない。
このファイルの中の情報は
dmesg(1)
によって表示される。
-
/proc/kpagecount (Linux 2.6.25
以降)
- このファイルには、
各物理ページフレームがマッピングされた回数が
64
ビットカウンターとして入っている。
インデックスはページフレーム番号である
( /proc/[pid]/pagemap
の議論を参照)。
-
/proc/kpagecount
ファイルが存在するのは、カーネルのコンフィギュレーションオプション
CONFIG_PROC_PAGE_MONITOR
を有効にした場合だけである。
-
/proc/kpageflags (Linux 2.6.25
以降)
- このファイルには、
各物理ページフレームに対応する
64
ビットマスクが入っている。
インデックスはページフレーム番号である
( /proc/[pid]/pagemap
の議論を参照)。
各ビットは以下のとおりである。
0 - KPF_LOCKED
1 - KPF_ERROR
2 - KPF_REFERENCED
3 - KPF_UPTODATE
4 - KPF_DIRTY
5 - KPF_LRU
6 - KPF_ACTIVE
7 - KPF_SLAB
8 - KPF_WRITEBACK
9 - KPF_RECLAIM
10 - KPF_BUDDY
11 - KPF_MMAP (Linux 2.6.31 以降)
12 - KPF_ANON (Linux 2.6.31 以降)
13 - KPF_SWAPCACHE (Linux 2.6.31 以降)
14 - KPF_SWAPBACKED (Linux 2.6.31 以降)
15 - KPF_COMPOUND_HEAD (Linux 2.6.31 以降)
16 - KPF_COMPOUND_TAIL (Linux 2.6.31 以降)
16 - KPF_HUGE (Linux 2.6.31 以降)
18 - KPF_UNEVICTABLE (Linux 2.6.31 以降)
19 - KPF_HWPOISON (Linux 2.6.31 以降)
20 - KPF_NOPAGE (Linux 2.6.31 以降)
21 - KPF_KSM (Linux 2.6.32 以降)
22 - KPF_THP (Linux 3.4 以降)
これらのビットの意味の詳しい説明は、
カーネルのソースファイル
Documentation/vm/pagemap.txt を参照。
カーネル 2.6.29
より前では、 KPF_WRITEBACK,
KPF_RECLAIM, KPF_BUDDY, KPF_LOCKED
は正しい値を返さなかった。
-
/proc/kpageflags
ファイルが存在するのは、カーネルのコンフィギュレーションオプション
CONFIG_PROC_PAGE_MONITOR
を有効にした場合だけである。
-
/proc/ksyms (Linux 1.1.23-2.5.47)
-
/proc/kallsyms を参照。
- /proc/loadavg
- このファイルの最初の
3
つのフィールドはロードアベレージの数値で、
1, 5, 15 分
あたりの実行キュー内
(state R) または ディスク I/O
待ち (state D) のジョブ数
を与える。 これは
uptime(1)
などのプログラムによって得られる値と同じである。
4
番目のフィールドはスラッシュ
(/) で区切られた 2
つの数値から構成される。
この数値のうち最初のものは、現在実行可能なカーネルスケジュールエンティティ
(プロセス、スレッド)
の数である。スラッシュの後の数値は、現在システム上に
存在するカーネルスケジュールエンティティの数である。
5 番目のフィールドは
システム上に最も最近生成されたプロセスの
PID である。
- /proc/locks
- このファイルは現在のファイルロック
( flock(2) と fcntl(2))
とリース ( fcntl(2))
を表示する。
-
/proc/malloc (Linux 2.2
以前のみ)
- コンパイルのときに
CONFIGDEBUGMALLOC
が定義されているときのみ、このファイルは存在する。
- /proc/meminfo
- このファイルはシステムのメモリー使用状況の統計情報を表示する。
free(1)
はこのファイルを使って、
そのシステムの
(物理メモリーとスワップの両方の)
未使用と使用中のメモリー量と、
カーネルが使用している共有メモリーとバッファーの使用量を表示する。
このファイルの各行は、パラメーター名の後に、
コロン、
パラメーター値が続く。
最後に ("kB" などの)
計測単位がある場合もある。
以下のリストでは、
フィールド名と、フィールド値を読み込むのに必要なフォーマット指定子
(format specifier)
について説明する。
特に注記がある場合を除くと、すべてのフィールドが少なくとも
Linux 2.6.0
以降では存在する。
いくつかのフィールドは、カーネルでオプションが有効になっている場合にのみ表示される。
こうした依存関係についてはリスト内に注記がある。
-
MemTotal %lu
- 使用可能な RAM
の総量 (つまり、
物理 RAM
サイズからいくつかの予約ビットとカーネルのバイナリコードの分を引いた値)。
-
MemFree %lu
-
LowFree+HighFree
の合計値。
-
Buffers %lu
- Relatively temporary storage for raw disk blocks that
shouldn't get tremendously large (20MB or so).
-
Cached %lu
- ディスクから読み出したファイルのインメモリーキャッシュ
(ページキャッシュ)。
SwapCached
は含まれない。
-
SwapCached %lu
- 一度スワップアウトされ、その後スワップインされたが、まだスワップファイルにも存在するメモリー。
(メモリーが残り少ない場合、
これらのページは、すでにスワップファイルに存在するので、もう一度スワップアウトする必要がない。
これにより I/O
が節約できる。)
-
Active %lu
- 最近使用されたメモリーで、通常は本当に必要にならない限り回収されないメモリー。
-
Inactive %lu
- 最近あまり使用されていないメモリー。
他の使用するために優先して回収すべきメモリー。
-
Active(anon) %lu (Linux 2.6.28
以降)
- [後で記載する]
-
Inactive(anon) %lu (Linux 2.6.28
以降)
- [後で記載する]
-
Active(file) %lu (Linux 2.6.28
以降)
- [後で記載する]
-
Inactive(file) %lu (Linux 2.6.28
以降)
- [後で記載する]
-
Unevictable %lu (Linux 2.6.28 以降)
- (Linux 2.6.28 から 2.6.30
まででは CONFIG_UNEVICTABLE_LRU
が必要であった。)
[後で記載する]
-
Mlocked %lu (Linux 2.6.28 以降)
- (Linux 2.6.28 から 2.6.30
まででは CONFIG_UNEVICTABLE_LRU
が必要であった。)
[後で記載する]
-
HighTotal %lu
- (Linux 2.6.19 以降では
CONFIG_HIGHMEM が必要) highmem
の総量。 highmem
は物理メモリーの 860MB
付近よりも上の部分のメモリー領域全体のことである。
highmem
領域はユーザー空間プログラムとページキャッシュで使用される。
カーネルはこのメモリーにアクセスするのに小技を使っており、
lowmem
よりもアクセスが遅くなる。
-
HighFree %lu
- (Linux 2.6.19 以降では
CONFIG_HIGHMEM が必要)
未使用の highmem 量。
-
LowTotal %lu
- (Starting with Linux 2.6.19, CONFIG_HIGHMEM is
required.) Total amount of lowmem. Lowmem is memory which can be used for
everything that highmem can be used for, but it is also available for the
kernel's use for its own data structures. Among many other things, it is
where everything from Slab is allocated. Bad things happen when
you're out of lowmem.
-
LowFree %lu
- (Linux 2.6.19 以降では
CONFIG_HIGHMEM が必要)
未使用の lowmem 量。
-
MmapCopy %lu (Linux 2.6.29 以降)
- (CONFIG_MMU が必要)
[後で記載する]
-
SwapTotal %lu
- 利用可能なスワップ空間の総量。
-
SwapFree %lu
- 現在未使用のスワップ空間の量。
-
Dirty %lu
- ディスクに書き戻されるのを待っているメモリー。
-
Writeback %lu
- 現在ディスクに書き戻し中のメモリー。
-
AnonPages %lu (Linux 2.6.18 以降)
- ユーザー空間ページテーブルにマッピングされているファイルと関連付けられていないページ。
-
Mapped %lu
- (mmap(2) で)
メモリーにマッピングされているファイル。
ライブラリなど。
-
Shmem %lu (Linux 2.6.32 以降)
- [後で記載する]
-
Slab %lu
- カーネル内のデータ構造体のキャッシュ。
-
SReclaimable %lu (Linux 2.6.19
以降)
- 回収可能な
Slab。
キャッシュなど。
-
SUnreclaim %lu (Linux 2.6.19 以降)
- メモリー消費が激しい際でも回収できない
Slab。
-
KernelStack %lu (Linux 2.6.32 以降)
- カーネルスタックに割り宛てられているメモリー量。
-
PageTables %lu (Linux 2.6.18 以降)
- Amount of memory dedicated to the lowest level of page
tables.
-
Quicklists %lu (Linux 2.6.27 以降)
- (CONFIG_QUICKLIST が必要)
[後で記載する]
-
NFS_Unstable %lu (Linux 2.6.18
以降)
- サーバに送信されたが、まだ永続的なストレージには書き込まれていない
NFS ページ。
-
Bounce %lu (Linux 2.6.18 以降)
- Memory used for block device "bounce
buffers".
-
WritebackTmp %lu (Linux 2.6.26
以降)
- FUSE
で一時的なライトバックバッファーに使われているメモリー。
-
CommitLimit %lu (Linux 2.6.10 以降)
- This is the total amount of memory currently available to
be allocated on the system, expressed in kilobytes. This limit is adhered
to only if strict overcommit accounting is enabled (mode 2 in
/proc/sys/vm/overcommit_memory). The limit is calculated according
to the formula described under /proc/sys/vm/overcommit_memory. For
further details, see the kernel source file
Documentation/vm/overcommit-accounting.
-
Committed_AS %lu
- The amount of memory presently allocated on the system. The
committed memory is a sum of all of the memory which has been allocated by
processes, even if it has not been "used" by them as of yet. A
process which allocates 1GB of memory (using malloc(3) or similar),
but touches only 300MB of that memory will show up as using only 300MB of
memory even if it has the address space allocated for the entire 1GB.
This 1GB is memory which has been "committed" to by the VM and can
be used at any time by the allocating application. With strict overcommit
enabled on the system (mode 2 in IR /proc/sys/vm/overcommit_memory ),
allocations which would exceed the CommitLimit will not be
permitted. This is useful if one needs to guarantee that processes will
not fail due to lack of memory once that memory has been successfully
allocated.
-
VmallocTotal %lu
- vmalloc
メモリー領域の総量。
-
VmallocUsed %lu
- 使用中の vmalloc
領域の量。
-
VmallocChunk %lu
- vmalloc
領域の未使用の連続するブロックの最大サイズ。
-
HardwareCorrupted %lu (Linux 2.6.32
以降)
- (CONFIG_MEMORY_FAILURE が必要)
[後で記載する]
-
AnonHugePages %lu (Linux 2.6.38
以降)
- (CONFIG_TRANSPARENT_HUGEPAGE
が必要)
ユーザー空間ページテーブルにマッピングされているファイルと関連付けられていないヒュージページ。
-
HugePages_Total %lu
- (CONFIG_HUGETLB_PAGE が必要)
ヒュージページのプールサイズ。
-
HugePages_Free %lu
- (CONFIG_HUGETLB_PAGE が必要)
プール内の割り当てられていないヒュージページ数。
-
HugePages_Rsvd %lu (Linux 2.6.17
以降)
- (CONFIG_HUGETLB_PAGE が必要)
プールから割り当てが宣言されたが、まだ割り当てが行われていないヒュージページ数。
これらの予約ヒュージページにより、
アプリケーションがメモリーフォールト時にヒュージページのプールからヒュージページが割り当てられることが保証される。
-
HugePages_Surp %lu (Linux 2.6.24
以降)
- (CONFIG_HUGETLB_PAGE is required.) This is the
number of huge pages in the pool above the value in
/proc/sys/vm/nr_hugepages. The maximum number of surplus huge pages
is controlled by /proc/sys/vm/nr_overcommit_hugepages.
-
Hugepagesize %lu
- (CONFIG_HUGETLB_PAGE が必要)
ヒュージページのサイズ。
- /proc/modules
- 現在システムにロードされているモジュールのテキスト形式のリスト。
lsmod(8) も参照。
- /proc/mounts
- カーネル 2.4.19
より前では、このファイルは現在システムにマウントされている
全てのファイルシステムのリストであった。
Linux 2.4.19
でプロセス単位のマウント名前空間が導入されたことに伴い、
このファイルは
/proc/self/mounts
へのリンクとなった。
/proc/self/mounts
はそのプロセス自身のマウント名前空間のマウントポイントのリストである。
このファイルのフォーマットは
fstab(5)
に記述されている。
- /proc/mtrr
- Memory Type Range Registers。
詳細は、Linux
カーネルソースファイル
Documentation/mtrr.txt
を参照すること。
- /proc/net
- さまざまなネットワークについての擬似ファイルで、
それぞれがネットワーク層の各種の状態を与える。
これらのファイルの内容は
ASCII 形式なので、 cat(1)
で読み出せる。
とはいえ基本コマンドの
netstat(8)
はこれらのファイルの内容のよりすっきりとした表示を提供する。
- /proc/net/arp
- アドレス解決に使われるカーネルの
ARP テーブルの ASCII
可読なダンプを保持している。
動的結合されたものと固定
(preprogrammed) の両方の APP
エントリーを見ることができる。フォーマットは以下のとおり:
IP address HW type Flags HW address Mask Device
192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0
192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
ここで IP address はマシンの
IPv4 アドレス、 HW type
はそのアドレスの
RFC 826
で定められているハードウェアの形式、
Flags は ARP 構造体 (
/usr/include/linux/if_arp.h
内で定義されている)
の内部フラグ、 HW address
はその IP
アドレスにマップされているデータリンク層のアドレス
(もしわかっていれば)
である。
- /proc/net/dev
- 擬似ファイル dev
はネットワークデバイスの状態情報を含んでいる。
これは送受信したパケット数、エラーとコリジョン
(collision) の回数、
その他の基本的な統計を与える。
これらは ifconfig(8)
がデバイスの状態を報告するのに使われる。
フォーマットは以下のとおり:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
- /proc/net/dev_mcast
-
/usr/src/linux/net/core/dev_mcast.c
で定義されており、以下の形式である。
indx interface_name dmi_u dmi_g dmi_address
2 eth0 1 0 01005e000001
3 eth1 1 0 01005e000001
4 eth2 1 0 01005e000001
- /proc/net/igmp
- Internet Group Management Protocol
(インターネットグループ管理プロトコル)。
/usr/src/linux/net/core/igmp.c
で定義されている。
- /proc/net/rarp
- このファイルは
arp
と同じフォーマットで
逆アドレス解決サービス
(reverse address lookup services) rarp(8)
に提供するために使われる現在の逆マップデータベースの内容を含んでいる。
RARP
がカーネルコンフィグレーションに設定されていなければ、
このファイルは存在しない。
- /proc/net/raw
- RAW
ソケットテーブルのダンプを保持している。
ほとんどの情報はデバッグ以外では
使われない。 "sl"
の値はソケットのカーネルハッシュスロット、
"local_address"
はローカルアドレスとプロトコル番号のペア
[訳者追加: "rem_address"
はリモートアドレスとプロトコル番号のペア]。
"st"
はソケットの内部状態。
"tx_queue" と "rx_queue"
はカーネルメモリーを
消費している
送信/受信データキューのサイズ。
"tr" と "tm->when" と
"rexmits" フィールドは RAW
では使われていない。
"uid"
フィールドはソケット生成者の実効
UID を保持している。
- /proc/net/snmp
- このファイルは
SNMP
エージェントが必要とする
IP, ICMP, TCP, UDP 管理情報を ASCII
データとして保持している。
- /proc/net/tcp
- TCP
ソケットテーブルのダンプを保持している。
大部分の情報はデバッグ以外には使われない。
sl
はソケットのカーネルハッシュスロットの値、
"local_address"
はローカルアドレスとポート番号のペアである。
(ソケットが接続している場合は)
"rem_address"
はリモートアドレスとポート番号の対である。
"st"
はソケットの内部状態である。
"tx_queue" と "rx_queue"
はカーネルメモリーを消費している送信/受信データキューのサイズ。
"tr" と "tm->when" と
"rexmits"
フィールドはソケット状態のカーネル
内部情報を保持しているが、
これらが役に立つのはデバッグのときだけである。
"uid"
フィールドはソケット生成者の実効
UID を保持している。
- /proc/net/udp
- UDP
ソケットテーブルのダンプを保持している。
大部分の情報はデバッグ以外には
使われない。 sl
はソケットのカーネルハッシュスロットの値、
"local_address"
はローカルアドレスとポート番号のペアである。
(ソケットが接続している場合は)
"rem_address"
はリモートアドレスとポート番号のペアである。
"st" はソケットの
内部状態である。
"tx_queue" と "rx_queue"
はカーネルメモリーを消費している
送信/受信データキューのサイズ。
"tr" と "tm->when" と
"rexmits" フィールドは UDP
では使われていない。
"uid"
フィールドはソケット生成者の
実効 UID
を保持している。
フォーマットは以下のとおり:
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid
1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
- /proc/net/unix
- UNIX
ドメインソケットのリスト。
フォーマットは以下のとおり:
Num RefCount Protocol Flags Type St Path
0: 00000002 00000000 00000000 0001 03
1: 00000001 00000000 00010000 0001 01 /dev/printer
ここで、Num
はカーネルのテーブルスロット数、
RefCount
はソケットを使用して
いるユーザー数、 Protocol
はいまのところいつも
0 で、Flags
はソケットの状態
を保持している
カーネル内部のフラグである。
Type
はいまのところいつも
1 (UNIX
ドメインのデータグラムソケットは、現在のカーネルではサポートされていない
[訳注: 2.0.34
ではサポートされているようだ])。
St
はソケットの内部状態で、Path
は(もしあれば)
ソケットのパス名である。
- /proc/net/netfilter/nfnetlink_queue
- このファイルは
netfilter
ユーザー空間キューイングが使用されている場合
netfilter
ユーザー空間キューイングの情報を表示する。
各行が各キューの情報を表示する。
ユーザー空間で購読されていないキューは表示されない。
1 4207 0 2 65535 0 0 0 1
(1) (2) (3)(4) (5) (6) (7) (8)
- 各行のフィールドは以下の通りである。
- (1)
- キューの ID。
これは iptables(8) NFQUEUE
ターゲットの --queue-num
や --queue-balance
オプションで指定された値と一致する。
詳しい情報は
iptables-extensions(8) を参照。
- (2)
- キューを購読している
netlink ポート ID。
- (3)
- 現在キューに入っていてアプリケーションが処理するのを待っているパケット数。
- (4)
- キューのコピーモード。
値は 1
(メタデータのみ) か 2
(ペイロードデータもユーザー空間にコピーする)
のいずれかである。
- (5)
- コピーする範囲。
つまり、
最大で何バイトのパケットペイロードをユーザー空間にコピーする必要があるかを示す。
- (6)
- キューでの破棄数。
すでに多数のパケットがユーザー空間が必ず必要な受け入れ/破棄の判定を送り返すのを待っていたため、
カーネルがドロップする必要があったパケット数。
- (7)
- キューのユーザーでのドロップ数。
netlink
サブシステム内で破棄されたパケット数。
このようなパケットの破棄が通常起こるのは、
対応するソケットバッファーが一杯の場合、
つまり、
ユーザー空間がメッセージを十分な速度で読み出せない場合である。
- (8)
- シーケンス番号。
キューに入ったすべてのパケットには
32
ビットの単調増加のシーケンス番号が関連付けられる。
これは一番最近キューに入ったパケットの
ID となる。
- 最後の数字は互換性のためだけに存在し、
常に 1 である。
- /proc/partitions
- 各パーティションのメジャー番号とマイナー番号が書かれている。
さらに、 1024
バイトブロック数とパーティション名も書かれている。
- /proc/pci
- カーネルの初期化時に見つかったすべての
PCI
デバイスのリストと
その設定。
このファイルは非推奨であり、新しい
PCI 用の /proc
インターフェイス (
/proc/bus/pci) を使うこと。
このファイルは Linux 2.2
でオプションになった
(カーネルのコンパイル時に
CONFIG_PCI_OLD_PROC
をセットすると利用可能であった)。
Linux 2.4
で再びオプションなしで有効に戻った。
さらに、Linux 2.6
で非推奨となり (
CONFIG_PCI_LEGACY_PROC
をセットするとまだ利用可能であった)、
最終的に Linux 2.6.17
以降で完全に削除された。
-
/proc/profile (Linux 2.4 以降)
- このファイルは、
カーネルが profile=1
コマンドラインオプションで起動された場合にのみ存在する。
このファイルは、
カーネルのプロファイリング情報を
readprofile(1)
を使って読み込めるバイナリ形式で公開する。
このファイルに
(例えば、空の文字列を)
書き込むと、プロファイリングカウンターがリセットされる。
いくつかのアーキテクチャーでは、
サイズ sizeof(int)
のバイナリ整数である「プロファイリング倍率」を書き込むとプロファイリングの割り込み頻度を設定できる。
- /proc/scsi
-
scsi
中間レベル擬似ファイルといくつかの
SCSI
低レベルドライバの
ディレクトリを含むディレクトリ。
これらのファイルは
ASCII
で表現されているので
cat(1) で読める。
いくつかのファイルは書き込み可能で、サブシステムの設定を変更したり、
特定の機能をオン/オフすることができる。
- /proc/scsi/scsi
- カーネルが知っているすべての
SCSI
デバイスのリスト。
このリストは起動時に
(コンソールで)
見られるものとほぼ同じである。
scsi は現在のところ
add-single-device
コマンドのみをサポートしている。
これによりルート (root)
は既知のデバイスリストへ活線挿抜
(hotplugged)
デバイスを加えることができる。
次のコマンドを実行すると、
echo 'scsi add-single-device 1 0 5 0' > /proc/scsi/scsi
ホストアダプター scsi1
は SCSI チャネル 0 で ID 5 LUN 0
のデバイスを探す。
もしこのアドレスに既知のデバイスがあるか、
不正なアドレスであったならばエラーが返る。
- /proc/scsi/[drivername]
- いまのところ
[drivername] は NCR53c7xx, aha152x, aha1542, aha1740,
aic7xxx, buslogic, eata_dma, eata_pio, fdomain, in2000, pas16, qlogic,
scsi_debug, seagate, t128, u15-24f, ultrastore, wd7000
のどれかである。
少なくとも 1 つの SCSI
ホストバスアダプター
(HBA) に
ドライバが割り当てられていると、そのドライバに対応したディレクトリが現れる。
それぞれのディレクトリには、
登録されたホストアダプターに対応してファイルが作られる。
このファイルの名前は、システムの初期化の際に
ホストアダプターに割り当てられた番号になる。
これらのファイルを読めばドライバとホストアダプターの設定や
統計などを見ることができる。
これらのファイルへの書き込みはホストアダプターごとに異なる動作を引き起こす。
たとえば latency と nolatency
コマンドを用いると、
ルート
(root、スーパーユーザー)
は eata_dma
ドライバの隠し測定コードの
オン/オフを切り替えることができる。
また lockup と unlock
コマンドを用いると、ルートは
scsi_debug
ドライバがシミュレートするバスロックアップ
(bus lockup) を
制御することができる。
- /proc/self
- このディレクトリはプロセスに
(プロセス自身の) /proc
ファイルシステムへのアクセスを参照させる。
これは /proc 内の
(このプロセスの)
プロセス ID
が名前となっている
ディレクトリと全く同一である。
- /proc/slabinfo
- Linux 2.6.16 以降では、
カーネル設定オプション
CONFIG_SLAB
が有効の場合にのみ、このファイルは存在する。
カーネルキャッシュの情報。
/proc/slabinfo
のフィールドは以下のとおり。
cache-name
num-active-objs
total-objs
object-size
num-active-slabs
total-slabs
num-pages-per-slab
詳細は slabinfo(5)
を参照すること。
- /proc/stat
- カーネル/システムの統計。
アーキテクチャーによって異なる。
共通エントリーには以下のものが含まれる。
- cpu 3357 0 4313 1362393
- 各種状態で消費された時間の合計値。
時間は USER_HZ
を単位として計測される
(ほとんどのアーキテクチャーでは
USER_HZ は 1/100 秒で、
正しい値は sysconf(_SC_CLK_TCK)
を使って取得できる)。
- user
- (1)
ユーザーモードで消費した時間。
- nice
- (2) 低い優先度 (nice)
のユーザーモードで消費した時間。
- system
- (3)
システムモードで消費した時間。
- idle
- (4) タスク待ち (idle task)
で消費した時間。
この値は擬似ファイル
/proc/uptime の 2
番目のエントリーの値を
USER_HZ
倍した値になるはずである。
-
iowait (Linux 2.5.41 以降)
- (5) I/O
の完了待ちの時間。
-
irq (Linux 2.6.0-test4 以降)
- (6)
割り込みの処理に使った時間。
-
softirq (Linux 2.6.0-test4 以降)
- (7)
ソフト割り込みの処理に使った時間。
-
steal (Linux 2.6.11 以降)
- (8) 盗まれた時間
(stolen
time)。仮想化環境での動作時に他のオペレーティングシステムにより消費された時間である。
-
guest (Linux 2.6.24 以降)
- (9) Linux
カーネルの制御下のゲストオペレーティングシステムの仮想
CPU の
実行に消費された時間。
-
guest_nice (Linux 2.6.33 以降)
- (10) nice
が適用されたゲスト
(Linux
カーネルの制御下のゲストオペレーティングシステムの仮想
CPU) の
実行に消費された時間。
- page 5741 1808
- システムが
(ディスクから)
ページイン/ページアウトしたページ数。
- swap 1 0
- スワップイン/スワップアウトされたページ数。
- intr 1462898
- この行はシステム起動時以降に処理された割り込みの回数を示す。
最初の欄は処理された割り込み全ての合計であり、
これには番号が割り振られていないアーキテクチャー固有の割り込みも含まれる。
それ以降の欄はそれぞれ番号が割り振られた割り込みについての合計である。
番号が割り振られていない割り込みは表示されず、
全体の合計にのみ加算される。
-
disk_io: (2,0):(31,30,5764,1,2) (3,0):...
- (メジャー番号,
ディスクインデックス番号):(情報なし
(noinfo), 読み込み回数,
読み込みブロック数,
書き出し回数,
書き出しブロック数)
(Linux 2.4 のみ)
- ctxt 115315
- コンテクストスイッチの延べ回数。
- btime 769041601
- 起動時刻、紀元
(Epoch; 1970-01-01 00:00:00 +0000 (UTC))
からの秒数。
- processes 86031
- システム起動時からの延べフォーク
(fork) 数。
- procs_running 6
- 実行中状態のプロセス数
(Linux 2.5.45 以降)。
- procs_blocked 2
- I/O
完了待ちで停止 (blocked)
しているプロセス数
(Linux 2.5.45 以降)。
- /proc/swaps
- 使用中のスワップ領域。
swapon(8)
も参照すること。
- /proc/sys
- このディレクトリ
(1.3.57 以降に存在)
はカーネル変数に対応するいくつかの
ファイルとサブディレクトリを含む。
これらの変数は読み出し可能である。
また場合によっては
/proc
ファイルシステムや、
(非推奨の)
システムコール sysctl(2)
を用いて書き換えることもできる。
-
/proc/sys/abi (Linux 2.4.10 以降)
- このディレクトリにはアプリケーションのバイナリ情報が入ったファイルが置かれる。
更に詳しい情報は、
Linux
カーネルソースファイル
Documentation/sysctl/abi.txt
を参照すること。
- /proc/sys/debug
- このディレクトリは空の場合もある。
- /proc/sys/dev
- このディレクトリにはデバイス特有の情報
(たとえば dev/cdrom/info)
が含まれる。
このディレクトリが空になっているシステムもある。
- /proc/sys/fs
- このディレクトリには、ファイルシステムに関連するカーネル変数用の
ディレクトリとサブディレクトリが含まれる。
- /proc/sys/fs/binfmt_misc
- このディレクトリ以下のファイルについてのドキュメントは、
Linux カーネルソースの
Documentation/binfmt_misc.txt にある。
-
/proc/sys/fs/dentry-state (Linux 2.2
以降)
- このファイルには、ディレクトリキャッシュ
(dcache)
の状態に関する情報が
入っている。ファイルには、
nr_dentry, nr_unused, age_limit
(秒単位の age), want_pages
(システムがリクエストしたページ数),
ダミーの 2 つの値、
という 6
つの数字が書かれている。
- *
-
nr_dentry
は割り当てられた dentry
(dcache エントリー)
の数である。
このフィールドは Linux 2.2
では使用されない。
- *
-
nr_unused は未使用の
dentry 数である。
- *
-
age_limit
は、メモリーが不足している場合に次に
dcache entry
を再要求できるように
なるまでの残り時間
(秒数) である。
- *
-
want_pages
は、カーネルが
shrink_dcache_pages()
を呼び出したが dcache
がまだ縮小されていない場合に、0
以外の値となる。
- /proc/sys/fs/dir-notify-enable
- このファイルは
fcntl(2)
に記述されている
dnotify
インターフェースをシステム全体で無効にしたり有効にしたりする。
このファイルに値 0
が書かれている場合はインターフェースが無効になり、
値 1
の場合は有効になる。
- /proc/sys/fs/dquot-max
- このファイルにはキャッシュされるディスク
quota
エントリーの最大数が書かれている。
(2.4 系の)
システムの中には、このファイルが存在しないものもある。
キャッシュされるディスク
quota
エントリーの空きが非常に少なく、
とても多くのシステムユーザーが同時に存在する場合、
この制限を上げるといいかもしれない。
- /proc/sys/fs/dquot-nr
- このファイルには割り当てられているディスク
quota
のエントリー数と、
空いているディスク
quota
のエントリー数が書かれている。
-
/proc/sys/fs/epoll (Linux 2.6.28
以降)
- このディレクトリには、ファイル
max_user_watches がある。
これらは、 epoll
インターフェースが消費するカーネルメモリー量を制限するのに使用できる。
詳細は epoll(7)
を参照。
- /proc/sys/fs/file-max
- このファイルは、
システム全体でプロセスがオープンできるファイル数の上限を定義する
( setrlimit(2) も参照; setrlimit(2)
を使うと、
オープンできるファイル数のプロセス毎の上限
RLIMIT_NOFILE
を設定できる)。
ファイルハンドルを使い果たしたというエラーメッセージ
("VFS: file-max limit <number> reached"
を探すとよい)
がカーネルログに大量に出る場合は、以下のようにこの値を増加させてみるとよい。
echo 100000 > /proc/sys/fs/file-max
特権プロセス ( CAP_SYS_ADMIN)
は file-max
上限を上書きできる。
- /proc/sys/fs/file-nr
- This (read-only) file contains three numbers: the number of
allocated file handles (i.e., the number of files presently opened); the
number of free file handles; and the maximum number of file handles (i.e.,
the same value as /proc/sys/fs/file-max). If the number of
allocated file handles is close to the maximum, you should consider
increasing the maximum. Before Linux 2.6, the kernel allocated file
handles dynamically, but it didn't free them again. Instead the free file
handles were kept in a list for reallocation; the "free file
handles" value indicates the size of that list. A large number of
free file handles indicates that there was a past peak in the usage of
open file handles. Since Linux 2.6, the kernel does deallocate freed file
handles, and the "free file handles" value is always zero.
-
/proc/sys/fs/inode-max (Linux 2.2
までにのみ存在)
- このファイルには、メモリー内
inode
の最大値が書かれている。
この値は file-max の値の
3-4
倍にすべきである。
これは stdin, stdout,
ネットワークソケットを扱うにも
inode
が必要なためである。
日常的に inode
を使い果たしている場合は、この値を増やす必要がある。
Linux 2.4 以降では、 inode
数の静的な上限はなくなり、
このファイルは削除された。
- /proc/sys/fs/inode-nr
- このファイルには、
inode-state の最初の 2
つの値が書かれている。
- /proc/sys/fs/inode-state
- このファイルには
7
つの数字が入っている。
nr_inodes, nr_free_inodes, preshrink と 4
つのダミーの値 (常に
0) である。
nr_inodes
はシステムが割り当て済みの
inode 数である。 nr_free_inodes
は未使用の inode
数である。
preshrink は、 nr_inodes > inode-max
で、
システムがさらに inode
を割り当てるのではなく
inode リストを刈り取る
(余分なものを回収する)
必要がある場合に、 0
以外になる。 Linux 2.4
以降では、
このフィールドはダミーの値
(常に 0) である。
-
/proc/sys/fs/inotify (Linux 2.6.13
以降)
- このディレクトリには、ファイル
max_queued_events, max_user_instances, and
max_user_watches
がある。これらは、
inotify
インターフェースが消費するカーネルメモリー量を制限するのに利用できる。
詳細は inotify(7)
を参照。
- /proc/sys/fs/lease-break-time
- このファイルは、ファイルを保持しているプロセスに対して
カーネルがシグナルを送り、
他のプロセスがそのファイルをオープンするのを待っていることを通知してから、
そのプロセスに対してカーネルがファイルのリース
(lease, 貸し出し) ( fcntl(2)
を参照)
を許す猶予期間を指定する。
リースホルダ (lease holder:
ファイルの貸し出しを受けているプロセス)
が
猶予期間中にリースを削除するか階級を低くしない場合、
カーネルはファイルのリースを強制的に止める。
- /proc/sys/fs/leases-enable
- このファイルはシステム全体でのファイルリース
( fcntl(2) を参照)
を有効または無効にする。
ファイルに値 0
が書き込まれている場合、リースは無効である。
0
以外の場合にはリースは有効である。
-
/proc/sys/fs/mqueue (Linux 2.6.6
以降)
- このディレクトリにはファイル
msg_max, msgsize_max, and queues_max
がある。これらは POSIX
メッセージキューで使用されるリソースの
制御を行う。 詳細は
mq_overview(7) を参照。
-
/proc/sys/fs/nr_open (Linux 2.6.25
以降)
- This file imposes ceiling on the value to which the
RLIMIT_NOFILE resource limit can be raised (see
getrlimit(2)). This ceiling is enforced for both unprivileged and
privileged process. The default value in this file is 1048576. (Before
Linux 2.6.25, the ceiling for RLIMIT_NOFILE was hard-coded to the
same value.)
-
/proc/sys/fs/overflowgid と
/proc/sys/fs/overflowuid
- これらのファイルにより、ユーザーは固定
UID と固定 GID
の値を変更できる。
デフォルトは 65534
である。 Linux の UID と GID は
32 ビットであるが、 16
ビットの UID と GID
しかサポートしないファイルシステムもある。
このようなファイルシステムが書き込みを許可してマウントされた場合、
65535 を超える UID と GID は、
ディスクに書き込まれる前にオーバーフロー値に変換される。
-
/proc/sys/fs/pipe-max-size (Linux 2.6.35
以降)
- このファイルの値により、
fcntl(2) の F_SETPIPE_SZ
操作で増やすことができるパイプ容量の上限値が定義される。
この上限は非特権プロセスにのみ適用される。
このファイルのデフォルト値は
1,048,576 である。
このファイルに設定した値は切り上げられて、
実装側で利用するのに都合のよい値に変更される場合がある。
切り上げられた値を確認するには、
値を設定した後でこのファイルの内容を表示すればよい。
このファイルに設定できる最小値はシステムのページサイズである。
-
/proc/sys/fs/protected_hardlinks (Linux 3.6
以降)
- このファイルの値が
0 の場合、
ハードリンクの作成には何の制限も適用されない
(すなわち、 Linux 3.6
より前の伝統的な動作である)。
このファイルの値が 1
の場合、以下の条件のいずれか一つが成立する場合にのみ、
リンク先のファイルへのハードリンクが作成できる。
- *
- 呼び出し元が
CAP_FOWNER
ケーパビリティを持っている。
- *
- そのリンクを作成中のプロセスのファイルシステム
UID が、
リンク先ファイルの所有者
(UID) と一致する ( credentials(7)
に説明があるが、
通常、
プロセスのファイルシステム
UID はプロセスの実効 UID
と同じである)。
- *
- 以下の条件が全て成立する。
- •
- リンク先が通常のファイルである。
- •
- リンク先ファイルで
set-user-ID
許可ビットが有効になっていない。
- •
- リンク先ファイルで、
許可ビット set-group-ID と
group-executable
が同時に有効になっていない。
- •
- 呼び出し元は、
リンク先ファイルの読み出し、書き込み許可を持っている
(ファイルの許可マスクで許可されているか、適切なケーパビリティを持っているかは問わない)。
- The default value in this file is 0. Setting the value to 1
prevents a longstanding class of security issues caused by hard-link-based
time-of-check, time-of-use races, most commonly seen in world-writable
directories such as /tmp. The common method of exploiting this flaw
is to cross privilege boundaries when following a given hard link (i.e., a
root process follows a hard link created by another user). Additionally,
on systems without separated partitions, this stops unauthorized users
from "pinning" vulnerable set-user-ID and set-group-ID files
against being upgraded by the administrator, or linking to special
files.
-
/proc/sys/fs/protected_symlinks (Linux 3.6
以降)
- このファイルの値が
0 の場合、
以下のシンボリックリンクを辿る際に何の制限も適用されない
(すなわち、 Linux 3.6
より前の伝統的な動作である)。
このファイルの値が 1
の場合、
以下の状況においてのみシンボリックリンクが辿られる。
- *
- そのリンクを辿っているプロセスのファイルシステム
UID が、
シンボリックリンクの所有者
(UID) と一致する ( credentials(7)
に説明があるが、
通常、
プロセスのファイルシステム
UID はプロセスの実効 UID
と同じである)。
- *
- そのリンクが
world-writable の sticky
ビットがセットされたディレクトリではない。
- *
- シンボリックリンクとその親ディレクトリが同じ所有者
(UID) である。
- システムコールが上記の制約によりシンボリックリンクを辿れなかった場合は、
errno にエラー EACCES
が設定される。
- The default value in this file is 0. Setting the value to 1
avoids a longstanding class of security issues based on time-of-check,
time-of-use races when accessing symbolic links.
-
/proc/sys/fs/suid_dumpable (Linux 2.6.13
以降)
- このファイルの値により、set-user-ID
されたバイナリや、
保護がかかった (protected)
バイナリ / tainted な
(汚染された;
ライセンスがカーネルと適合しない)
バイナリに対して、コアダンプファイルを
生成するかどうかが決定される。
以下の
3つの値を指定することができる:
- 0 (default)
- この値を指定すると、以前と同じ
(Linux 2.6.13 より前の)
動作をする。 ( seteuid(2),
setgid(2)
などを呼び出すことや、set-user-ID
や set-group-ID
されたプログラムを
実行することで)
資格情報 (credentials)
が変更されているプロセスや、
プロセスの実行バイナリの読み出し許可がないプロセスに対して、
コアダンプを生成しない。
- 1 ("debug")
- すべてのプロセスで、可能であればコアダンプを行う。
コアダンプファイルの所有者は、ダンプを行うプロセスのファイルシステム
UID
となり、セキュリティ上の考慮は行われない。
この値は、システムデバッグの場面だけを想定して設けられている。
ptrace
のチェックも行われない。
- 2 ("suidsafe")
- 通常はダンプされないようなバイナリ
(上記の "0" 参照) を root
だけが読み出し可能な形でダンプする。
この場合、ユーザーはそのコアダンプファイルを削除することはできるが、
読むことはできない。
セキュリティ上の理由から、このモードのコアダンプでは、
既存のダンプファイルや他のファイルを上書きすることはない。
このモードは、管理者が通常の環境で問題を解析しようとする際に
適している。
- さらに、 Linux 3.6
以降では、
/proc/sys/kernel/core_pattern
は絶対パス名かパイプコマンドでなければならない。
core(5)
に詳しい説明がある。
core_pattern
がこれらのルールに合致しない場合は、
警告がカーネルログに書き込まれ、
コアダンプは生成されない。
- このファイルはスーパブロックの値を制御する。
- この値はカーネルがマウントできるファイルシステムの最大値になる。
現在、 super-max
で許可されているファイルシステム数以上に
マウントする必要がある場合は、この値を増加させるだけでよい。
- /proc/sys/fs/super-nr
- このファイルには現在マウントされているファイルシステム数が書かれている。
- /proc/sys/kernel
- このディレクトリには、以下で説明する様々なカーネルパラメーターを
制御するためのファイルが配置されている。
- /proc/sys/kernel/acct
- このファイルには
3
つの値が含まれている:
highwater, lowwater, frequency
である。 BSD-style process accounting
が有効になっている場合、
これら 3
つの値が動作を制御する。
ログファイルのあるファイルシステムの空き領域が
lowwater
パーセント以下になった場合は、ログ記録を一時停止する。
空き領域が highwater
パーセント以上になった場合に、ログ記録を再開する。
frequency
はカーネルが空き領域のチェックをする頻度である
(単位は秒)。
デフォルトの値は、4,
2, 30 である。
つまり、空き領域が
2%
以下になるとログ記録を一時停止し、
空き領域が 4%
以上となったときに再開する。
空き領域についての情報は
30
秒間有効である点に注意すること。
-
/proc/sys/kernel/cap_last_cap (Linux 3.2
以降)
-
capabilities(7) 参照。
-
/proc/sys/kernel/cap-bound (Linux 2.2 to 2.6.24
以降)
-
/proc/sys/kernel/cap-bound
このファイルにはカーネルの
capability bounding set (符号付き 10
進数表現)
の値が書かれている。
execve(2)
中は、このセットとプロセスに許可されている権限の
AND がとられる。 Linux 2.6.25
以降では、システム全体のケーパビリティバウンディングセットは
なくなり、スレッド単位のバウンディングセットに置き換えられた。
capabilities(7) を参照。
- /proc/sys/kernel/core_pattern
-
core(5) 参照。
- /proc/sys/kernel/core_uses_pid
-
core(5) 参照。
- /proc/sys/kernel/ctrl-alt-del
- このファイルはキーボードの
Ctrl-Alt-Del
の扱いを制御する。
このファイルにある値が
0 の場合、 Ctrl-Alt-Del
が捕捉されると init(1)
プログラムに送られて、正しく再起動される。
値が 0
より大きい場合、Vulcan
Nerve Pinch (tm) に反応して、 Linux
はダーティバッファーを同期させることなく、すぐに再起動を行う。
注意: プログラム (dosemu
など) に "raw"
モードのキーボードがある場合、
ctrl-alt-del はカーネルの tty
レイヤーに到達する前に
プログラムに遮断され、
プログラムに送られてどのように扱うかが決められる。
-
/proc/sys/kernel/dmesg_restrict (Linux 2.6.37
以降)
- このファイルの値により誰がカーネル
syslog
の内容を参照できるかが決定される。
このファイルの値が 0
であれば、制限はなくなる。
値が 1 であれば、
特権ユーザーだけがカーネル
syslog
を読み出すことができる
(詳細は syslog(2)
を参照)。 Linux 3.4
以降では CAP_SYS_ADMIN
ケーパビリティを持ったユーザーだけがこのファイルの値を変更できる。
-
/proc/sys/kernel/domainname と
/proc/sys/kernel/hostname
- これらのファイルは、コマンド
domainname(1), hostname(1)
と全く同じ方法で、
マシンの NIS/YP
ドメイン名とホスト名の設定に使える。
すなわち
# echo 'darkstar' > /proc/sys/kernel/hostname
# echo 'mydomain' > /proc/sys/kernel/domainname
は、以下と同じ効果がある。
# hostname 'darkstar'
# domainname 'mydomain'
注意: 典型的な darkstar.frop.org
という名前には、
ホスト名 "darkstar" と DNS
(Internet Domain Name Server) ドメイン名
"frop.org"
が含まれているが、DNS
ドメイン名と NIS (Network Information
Service) または YP (Yellow Pages)
のドメイン名を混同してはならない。
一般にこれら 2
つのドメイン名は異なる。
詳細な議論は、
hostname(1) の man
ページを参照すること。
- /proc/sys/kernel/hotplug
- このファイルはホットプラグポリシーエージェントのパスが書かれている。
このファイルのデフォルト値は
/sbin/hotplug である。
- /proc/sys/kernel/htab-reclaim
- (PowerPC のみ)
このファイルを 0
以外の値に設定すると、
PowerPC htab
(カーネルソースファイル
Documentation/powerpc/ppc_htab.txt 参照)
を、システムがアイドルループになるたびに切り詰める。
-
/proc/sys/kernel/kptr_restrict (Linux 2.6.38
以降)
- The value in this file determines whether kernel addresses
are exposed via /proc files and other interfaces. A value of 0 in
this file imposes no restrictions. If the value is 1, kernel pointers
printed using the %pK format specifier will be replaced with zeros
unless the user has the CAP_SYSLOG capability. If the value is 2,
kernel pointers printed using the %pK format specifier will be
replaced with zeros regardless of the user's capabilities. The initial
default value for this file was 1, but the default was changed to 0 in
Linux 2.6.39. Since Linux 3.4, only users with the CAP_SYS_ADMIN
capability can change the value in this file.
- /proc/sys/kernel/l2cr
- (PowerPC のみ)
このファイルには G3
プロセッサボードの
L2
キャッシュを制御するフラグが含まれる。
0
の場合、キャッシュは無効になる。
0
以外の場合は有効になる。
- /proc/sys/kernel/modprobe
- このファイルには、カーネルモジュールローダーへのパスが含まれる。
デフォルトの値は
/sbin/modprobe
である。このファイルは、
CONFIG_MODULES オプション (Linux
2.6.26 以前では CONFIG_KMOD)
を有効にしてカーネルが作成されている場合にのみ存在する。
このファイルについては、Linux
カーネルソースファイル
Documentation/kmod.txt (カーネル 2.4
以前のみに存在)
に記述されている。
-
/proc/sys/kernel/modules_disabled (Linux 2.6.31
以降)
- 他のモジュールが有効になったカーネルへのモジュールのロードが許可されるかを示すオン・オフ値である。
デフォルト値はオフ
(0) だが、 オン (1)
に設定することができる。
一度オンにすると、
モジュールをロードすることもアンロードすることもできなくなり、
この値をオフに戻すこともできない。
このファイルが存在するのは、
カーネルが CONFIG_MODULES
オプションを有効にしてコンパイルされている場合だけである。
-
/proc/sys/kernel/msgmax (Linux 2.2
以降)
- このファイルは、System
V
メッセージキューに書き込まれる
1 つのメッセージの
最大バイト数を、システム全体で制限する。
-
/proc/sys/kernel/msgmni (Linux 2.4
以降)
- このファイルはメッセージキュー識別子の最大数をシステム全体で制限する。
-
/proc/sys/kernel/msgmnb (Linux 2.2
以降)
- このファイルは、
msg_qbytes
の設定を初期化するシステム全体のパラメーターで
ある。 msg_qbytes
は以降で作成されるメッセージキューで使われる。
msg_qbytes
設定では、メッセージキューに書き込まれる最大バイト数を指定する。
-
/proc/sys/kernel/ngroups_max (Linux 2.6.4
以降)
- このファイルは、プロセスグループのメンバー数の上限値を表示する読み出し専用のファイルである。
-
/proc/sys/kernel/ostype と
/proc/sys/kernel/osrelease
- これらのファイルは文字列
/proc/version
の各部分を与える。
-
/proc/sys/kernel/overflowgid と
/proc/sys/kernel/overflowuid
- これらのファイルは
/proc/sys/fs/overflowgid と /proc/sys/fs/overflowuid
を複製したものである。
- /proc/sys/kernel/panic
- このファイルはカーネル変数
panic_timeout
への読み出しと書き込みのアクセスを与える。
この値が 0
ならば、パニック時にカーネルは
(無限)
ループに入る。 0
でなければ、その秒数だけ待ってから自動的に再起動する。
ソフトウェア watchdog
ドライバを使っている場合、
推奨される設定は 60
である。
-
/proc/sys/kernel/panic_on_oops (Linux 2.5.68
以降)
- このファイルは、oops
や BUG
が起こった場合のカーネルの動作を制御する。
ファイルに 0
が書かれている場合、システムは操作を続行しようとする。
1
が書かれている場合、システムは
(klogd が oops
出力を記録する時間を与えるために)
数秒間遅延した後、
panic を起こす。
/proc/sys/kernel/panic ファイルも 0
でない場合、マシンは再起動される。
-
/proc/sys/kernel/pid_max (Linux 2.5.34
以降)
- このファイルは、PID
をいくつで終了にするかを指定する
(すなわち、このファイルの値は最大
PID より 1 大きい)。
この値より大きな PID
値は割り当てられない。
したがって、このファイルの値はプロセスやスレッドの全体数のシステム全体での上限としても機能する。
このファイルのデフォルト値は
32768 であり、
その場合には以前のカーネルと同じ
PID の範囲になる。
32ビットのプラットフォームでは、
pid_max の最大値は 32768
である。
64ビットのプラットフォームでは、
2^22 ( PID_MAX_LIMIT, 約 4,000,000)
までの任意の値を設定できる。
-
/proc/sys/kernel/powersave-nap (PowerPC
のみ)
- このファイルにはフラグが書かれている。
フラグが設定されると、Linux-PPC
は 省電力の "nap"
モードを使う。
設定されない場合は、"doze"
モードが使われる。
- /proc/sys/kernel/printk
-
syslog(2) 参照。
-
/proc/sys/kernel/pty (Linux 2.6.4
以降)
- このディレクトリは、UNIX
98 疑似端末 ( pts(4)
を参照)
の数に関連する 2
つのファイルを含む。
- /proc/sys/kernel/pty/max
- このファイルは疑似端末の最大数を定義する。
- /proc/sys/kernel/pty/nr
- この読み出し専用のファイルは、現在いくつの疑似端末が使われているかを表す。
- /proc/sys/kernel/random
- このディレクトリは、ファイル
/dev/random
の操作を制御する様々なパラメーターが書かれている。
詳細は random(4)
を参照。
-
/proc/sys/kernel/random/uuid (Linux 2.4
以降)
- この読み出し専用のファイルから読み出しを行うごとに、
ランダムに生成した
128 ビットの UUID を、
標準の UUID
形式の文字列として返す。
- /proc/sys/kernel/real-root-dev
- このファイルは
Linux
カーネルソースファイル
Documentation/initrd.txt
に記述されている。
-
/proc/sys/kernel/reboot-cmd (Sparc
のみ)
- このファイルは
SPARC ROM/Flash
ブートローダーに引き数を渡す方法を
提供しているように思われる。
再起動後に何をするかを指定しているのだろうか?
- /proc/sys/kernel/rtsig-max
- (2.6.7
までのカーネルにのみ存在する。
setrlimit(2)
を参照すること)
このファイルはシステムで発行される
POSIX real-time (queued) signal の
最大数を調整するのに使用される。
- /proc/sys/kernel/rtsig-nr
- (2.6.7
までのカーネルにのみ存在する)
このファイルは現在キューに入っている
POSIX real-time signal
の数を表す。
-
/proc/sys/kernel/sched_rr_timeslice_ms (Linux 3.9
以降)
-
sched_rr_get_interval(2)
参照。
-
/proc/sys/kernel/sched_rt_period_us (Linux 2.6.25
以降)
-
sched(7) 参照。
-
/proc/sys/kernel/sched_rt_runtime_us (Linux 2.6.25
以降)
-
sched(7) 参照。
-
/proc/sys/kernel/sem (Linux 2.4
以降)
- このファイルには
System V IPC
セマフォを制限する 4
つの値が書かれている。
これらのフィールドは次の順番に並んでいる:
- SEMMSL
- セマフォ集合ごとのセマフォ数の最大値。
- SEMMNS
- システム全体での、全てのセマフォ集合におけるセマフォ数の制限。
- SEMOPM
-
semop(2)
コールに指定されるオペレーション数の最大値。
- SEMMNI
- システム全体でのセマフォ識別子の最大値。
- /proc/sys/kernel/sg-big-buff
- このファイルは、汎用
SCSI デバイス (sg)
のバッファーサイズの最大値を表す。
今はこれを変更することはできないが、
コンパイル時に
include/scsi/sg.h を編集して
SG_BIG_BUFF
の値を変えれば変更できる。
ただし、この値を変更する理由はないだろう。
-
/proc/sys/kernel/shm_rmid_forced (Linux 3.1
以降)
- If this file is set to 1, all System V shared memory
segments will be marked for destruction as soon as the number of attached
processes falls to zero; in other words, it is no longer possible to
create shared memory segments that exist independently of any attached
process.
- The effect is as though a shmctl(2) IPC_RMID
is performed on all existing segments as well as all segments created in
the future (until this file is reset to 0). Note that existing segments
that are attached to no process will be immediately destroyed when this
file is set to 1. Setting this option will also destroy segments that were
created, but never attached, upon termination of the process that created
the segment with shmget(2).
- Setting this file to 1 provides a way of ensuring that all
System V shared memory segments are counted against the resource usage and
resource limits (see the description of RLIMIT_AS in
getrlimit(2)) of at least one process.
- Because setting this file to 1 produces behavior that is
nonstandard and could also break existing applications, the default value
in this file is 0. Only set this file to 1 if you have a good
understanding of the semantics of the applications using System V shared
memory on your system.
-
/proc/sys/kernel/shmall (Linux 2.2
以降)
- このファイルには
System V
共有メモリーの総ページ数の
システム全体での制限が書かれている。
-
/proc/sys/kernel/shmmax (Linux 2.2
以降)
- このファイルを通じて、(System
V IPC)
共有メモリーセグメントを作成するときの
最大サイズの実行時上限
(run-time limit)
を取得または設定できる。
現在は 1GB
までの共有メモリーセグメントが
カーネルでサポートされている。
この値のデフォルトは
SHMMAX である。
-
/proc/sys/kernel/shmmni (Linux 2.4
以降)
- このファイルは、システム全体で作成可能な
System V
共有メモリーセグメント数を指定する。
- /proc/sys/kernel/sysrq
- このファイルは、SysRq
キーにより起動が許可されている関数群を制御する
ものである。デフォルトでは、ファイルの内容は
1 であり、
これは起こり得る全ての
SysRq
リクエストが許可されることを意味する
(古いバージョンのカーネルでは、SysRq
はデフォルトでは無効になっており、
実行時に明示的に有効にする必要があったが、今はそうではない)。
このファイルで指定可能な値は以下の通り。
0 - sysrq
を完全に無効にする
1 - sysrq
の全ての関数を有効にする
>1 - 許可する sysrq
関数のビットマスク。内訳は以下の通り。
2 -
コンソールのログレベルの制御を有効にする
4 -
キーボードの制御を有効にする
(SAK, unraw)
8 -
プロセスなどのデバッグダンプを有効にする
16 - sync
コマンドを有効にする
32 -
読み出し専用での再マウントを有効にする
64 -
プロセスへのシグナル発行を有効にする
(term, kill, oom-kill)
128 -
リブート/電源オフを許可する
256 -
全てのリアルタイムタスクの
nice
値の変更を許可する
カーネル設定オプション
CONFIG_MAGIC_SYSRQ
が有効な場合のみ、このファイルは存在する。
詳細は、Linux
カーネルソースファイル
Documentation/sysrq.txt
を参照のこと。
- /proc/sys/kernel/version
- このファイルには、以下のような文字列が書かれている:
#5 Wed Feb 25 21:49:24 MET 1998
"#5"
はこのソースで構築された
5
番目のカーネルであることを意味する。
その後にある日付はカーネルが構築された時刻を表す。
-
/proc/sys/kernel/threads-max (Linux 2.3.11
以降)
- このファイルは、システム全体で作成可能なスレッド数
(タスク数)
の上限を指定する。
-
/proc/sys/kernel/zero-paged (PowerPC
のみ)
- このファイルはフラグを含む。
(0 以外の値で)
有効された場合、Linux-PPC
はアイドルループで
pre-zero page
を行うので、get_free_pages
の速度が向上する可能性がある。
- /proc/sys/net
- このディレクトリにはネットワーク関係の情報が入っている。
このディレクトリにあるファイルのいくつかについては、
tcp(7) や ip(7)
に説明がある。
- /proc/sys/net/core/somaxconn
- このファイルは
listen(2) の backlog
引き数の上限値を規定する。
詳細は listen(2)
のマニュアルページを参照。
- /proc/sys/proc
- このディレクトリは空の場合もある。
- /proc/sys/sunrpc
- このディレクトリはネットワークファイルシステム
(NFS) への Sun remote procedure call
(遠隔手続き呼び出し)
をサポートする。
これが存在しないシステムもある。
- /proc/sys/vm
- このディレクトリにはメモリー管理の調整、バッファーやキャッシュ管理のための
ファイルがある。
-
/proc/sys/vm/compact_memory (Linux 2.6.35
以降)
- When 1 is written to this file, all zones are compacted
such that free memory is available in contiguous blocks where possible.
The effect of this action can be seen by examining
/proc/buddyinfo.
- カーネルの設定で
CONFIG_COMPACTION
が有効になっている場合にのみ存在する。
-
/proc/sys/vm/drop_caches (Linux 2.6.16
以降)
- このファイルに書き込みを行うと、カーネルに、
クリーンなキャッシュ、
dentry、 inode
をメモリーから追い出して、
メモリーを解放させることができる。
この機能はメモリー管理のテストや再現可能なファイルシステムのベンチマークを行うのに役立つ。
このファイルへの書き込みはキャッシュの利点を失うことになるので、システム全体の性能は低下する可能性がある。
ページキャッシュを解放するには、以下のようにする。
echo 1 > /proc/sys/vm/drop_caches
dentry と inode
を解放するには、以下のようにする。
echo 2 > /proc/sys/vm/drop_caches
ページキャッシュ、
dentry、 inode
を解放するには、以下のようにする。
echo 3 > /proc/sys/vm/drop_caches
このファイルへの書き込みは非破壊的な操作で、
ダーティな (dirty)
オブジェクトは
解放されないので、
この操作を行う際は最初に
sync(1)
を実行しておくべきである。
-
/proc/sys/vm/legacy_va_layout (Linux 2.6.9
以降)
- 0
以外の場合、新しい
32ビットメモリーマッピング配置が無効になり、
カーネルは全てのプロセスに対して従来の
(カーネル 2.4 の)
配置方法を
使用する。
-
/proc/sys/vm/memory_failure_early_kill (Linux 2.6.32
以降)
- このファイルは、カーネルが処理できない訂正不能なメモリーエラー
(通常はメモリーモジュールでの
2 ビットエラー)
がバックグラウンドでハードウェアにより検出された際に、プロセスをどのように
kill
するかを制御する。
(ページの有効なコピーがディスク上にも存在するなど)
いくつかの場面では、カーネルはアプリケーションに影響を与えずに透過的に故障を処理する。しかし、データの最新のコピーが他にはない場合には、データ破壊が波及するのを防ぐため、カーネルはプロセスを
kill する。
このファイルは以下のいずれかの値を持つ。
- 1:
- データ破壊が検出されるとすぐに、故障が検出され復元できないページ
(corrupted-and-not-reloadable page)
をマップしている全てのプロセスを
kill
する。この機能は、(カーネル内部で割り当てられたデータやスワップのキャッシュなど)
少数のいくつかのタイプのページではサポートされていないが、大半のユーザーページではこの機能は働く。
- 0:
- データ破壊が検出されたページの全てのプロセスからの
unmap
のみを行い、そのページにアクセスしようとしたプロセスのみを
kill する。
- この kill は si_code に
BUS_MCEERR_AO を設定した
SIGBUS
シグナルを使って行われる。プロセス側では必要であればこのシグナルを処理することができる。詳細は
sigaction(2) を参照。
この機能は、高度なマシンチェック機構を持ったアーキテクチャー/プラットフォームにおいてのみ有効であり、ハードウェア機能にも依存している。
アプリケーションは
prctl(2) の PR_MCE_KILL
操作を使って個別に
memory_failure_early_kill
の設定を上書きすることができる。
- カーネルの設定で
CONFIG_MEMORY_FAILURE
が有効になっている場合にのみ
存在する。
-
/proc/sys/vm/memory_failure_recovery (Linux 2.6.32
以降)
- メモリー故障回復
(memory failure recovery) を有効にする
(プラットフォームがサポートしている場合)
- 1:
- 回復を試みる。
- 0:
- メモリー故障時には常に
panic を起こす。
- カーネルの設定で
CONFIG_MEMORY_FAILURE
が有効になっている場合にのみ
存在する。
-
/proc/sys/vm/oom_dump_tasks (Linux 2.6.25
以降)
- カーネルが OOM-killing
を実行する際に、システム全体のタスクダンプ
(カーネルスレッドを除く)
を生成するかを制御する。
ダンプには、タスク
(スレッド、プロセス)
毎に以下の情報が出力される:
スレッド
ID、実ユーザー
ID、スレッドグループ
ID (プロセス ID)、
仮想メモリーサイズ、Resident
Set Size
(実メモリー上に存在するページサイズ)、
タスクがスケジューリングされた
CPU、 oom_adj スコア ( /proc/[pid]/oom_adj
の説明を参照)、コマンド名。
このダンプ情報は、なぜ
OOM-killer
が起動されたかを知り、
その原因となったならず者のタスクを特定するのに役に立つ。
このファイルの内容が値
0
の場合、ダンプ情報の出力は行われない。
タスクが何千もある非常に巨大なシステムでは、
各々のタスクについてメモリー状態をダンプするのは適切でないかもしれない。
そのようなシステムでは、ダンプ情報が必要でもないときに
メモリー不足 (OOM)
の状況で性能面の不利益が起こらないようにすべきだろう。
このファイルの内容が
0 以外の場合、 OOM-killer
が実際にメモリーを占有したタスクを
kill する度に
ダンプ情報が出力される。
デフォルト値は 0
である。
-
/proc/sys/vm/oom_kill_allocating_task (Linux 2.6.24
以降)
- このファイルは、メモリー不足
(OOM)
の状況が起こった際に、
メモリー不足のきっかけとなったタスクを
kill
するかどうかを制御する。
このファイルが 0
に設定された場合、
OOM-killer
はタスクリスト全体をスキャンし、経験則に基づき
kill
するタスクを選択する。
通常は、kill
した場合に多くのメモリーが解放できる、
ならず者のメモリー占有タスクが選択される。
このファイルが 0
以外に設定された場合、
OOM-killer
はメモリー不足の状況が発生するきっかけとなったタスクを
単純に kill
するだけである。
これにより、たいていは重い処理となるタスクリストのスキャンを回避できる。
/proc/sys/vm/panic_on_oom が 0
以外の場合、
/proc/sys/vm/oom_kill_allocating_task
にどのような値が入っていたとしても、
/proc/sys/vm/panic_on_oom
の方が優先される。
デフォルト値は 0
である。
-
/proc/sys/vm/overcommit_kbytes (Linux 3.14
以降)
- この書き込み可能なファイルは、
/proc/sys/vm/overcommit_memory が値 2
の際に、 CommitLimit
を制御する
/proc/sys/vm/overcommit_ratio
の別の設定手段を提供するものである。
overcommit_ratio
が割合をパーセントで指定するのに対し、
このファイルではオーバーコミットするメモリー量を絶対値
(kB 単位)
で指定できる。
これにより、
メモリーサイズが非常に大きなシステムで
CommitLimit
を極め細かく制御できる。
overcommit_kbytes と overcommit_ratio
のいずれか一方だけが効果を持つ。
overcommit_kbytes が 0
以外の値を持つ場合、
CommitLimit
を計算するのに
overcommit_kbytes が使用され、
それ以外の場合
overcommit_ratio
が使用される。
これらのファイルのいずれかに値を書き込むと、
他のファイルの値は 0
に設定される。
- /proc/sys/vm/overcommit_memory
- このファイルにはカーネル仮想メモリーのアカウントモードが書かれている。
値は以下の通り:
- 0:
発見的なオーバーコミット
(heuristic overcommit)
(これがデフォルトである)
1:
常にオーバーコミットし、チェックしない。
2:
常にチェックし、オーバーコミットしない。
- モード 0 では、
MAP_NORESERVE
を設定して呼び出された
mmap(2)
はチェックされない。
またデフォルトのチェックはとても脆弱で、
プロセスを "OOM-kill"
してしまうリスクを引き起こす。
Linux 2.4 では 0
以外の値はモード 1
を意味する。
モード 2 (Linux 2.6
以降で利用可能)
では、
割り当て可能な仮想アドレス空間
( /proc/meminfo の CommitLimit)
は以下で計算される。
CommitLimit = (total_RAM - total_huge_TLB) *
overcommit_ratio / 100 + total_swap
個々の説明:
- *
-
total_RAM
はシステム上の RAM
の総量
- *
-
total_huge_TLB
はヒュージページ用に確保されたメモリー総量
- *
-
overcommit_ratio は
/proc/sys/vm/overcommit_ratio の値
- *
-
total_swap
はスワップ空間の総量
- 例えば、 物理 RAM
が 16GB で、 スワップが
16GB で、
ヒュージページ専用の空間がなく、
overcommit_ratio が 50
のシステムでは、
この式から CommitLimit
として 24GB
の値が得られる。
Linux 3.14 以降では、
/proc/sys/vm/overcommit_kbytes の値が 0
でない場合、 CommitLimit
は代わりに以下のように計算される。
CommitLimit = overcommit_kbytes + total_swap
-
/proc/sys/vm/overcommit_ratio (Linux 2.6.0
以降)
- この書き込み可能なファイルは、
オーバーコミットできるメモリーの割合をパーセントで定義する。
このファイルのデフォルト値は
50 である。 /proc/sys/vm/overcommit_memory
の説明を参照。
-
/proc/sys/vm/panic_on_oom (Linux 2.6.18
以降)
- このファイルは、メモリー不足時にカーネルパニックを
起こすか起こさないかを制御する。
このファイルに値 0
を設定すると、
カーネルの OOM-killer
がならず者のプロセスを
kill する。 普通は、OOM-killer
がならず者のプロセスを
kill することができ、
システムは何とか動き続けることができる。
このファイルに値 1
を設定すると、
メモリー不足の状況が発生すると、カーネルは普通はパニックする。
しかしながら、プロセスが
メモリーポリシー (
mbind(2) の MPOL_BIND) や cpusets
(cpuset(7))
を使って特定のノードへのメモリー割り当てを制限していて、
それらのノードでメモリー枯渇状態に至った場合は、
一つのプロセスが
OOM-killer により kill
されるだけかもしれない。
この場合には、カーネルパニックは発生しない。
なぜなら、他のノードのメモリーには空きがあるかもしれず、
したがって、システム全体としてはメモリー不足の状況にまだ達していないかも
しれないからである。
このファイルに値 2
を設定すると、
メモリー不足の状況が発生するとカーネルは常にパニックを起こす。
デフォルト値は 0
である。 1 と 2
はクラスタリングのフェイルオーバー用である。
フェイルオーバーの方針に応じてどちらかの値を選択すること。
- /proc/sys/vm/swappiness
- このファイルの値により、カーネルがどの程度激しくメモリーページの
スワップを行う
かが制御される。
大きな値ほどスワップが激しくなり、小さい値ほど激しくなくなる。
デフォルト値は 60
である。
-
/proc/sysrq-trigger (Linux 2.4.21
以降)
- このファイルに文字
character を書き込むと、
キーボードから
ALT-SysRq-<character>
を入力した場合と
同じ SysRq
関数が起動される (
/proc/sys/kernel/sysrq
の説明を参照)。
通常、このファイルへ書き込みができるのは
root
だけである。詳細については、Linux
カーネルソースファイルの
Documentation/sysrq.txt
を参照のこと。
- /proc/sysvipc
- 疑似ファイル
msg, sem, shm
を含むサブディレクトリ。
これらのファイルは、現在システム上に存在する
System V プロセス間通信
(Interprocess Communication, IPC)
オブジェクト
(それぞれ:
メッセージキュー、セマフォ、共有メモリー)
のリストであり、
ipcs(1)
で取得できる情報と同じものを提供する。
これらのファイルにはヘッダーがあり、理解しやすいように
(1 行につき 1 個の IPC
オブジェクトの形式で)
フォーマットされている。
svipc(7)
にはこれらのファイルから分かる情報の詳細な背景が書かれている。
-
/proc/thread-self (Linux 3.17 以降)
- このディレクトリは、/proc
ファイルシステムにアクセスしたスレッドを参照している。
これは、同じスレッドのプロセススレッド
ID ( [tid]) の名前の
/proc/self/task/[tid]
ディレクトリと同一である。
-
/proc/timer_list (Linux 2.6.21
以降)
- This read-only file exposes a list of all currently pending
(high-resolution) timers, all clock-event sources, and their parameters in
a human-readable form.
-
/proc/timer_stats (Linux 2.6.21
以降)
- This is a debugging facility to make timer (ab)use in a
Linux system visible to kernel and user-space developers. It can be used
by kernel and user-space developers to verify that their code does not
make undue use of timers. The goal is to avoid unnecessary wakeups,
thereby optimizing power consumption.
If enabled in the kernel ( CONFIG_TIMER_STATS), but not used, it has
almost zero runtime overhead and a relatively small data-structure
overhead. Even if collection is enabled at runtime, overhead is low: all
the locking is per-CPU and lookup is hashed.
The /proc/timer_stats file is used both to control sampling facility
and to read out the sampled information.
The timer_stats functionality is inactive on bootup. A sampling period can
be started using the following command:
# echo 1 > /proc/timer_stats
The following command stops a sampling period:
# echo 0 > /proc/timer_stats
The statistics can be retrieved by:
$ cat /proc/timer_stats
While sampling is enabled, each readout from /proc/timer_stats will
see newly updated statistics. Once sampling is disabled, the sampled
information is kept until a new sample period is started. This allows
multiple readouts.
/proc/timer_stats
のサンプル出力。
$ cat /proc/timer_stats
Timer Stats Version: v0.3
Sample period: 1.764 s
Collection: active
255, 0 swapper/3 hrtimer_start_range_ns (tick_sched_timer)
71, 0 swapper/1 hrtimer_start_range_ns (tick_sched_timer)
58, 0 swapper/0 hrtimer_start_range_ns (tick_sched_timer)
4, 1694 gnome-shell mod_delayed_work_on (delayed_work_timer_fn)
17, 7 rcu_sched rcu_gp_kthread (process_timeout)
...
1, 4911 kworker/u16:0 mod_delayed_work_on (delayed_work_timer_fn)
1D, 2522 kworker/0:0 queue_delayed_work_on (delayed_work_timer_fn)
1029 total events, 583.333 events/sec
- The output columns are:
- *
- a count of the number of events, optionally (since Linux
2.6.23) followed by the letter 'D' if this is a deferrable timer;
- *
- the PID of the process that initialized the timer;
- *
- the name of the process that initialized the timer;
- *
- the function where the timer was initialized; and
- *
- (in parentheses) the callback function that is associated
with the timer.
- /proc/tty
- 疑似ファイルを含むサブディレクトリ。
tty
ドライバとライン設定
(line discipline) の書かれた
サブディレクトリも含まれる。
- /proc/uptime
- このファイルは
システム起動時から経過した時間
(秒) と アイドル (idle)
しているプロセスが消費した時間
(秒) の 2
つの数を含む。
- /proc/version
- 現在稼働しているカーネルのバージョン識別子である文字列。
これには /proc/sys/ostype,
/proc/sys/osrelease, /proc/sys/version
の内容が含まれる。
たとえばこのように:
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
-
/proc/vmstat (Linux 2.6 以降)
- このファイルは仮想メモリーの様々な統計情報を表示する。
-
/proc/zoneinfo (Linux 2.6.13 以降)
- このファイルはメモリーのゾーン
(memory zone)
に関する情報を表示する。
仮想メモリーの振舞いを分析するのに役立つ。
ほとんどの文字列
(たとえば環境変数やコマンド行)
は内部表現のままなので、
各フィールドはヌルバイト
('\0')
で区切られている。だから、
od -c や
tr "\000" "\n"
を使えば、それらはより読みやすくなる。
また
echo `cat <file>`
でもよい。
このマニュアルは不完全であり、たぶん不正確で、しばしば更新される必要がある。
cat(1),
dmesg(1),
find(1),
free(1),
ps(1),
tr(1),
uptime(1),
chroot(2),
mmap(2),
readlink(2),
syslog(2),
slabinfo(5),
hier(7),
namespaces(7),
time(7),
arp(8),
hdparm(8),
ifconfig(8),
init(1),
lsmod(8),
lspci(8),
mount(8),
netstat(8),
procinfo(8),
route(8),
sysctl(8)
Linux
カーネルのソースファイル:
Documentation/filesystems/proc.txt Documentation/sysctl/fs.txt,
Documentation/sysctl/kernel.txt,
Documentation/sysctl/net.txt,
and
Documentation/sysctl/vm.txt.
この man ページは Linux
man-pages
プロジェクトのリリース
3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。