Solaris のシステム管理

第 30 章 スワップ空間の追加構成の手順

この章の内容は次のとおりです。

スワップ空間について

この節では、スワップ空間の概念と、Solaris 1.x (SunOS 4.x) と Solaris 2.x (SunOS 5.x) のスワップ要件の違いについて説明します。すでに Solaris 2.x のスワップ機構に慣れている方は、「スワップ空間の計画」の節に進んでください。

管理者は、次の事柄を決定する上で Solaris 2.x の機能を理解しておく必要があります。

スワップ空間と仮想メモリー

Solaris 2.x システムソフトウェアは、ファイルシステムではなく一時記憶域に一部のディスクスライスを使用します。これらのスライスを「 スワップ」スライスと呼びます。スワップスライスは、システムの物理メモリー不足のために現在のプロセスを処理することができないときに、仮想メモリー記憶域として使用されます。

Solaris 2.x の仮想メモリーシステムは、ディスク上のファイルの物理コピーをメモリー内の仮想アドレスに対応付けます。これらのマッピングに関するデータが入った物理メモリーページは、ファイルシステム内の通常ファイルまたはスワップ空間から読み直されます。ユーザーにはメモリーをバックアップしているファイル名はわからないため、スワップ空間から読み直されたメモリーは「anonymous メモリー」として参照されます。

Solaris 1.x の anonymous メモリーページは、システムのスワップ空間プールからランダムに割り当てられた名前を使用して対応付けられます。これらのメモリーページの用途は次のとおりです。

Solaris 1.x anonymous メモリーを実装する場合、次の制限があります。

Solaris 2.x ソフトウェア環境には、「仮想スワップ空間」という概念が導入されています。これは、anonymous メモリーページとこれらのページを実際にバックアップする物理記憶域 (またはディスク上にとられたバックアップ用のスワップ空間) の間に位置する層です。システムの仮想スワップ空間は、すべての物理 (ディスク上にとられたバックアップ用のスワップ空間) スワップ空間と現在使用可能な物理メモリーの一部の合計に等しくなります。

仮想スワップ空間の長所は次のとおりです。

スワップ空間と TMPFS ファイルシステム

Solaris 2.x 環境では、TMPFS ファイルシステムは /etc/vfstab ファイル内のエントリによって自動的に稼働されます。TMPFS ファイルシステムは、ファイルとそれに関連付けられた情報をディスクではなくメモリー (/tmp ディレクトリ内) に格納するので、これらのファイルへのアクセスが高速になります。このため、コンパイラや DBMS 製品のように /tmp の使用量の大きいアプリケーションの場合は、性能が大幅に改善されます。

TMPFS ファイルシステムは、システムのスワップ資源から /tmp ディレクトリ内の領域を割り当てます。つまり、/tmp 内の領域を使い果たすと、スワップ空間も使い果たしたことになります。したがって、アプリケーションの /tmp の使用量が大きい場合に、スワップ空間の使用状況を監視しなければ、システムがスワップ空間を使い果たす可能性があります。

TMPFS を使用したいがスワップ資源が限られている場合は、次の方法を使用してください。

スワップ空間の追加が必要かどうかを調べる方法

この節では、スワップ空間を使い果たしたときに表示されるエラーメッセージについて説明します。

スワップ関連のエラーメッセージ

次のメッセージは、アプリケーションがさらに anonymous メモリーを取得しようとしたが、バックアップ用のスワップ空間が残っていなかったことを示します。

application is out of memory

malloc error O

WARNING: Sorry, no swap space to grow stack for pid

TMPFS 関連のエラーメッセージ

directory: File system full, swap space limit exceeded

このメッセージは、ファイルに書き込むときにページを割り当てることができない場合に表示されます。このエラーは、TMPFS が許容限度を超えて書き込もうとしたときや、現在実行されているプログラムが大量のメモリーを使用している場合に発生することがあります。

directory: File system full, memory allocation failed

このメッセージは、TMPFS が新しいファイルやディレクトリの作成中に物理メモリーを使い果たしたことを意味します。

TMPFS 関連のエラーメッセージから回復する方法については、TMPFS(7FS) のマニュアルページを参照してください。

スワップ空間の割り当て方法

