メモリおよびディスクリソースを調査するために便利なコマンドおよび周辺知識
[履歴] [最終更新] (2015/05/26 09:50:37)
最近の投稿
注目の記事

メモリ使用量を表示 (free)

既定ではキロバイト単位で表示されます。オプション "-b", "-k", "-m", "-g" を付与して実行するとそれぞれバイト、キロ、メガ、ギガで表示されます。

$ free
             total       used       free     shared    buffers     cached
Mem:        510824     133932     376892          0      10448      56216
-/+ buffers/cache:      67268     443556
Swap:      1048568          0    1048568

Mem (物理メモリ)

  • total = used + free
  • usedの内訳の一部として buffers, cached が存在 (OSがディスクアクセス回数を減らすため等に使用)
  • 「-/+ buffers/cache」の行では buffers, cached を used ではなく free に含めた場合の容量を表示

Swap (仮想メモリ)

  • total = used + free

コンテキストスイッチ

コンテキストスイッチという仕組みを用いると、CPUのコアで行っていたある処理の状態を一旦退避させ、別の新しい処理を行えます。OSはPCのコア数を越える処理を同時に行わなければならなくなった場合、コンテキストスイッチを利用して切替えながら、一つのコアに仮想的に複数のプロセス処理を同時に実行させます。コンテキストスイッチが頻繁に発生すると処理性能が落ちるため、並列プログラミングなどでコア数を越えて並列処理を実行させることは非効率ということになります。CPUのコアについてはこちらを参照してみてください。

データの読み書きにおける「ブロック」という用語

ハードディスクなどへのデータの読み書きには最小単位があり「ブロック」とよばれます。ブロックの具体的な容量は環境に依存します。

ファイルシステム毎の空き容量を表示 (df)

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       31G  1.7G   27G   6% /
tmpfs                 250M     0  250M   0% /dev/shm
/dev/sda1             485M   52M  409M  12% /boot

あるファイルのディスク使用量を表示 (du)

$ du -h test.txt
4.0K    test.txt

スワップ領域の内容を実メモリに移動 (swapoff, swapon)

一時的に何らかの障害によってメモリが不足してスワップが発生してしまったとします。原因となるプロセスを kill するなどして、スワップ領域に格納された内容をすべて格納できる十分な空きが実メモリにできた場合、以下のコマンドでスワップ領域の内容をすべて実メモリに移動できます。

スワップ領域のためにマウントされているファイルを確認

$ cat /proc/swaps
Filename    Type         Size    Used    Priority
/dev/dm-1   partition    950268  49604   -1

ちなみにこれは /etc/fstab で起動時にマウントされたものです。

$ grep swap /etc/fstab
/dev/mapper/VolGroup-lv_swap swap    swap    defaults  0 0
$ ls -l /dev/mapper/VolGroup-lv_swap
lrwxrwxrwx. 1 root root 7  4月 28 23:29 2015 /dev/mapper/VolGroup-lv_swap -> ../dm-1

現在のメモリ状況を確認

$ free -m
             total       used       free     shared    buffers     cached
Mem:           458        329        129          0         10        228
-/+ buffers/cache:         90        367  ← 実メモリの空きは367MB (>48MB)
Swap:          927         48        879  ← 927MBが確保され48MBが使用中

スワップを無効にして内容を実メモリに移動 (しばらくかかります)

$ sudo swapoff /dev/dm-1

メモリ状況を確認

$ free -m
             total       used       free     shared    buffers     cached
Mem:           458        376         82          0         10        229
-/+ buffers/cache:        135        322  ← freeが367-48で約319MBになった
Swap:            0          0          0  ← スワップ領域が0MBになった

再びスワップ領域を有効化

$ sudo swapon /dev/dm-1

メモリ状況を確認

$ free -m
             total       used       free     shared    buffers     cached
Mem:           458        376         81          0         10        229
-/+ buffers/cache:        136        322
Swap:          927          0        927  ← 927MB確保された。0MB使用中
関連ページ
    概要 「何とかstat」というコマンドがたくさんあります。よく使うものの基本的な使用方法をまとめます。 iostat (I/Oデバイスの統計情報) システムが認識する各デバイスのI/Oの使用状況を調査するコマンドです。補足情報としてCPUの使用状況「%user, %system, %iowait, %idle」も合わせて出力されます。それらの意味については
    概要 sysstatというパッケージに含まれる "sar" (System Admin Reporter) コマンドを利用すると、PCの各リソースの使用状況を表示することができます。これは、負荷試験などでボトルネックを特定するために役立ちます。 使い方 インストール例 yum install sysstat
    概要 C 言語から Linux OS の各システムコールを利用する場合を想定して、関連情報をまとめます。 システムコールについて プログラムを実行するとき、CPU のレジスタの一つであるプログラムカウンタは、実行するプログラムが展開されたメモリ上のアドレスを指します。CPU が実行するプログラムには、OS のカーネルと、カーネルが管理するユーザプログラムがあります。CPU のプログラムカウン