Solaris のシステム管理 (基本編)

第 42 章 追加スワップ空間の構成 (手順)

この章では、Solaris リリースをインストールした後で追加のスワップ空間を構成するためのガイドラインと手順について説明します。

この章で説明する手順は次のとおりです。

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

スワップ空間について

システム管理者は、次の事柄を決定する上で SunOS のスワップ機構を理解しておく必要があります。

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

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

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

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

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

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

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

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

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

ダンプデバイスとしてのスワップ空間

通常、ダンプデバイスとは、システムクラッシュダンプ情報を格納するために予約されているディスク領域のことです。デフォルトでは、システムのダンプデバイスは適切なスワップパーティションになるように設定されます。可能であれば、クラッシュダンプの信頼性を高めたり、システム障害が発生した後のリブート時間を短縮したりする代わりに、代替ディスクパーティションを「専用ダンプデバイス」として設定してください。 専用ダンプデバイスの設定は、dumpadm コマンドで行えます。詳細については、『Solaris のシステム管理 (上級編)』の「システムクラッシュ情報の管理 (手順)」を参照してください。

Solaris ボリュームマネージャなどのボリュームマネージャを使用してディスクを管理している場合は、専用ダンプデバイスを Solaris ボリュームマネージャの管理下に置かないように設定してください。スワップ領域は、Solaris ボリュームマネージャの管理下に保管することをお勧めします。ただし、使いやすさとパフォーマンスの理由から、Solaris ボリュームマネージャの管理下で動作しないディスクを専用ダンプデバイスとして設定してください。

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

スワップ空間の追加が必要かどうかを調べるには、swap -l コマンドを使用します。

たとえば、次の swap -l コマンドの出力は、このシステムのスワップ空間がほぼ完全に使い果たされたか、割り当て率が 100% に達していることを示しています。


% swap -l
swapfile             dev   swaplo blocks   free
/dev/dsk/c0t0d0s1   136,1      16 1638608    88

システムのスワップ空間の割り当て率が 100% に達すると、アプリケーションのメモリーページが一時的にロックしてしまいます。アプリケーションエラーは発生しませんが、システムパフォーマンスが低下する可能性があります。

システムにスワップ空間を追加する方法については、スワップファイルを作成して使用可能にする方法を参照してください。

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

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


application is out of memory
 
malloc error O
 
messages.1:Sep 21 20:52:11 mars genunix: [ID 470503 kern.warning] 
WARNING: Sorry, no swap space to grow stack for pid 100295 (myprog)

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

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


directory: File system full, swap space limit exceeded

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


directory: File system full, memory allocation failed

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

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

最初に、スワップ空間は Solaris インストールプロセスの一部として割り当てられます。インストールプログラムによるディスクスライスの自動レイアウトを選択し、スワップファイルのサイズを手作業で変更しなければ、Solaris インストールプログラムはデフォルトのスワップ領域 (512M バイト) を割り当てます。

Solaris 9 リリースよりインストールプログラムは利用可能な最初のディスクシリンダ (通常はシリンダ 0) にスワップ空間を割り当てるようになりました。この配置によって、デフォルトのディスクレイアウト時にはルート (/) ファイルシステムに最大のスワップ空間を割り当てることができ、アップグレード時にはルート (/) ファイルシステムを拡張できます。

スワップ空間の割り当て方法については、スワップ空間の計画を参照してください。

スワップファイルを作成すると、スワップ空間をシステムに追加できます。スワップファイルの作成方法については、スワップ空間の追加を参照してください。

/etc/vfstab ファイル

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

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

スワップファイルが入っているファイルシステムは、スワップファイルが有効になる前にマウントしておかなければなりません。このため、/etc/vfstab ファイル内で、ファイルシステムをマウントするエントリが、スワップファイルを有効にするエントリより前に入っていることを確認してください。

スワップ空間の計画

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

アプリケーションのスワップ空間の要件については、アプリケーションベンダーに問い合わせてください。

アプリケーションベンダーに問い合わせてもスワップ空間の要件を判断できない場合は、次のシステムタイプ別のガイドラインに従ってスワップ空間を割り当ててください。

システムタイプ 

スワップ空間のサイズ 

専用ダンプデバイスのサイズ 

約 4G バイトの物理メモリーを備えたワークステーション  

1G バイト 

1G バイト 

約 8G バイトの物理メモリーを備えた中型のサーバー  

2G バイト 

2G バイト 

約 16 〜 128G バイトの物理メモリーを備えたハイエンドサーバー  

4G バイト 

4G バイト 

一般的なガイドラインのほかに、次の場合のスワップ空間やディスク領域の割り当ても検討してください。

スワップリソースの監視

/usr/sbin/swap コマンドを使用してスワップ領域を管理します。2 つのオプション -l-s は、スワップリソースに関する情報を表示します。

swap -l コマンドを使用すると、システムのスワップ領域を確認できます。有効になっているスワップデバイスやファイルは、swapfile カラムの下に表示されます。


# swap -l
swapfile             dev  swaplo blocks   free
/dev/dsk/c0t0d0s1   136,1      16 1638608 1600528

swap -s コマンドを使用すると、スワップリソースを監視できます。


# swap -s
total: 57416k bytes allocated + 10480k reserved = 67896k used, 
833128k available

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

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

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


注 –

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


表 42–1 に、swap -s コマンドの出力とその説明を示します。

表 42–1 swap -s コマンドの出力

キーワード 

説明 

bytes allocated

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

reserved

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

used

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

available

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

スワップ空間の追加

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

スワップ空間を追加するもう 1 つの方法は、既存のディスクをパーティションに分割し直すか、別のディスクを追加することです。ディスクをパーティションに分割し直す方法については、第 32 章「ディスクの管理 (概要)」を参照してください。

スワップファイルの作成

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

mkfile コマンド

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

次の表に、mkfile コマンドのオプションを示します。

表 42–2 mkfile コマンドのオプション

オプション 

説明 

-n

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

-v

作成されたファイル名とサイズが表示される。 


注意 – 注意 –

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


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

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

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

  2. 必要に応じて、スワップファイル用のディレクトリを作成します。

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


    # mkfile nnn[k|b|m] filename
    

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

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


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

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

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


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


    $ /usr/sbin/swap -l
    

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

次の例は、/files/swapfiles という 100M バイトのスワップファイルを作成する方法を示しています。


# mkdir /files
# mkfile 100m /files/swapfile
# swap -a /files/swapfile
# vi /etc/vfstab
(エントリがスワップファイル用に追加される):
/files/swapfile   -      -       swap     -     no     -
# swap -l
swapfile             dev  swaplo blocks   free
/dev/dsk/c0t0d0s1   136,1      16 1638608 1600528
/files/swapfile        -       16 204784  204784

スワップファイルの削除

不要になったスワップ空間は、削除することができます。

不要になったスワップ空間を削除する方法

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

  2. スワップ空間を削除します。


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

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

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

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


    # rm /path/filename
    

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

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

  5. 削除したスワップファイルが使用できなくなっていることを確認します。


    # swap -l
    

例 — 不要になったスワップ空間を削除する

次の例は、/files/swapfile スワップファイルを削除する方法を示しています。


# swap -d /files/swapfile
# (削除したスワップエントリを /etc/vfstab ファイルから削除する)
# rm /files/swapfile
# swap -l
swapfile             dev  swaplo  blocks   free
/dev/dsk/c0t0d0s1   136,1      16 1638608 1600528