最初に、スワップ空間は Solaris インストールプロセスの一部として割り当てられます。インストールプログラムによるディスクスライスの自動レイアウトを使用しており、スワップファイルのサイズを手作業で変更しなければ、Solaris インストールプログラムは表 30-1 のようなデフォルトのスワップスライスを割り当てます。

表 30-1 デフォルトのスワップ空間割り当て

システムに「n」M バイトの物理メモリーがある場合 

割り当てられるディレクトリのスワップ空間 

16-64 

32M バイト 

64-128 

64M バイト 

128-512 

128M バイト 

512 を超える場合 

256M バイト 

/etc/vfstab ファイル

システムをインストールすると、スワップスライスとファイルは /etc/vfstab ファイル内に列挙され、システムのブート時に /sbin/swapadd スクリプトによって起動されます。

/etc/vfstab ファイル内のスワップデバイスエントリには、次の情報が入っています。

スワップファイルが入っているファイルシステムは、スワップファイルが稼働される前にマウントしなければならないので、ファイルシステムをマウントするエントリがスワップファイルを起動するエントリより前に入っていることを、/etc/vfstab ファイル内で確認してください。

スワップ空間の計画

スワップ空間のサイズを決定する上で最も重要な要素は、システムのソフトウェアアプリケーションの要件です。たとえば、コンピュータ支援設計シミュレータ、データベース管理製品、トランザクションモニター、地質分析システムなどの大型アプリケーションは、超大型メモリーシステム内で 200 〜 1000M バイトのスワップ空間を消費することがあります。

一般にデータファイルのサイズが 10 〜 20M バイトを超えるアプリケーションの場合は、スワップ空間の要件をアプリケーションベンダーに問い合わせてください。

アプリケーションベンダーからスワップ空間の要件を入手できない場合は、次のガイドラインに従ってスワップ空間を割り当ててください。

スワップ資源の監視

/usr/sbin/swap コマンドを使用してスワップ空間を管理します。2 つのオプション -l-s を使用して、スワップ資源に関する情報を表示します。

swap -l コマンドを使用してシステムのスワップ空間を調べます。有効なスワップデバイスやファイルは、swapfile カラムの下に表示されます。

# swap -l
swapfile           dev  swaplo blocks   free
/dev/dsk/c0t2d0s1 32,17      8 205624 192704

swap -s コマンドを使用してスワップ資源を監視します。

# swap -s
total: 10492k bytes allocated + 7840k reserved = 18332k used, ¥
21568k available

usedavailable の数値の統計は、システム上の合計スワップ空間に等しくなります。これには、物理メモリーの一部とスワップデバイス (またはファイル) が含まれます。

使用可能なスワップ空間と使用済みスワップ空間の容量 (swap -s の出力内) を使用して、時間経過に伴うスワップ空間の使用状況を監視できます。システム性能が適正であれば、swap -s を使用するとどの程度のスワップ空間が使用可能であるかがわかります。システム性能が低下したときは、使用可能なスワップ空間の容量をチェックして減少していないかどうかを調べてください。これにより、システムに対するどのような変更が原因でスワップ空間の使用量が増大したかを識別できます。

このコマンドを使用するときには、カーネルとユーザープロセスが物理メモリーをロックして解除するたびに、スワップに使用できる物理メモリーの容量が動的に変化するので注意してください。


注 -

swap -l コマンドではスワップ空間が 512 バイトのブロック数として表示され、swap -s コマンドでは 1024 バイトのブロック数として表示されます。swap -l の場合はスワップ空間の計算に物理メモリーが含まれないので、swap -l からのブロック数を合計して K バイト数に換算すると、used + (swap -s の出力内での) available よりも少なくなります。


表 30-2 は、swap -s コマンドの出力を示しています。

表 30-2 swap -s コマンドの出力

キーワード 

説明 

bytes allocated

現在バックアップ用の記憶域 (ディスク上にとられたバックアップ用のスワップ空間) として使用可能なスワップ空間の合計容量を表す 1024 バイトのブロック数 

reserved

現在は割り当てられていないが、後から使用できるようにメモリーによって回収されるスワップ空間の合計容量を表す 1024 バイトのブロック数 

used

割り当て済みまたは予約済みのスワップ空間の合計容量を表す 1024 バイトのブロック数 

available

後から予約や割り当てに使用可能なスワップ空間の合計容量を表す 1024 バイトのブロック数 

スワップ空間の追加

システム構成を変更して新しいソフトウェアパッケージをインストールした後に、スワップ空間を追加しなければならないことがあります。その場合に望ましいのは、mkfile コマンドと swap コマンドを使用して、既存の UFS または NFS ファイルシステムの一部を補助スワップ空間として指定する方法です。次に説明するように、これらのコマンドを使用すると、ディスクをパーティションに分割し直さなくても、スワップ空間を追加できます。

スワップ空間を追加するもう 1 つの方法は、ディスクをパーティションに分割し直すことです。その方法については、第 21 章「ディスク管理の概要」で使用中のシステムに該当する箇所を参照してください。

スワップファイルの作成

次の手順でスワップファイルを作成します。

mkfile コマンド

mkfile コマンドは、NFS のマウント済みスワップ空間またはローカルスワップ空間に使用できるファイルを作成します。スティッキビットが設定され、ファイルは 0 が埋め込まれます。スワップファイルのサイズは、バイト数 (デフォルト) として指定するか、接尾辞 kbm を使用して、それぞれ K バイト数、ブロック数、M バイト数として指定できます。

表 30-3 は、mkfile コマンドのオプションを示しています。

表 30-3 mkfile コマンドのオプション

オプション 

説明 

-n

空のファイルを作成する。サイズは表示されるが、データが書き込まれるまでディスクブロックは割り当てられない。 

-v

詳細モード。作成されたファイル名とサイズが表示される。 


注意 - 注意 -

-n オプションは、NFS スワップファイルの作成時のみ使用してください。


スワップファイルを作成して使用可能にする方法

  1. スーパーユーザーになります。

    root 権限がなくてもスワップファイルを作成できますが、スワップファイルが不注意から上書きされないように、root を所有者にしておくとよいでしょう。

  2. スワップファイルを作成します。

    # mkfile nnn[k|b|m] filename
    

    サイズ「nnn」(K バイト数、バイト数、M バイト数) のスワップファイルと指定したファイル名が作成されます。

  3. スワップファイルを有効にします。

    # /usr/sbin/swap -a /path/filename
    

    絶対パス名を使用してスワップファイルを指定しなければなりません。スワップファイルが追加され、ファイルシステムがマウント解除されるか、またはシステムがリブートされるまで使用可能になります。

  4. ファイルの完全パス名を指定し、ファイルシステムのタイプとして swap を指定して、スワップファイルのエントリを /etc/vfstab ファイルに追加します。

    /path/filename   -      -       swap     -     no     -
  5. スワップファイルが追加されたことを確認するには、次のように入力します。

    /usr/sbin/swap -l
    

例 - スワップファイルを作成して使用可能にする

次の例では、/files/swapfiles という 24M バイトのスワップファイルを作成します。

# mkfile 24m /files/swapfile
# swap -a /files/swapfile
# vi /etc/vfstab
(エントリがスワップファイル用に追加される)
/files/swapfile   -      -       swap     -     no     -
# swap -l
swapfile             dev  swaplo blocks   free
/dev/dsk/c0t2d0s1   32,17      8 205624 192704
/files/swapfile       -        8  40952  40952

スワップファイルを削除する

余分なスワップ空間が不要になったら削除できます。

余分なスワップ空間を削除する方法

  1. スーパーユーザーになります。

  2. 次のように swap -d コマンドを使用してスワップ空間を削除します。

    # /usr/sbin/swap -d /path/filename
    

    スワップファイル名がリストから削除されるので、スワッピングに使用できなくなります。ファイルそのものは削除されません。

  3. /etc/vfstab ファイルを編集して、スワップファイルのエントリを削除します。

  4. 他の目的に使用できるようにディスク領域を復元します。

    # rm swap-filename
    

    スワップ空間がファイルの場合は削除します。また、スワップ空間が別のスライスに入っていて、不要なことがわかっている場合は、新しいファイルシステムを作成してマウントします。

    詳細は、第 28 章「ファイルシステムのマウントとマウント解除の手順」を参照してください。

例 - 余分なスワップ空間を削除する

次の例は、/files/swapfile スワップファイルを削除します。

# swap -d /files/swapfile
# swap -l
swapfile             dev  swaplo  blocks   free
/dev/dsk/c0t2d0s1   32,17      8  205624  192720