Solaris のシステム管理 (第 2 巻)

第 24 章 システム性能の概要

コンピュータやネットワークの性能を十分に引き出すことは、システム管理における重要な作業です。この章では、コンピュータシステムの性能の維持と管理に影響する要素について簡単に説明します。

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

システム性能の管理に関する新機能

この節では、Solaris 7 リリースのシステム性能を管理するための新しい機能について説明します。

pgreppkill コマンド

以前の Solaris リリースでは、psgrepegerpawkkill コマンドを組み合わせてプロセスを管理していましたが、pgrep および pkill コマンドがこれらのコマンドに置き換わります。

pgrep コマンドは、システム上のアクティブなプロセスを調べ、その属性がコマンド行に指定された基準に合っていればそのプロセス ID を表示します。

pkill コマンドは pgrep コマンド同じ動作をしますが、一致したそれぞれのプロセス ID を表示する代わりに、kill(2) によりシグナルで通知する点が異なります。

このコマンドを使用する利点は、次のとおりです。

例 - pgreppkill コマンドを使用する

次の例は、pgrep コマンドを使用して、指定したプロセス dtmail の所有者がユーザー kryten と一致することを確認し、次に pkill コマンドでそのプロセスを終了させます。

$ pgrep -u kryten -x dtmail
14206
$ pkill -u kryten -x dtmail
$

スーパーユーザーとして pkill コマンドを実行する場合、-u オプションを指定すると、他のユーザーが所有するプロセス dtmailを誤って終了させてしまうことを防止できます。

次の例は、最も後で作成されたユーザー pmorph のプロセス shelltool を終了させます。

% pkill -u pmorph -n shelltool

次の例は、proc(1) ツールの 1 つである pwdx コマンドを pgrep コマンドへの入力として使用して、ユーザー rimmer の Korn シェルの現在の作業ディレクトリを表示します。

$ pgrep -u rimmer -x ksh | xargs /usr/proc/bin/pwdx
 4748: 	/home/rimmer
11395:	/home/rimmer/src/command
 6010:	/datab/files/file1

詳細は、pgrep(1) のマニュアルページを参照してください。

システム性能についての参照先

システム性能を監視する手順については、次の各章を参照してください。

システム性能とシステム資源

コンピュータシステムの性能は、システムがその資源をどのように使用して割り当てるかによって左右されます。したがって、通常の条件下でどのように動作するかを知るために、システム性能を定期的に監視することが重要になります。期待できる性能についてよく把握し、問題が発生したときに分析できなければなりません。

性能に影響を及ぼすシステム資源は次のとおりです。

コンピュータシステムの動作と性能に関する統計情報を表示するツールについては、第 26 章「性能の監視手順」を参照してください。

その他の関連情報

性能の問題は多岐にわたる要素が含まれるため、ここではすべてを詳しく説明できません。システムやネットワークの性能の改善と調整の様々な側面については、書籍が出版されています。次の 3 冊が役立ちます。

プロセスとシステムの性能

表 24-1 に、プロセスに関連する用語を示します。

表 24-1 プロセスに関連する用語

用語 

説明 

プロセス 

実行中のプログラムの実体 

軽量プロセス (LWP) 

仮想 CPU または実行資源。LWP は、利用できる CPU 資源をスケジュールクラスと優先順位に基づいて使用するように、カーネルによってスケジュールされる。LWP には、メモリーに常駐する情報が入ったカーネルスレッドと、スワップ可能な情報が入った LWP が含まれる 

アプリケーションスレッド 

ユーザーのアドレス空間内で独立して実行できる別個のスタックを持った一連の命令。LWP の最上部で多重化できる 

1 つのプロセスは、複数の LWP と複数のアプリケーションスレッドで構成できます。カーネルはカーネルスレッド構造をスケジュールします。この構造は、SunOS 5.x 環境内をスケジュールする実体です。表 24-2 に各種プロセス構造体を示します。

表 24-2 プロセス構造体

構造体 

説明 

proc

プロセス全体に関連し、メインメモリーに常駐しなければならない情報が入っている 

kthread

1 つの LWP に関連し、メインメモリーに常駐しなければならない情報が入っている 

user

スワップ可能な、プロセス単位の情報が入っている 

klwp

スワップ可能な、LWP プロセス単位の情報が入っている 

図 24-1 に、これらの構造体の関係を示します。

図 24-1 プロセス構造体

Graphic

プロセス内のすべてのスレッドは、ほとんどのプロセス資源にアクセスできます。ほとんどすべてのプロセスの仮想メモリーが共有されます。あるスレッドが共有データを変更すると、その変更結果をプロセス内の他のスレッドが利用できます。

プロセスコマンド

表 24-3 に、プロセスを管理するためのコマンドとその説明を示します。

表 24-3 プロセスを管理するためのコマンド

使用するコマンド 

目的 

ps

システム上のアクティブなプロセスの状態をチェックする。また、プロセスについての詳細な情報を表示する 

dispadmin

デフォルトのスケジューリングポリシーをリストする 

priocntl

プロセスに優先順位クラスを割り当てて、プロセスの優先度を管理する 

nice

タイムシェアリングプロセスの優先度を変更する 

別の機能を使うと、プロセッサセットに関してプロセスグループを制御できます。プロセッサセットを使用するということは、プロセスグループを 1 つのプロセサだけではなく、プロセッサグループにバインドできるということです。システム管理者は、/usr/sbin/psrset コマンドを使用することにより、プロセッサセットの作成と管理を制御できます。詳細は、psrset(1M) のマニュアルページを参照してください。

プロセスを管理するためのコマンドの詳細は、第 25 章「プロセスの管理手順」を参照してください。

/proc ファイルシステムとコマンド

/usr/proc/bin ディレクトリ内のプロセスツールを使用すると、/proc にあるプロセスに関して詳細情報を表示できます。/proc ディレクトリは、プロセスファイルシステム (PROCFS) とも呼ばれます。アクティブなプロセスのイメージは、そのプロセス ID 番号を使って /proc に格納されます。

プロセスツールは ps コマンドの一部のオプションに似ていますが、このツールから提供される出力の方が詳細です。一般に、プロセスツールには次の機能があります。

表 24-4 に、新しい /usr/proc/bin ユーティリティを示します。

表 24-4 プロセスツール

ツールの種類 

ツールの機能または表示内容 

/usr/proc/bin/pstop pid

プロセスを停止する 

/usr/proc/bin/prun pid

プロセスを再開する 

/usr/proc/bin/ptime pid

microstate アカウントを使用してプロセスの時間を測定する

/usr/proc/bin/pwait [-v] pid

指定されたプロセスが終了するのを待つ 

 

プロセスの詳細を表示するツール 

/usr/proc/bin/pcred pid

資格 

/usr/proc/bin/pfiles pid

開いたファイルの fstat 情報と fcntl 情報

/usr/proc/bin/pflags pid

/proc の追跡フラグ、保留シグナルと保持シグナル、lwp ごとの他の状態情報

/usr/proc/bin/pldd pid

各プロセスにリンクされた動的ライブラリ 

/usr/proc/bin/pmap pid

アドレス空間マップ 

/usr/proc/bin/psig pid

シグナルの動作 

/usr/proc/bin/pstack pid

lwp ごとの 16 進数 + 記号スタックトレース

/usr/proc/bin/ptree pid

指定した pid が入ったプロセスツリー

/usr/proc/bin/pwdx pid

現在の作業ディレクトリ 

上記の表 24-4 で、pid はプロセス識別番号です。この番号は ps -ef コマンドを使用して表示できます。

第 25 章「プロセスの管理手順」では、プロセスツールコマンドを使用して、プロセスの詳細表示や、プロセスの起動および終了などのシステム管理作業を実行する方法を説明します。プロセスツールのさらに詳細な説明は、proc(1) のマニュアルページを参照してください。

プロセスが無限ループ内でトラップされた場合や、実行時間が長すぎる場合は、プロセスを終了 (Kill) できます。pkill コマンドを使用してプロセスを終了する方法については、第 25 章「プロセスの管理手順」を参照してください。

以前のフラットな /proc ファイルシステムは、状態情報と制御機能のためのサブディレクトリが追加されたディレクトリ階層に再構築されました。

/proc ファイルシステムは、ウォッチポイント機能も提供します。この機能は、プロセスのアドレス領域の個々のページの読み取り権または書き込み権を再マップするために使用されます。この機能は制限がなく、MT-安全です。

新しい /proc ファイル構造は、古い /proc インターフェースと完全なバイナリ互換を提供します。ただし、新しいウォッチポイント機能は、古いインターフェースでは使用できません。

デバッグ用ツールは、/proc の新しいウォッチポイント機能を使用するように変更されています。つまり、ウォッチポイントプロセス全体がより高速になったためです。

dbx デバッグ用ツールを使用してウォッチポイントを設定するときの次の制限は取り除かれました。

詳細は、proc(4)core(4)、および adb(1) のマニュアルページを参照してください。

プロセスのスケジューリングクラスと優先レベル

プロセスには、スケジュールクラスと優先レベルに従って CPU 時間が割り当てられます。デフォルトでは、Solaris オペレーティング環境にはリアルタイム、システム、タイムシェアリング、対話型という 4 つのプロセス優先レベルがあります。

スケジュールポリシーによって、各プロセスの実行順序が決まります。

リアルタイムプロセスの優先順位は固定されています。リアルタイムプロセスを実行する準備ができている場合は、システムプロセスやタイムシェアリングプロセスを実行できません。

システムプロセスの優先順位は、開始時にカーネルによって確立され固定されています。システムクラス内のプロセスはカーネルによって制御されるので変更できません。

タイムシェアリングプロセスと対話型プロセスは、その優先順位を動的に割り当てるスケジューラによって制御されます。このクラスのプロセスの優先順位は操作できます。

ディスク入出力とシステム性能

ディスクは、コンピュータシステムで使用されるデータと命令を格納します。ディスクアクセス動作と端末の動作を調べることにより、システムがどの程度効率的に、ディスク上のデータにアクセスしているかが検査できます。ディスク動作に関する統計情報を表示する iostat コマンドと sar コマンドについては、第 26 章「性能の監視手順」を参照してください。ディスク容量の管理と割り当て、およびディスクをスライスに分割する方法については、『Solaris のシステム管理 (第 1 巻)』の「ディスク管理の概要」を参照してください。

CPU が入出力の完了を待っている場合は、ディスクが低速化していることになります。ディスクの低速化を防ぐには、次のような方法があります。

UFS 直接入出力

直接入出力は、バルク入出力操作を向上させます。バルク入出力操作とは、大量のバッファサイズを使用して、大きなファイル (物理メモリーより大きなファイル) を転送することです。

バルク入出力操作の例は、衛星から転送されるデータのダウンロードです。これは、大量のデータをファイルに書き込みます。直接入出力データは、オペレーティングシステムのページキャッシング機構のオーバーヘッドを使用しないで、メモリーから読み取られたり、書き込まれたりします。

直接入出力の起動は、場合によっては制限があります。入出力が要求されたファイルがすでに他のアプリケーションによってマップされていた場合、そのページは直接入出力操作が始まる前に、メモリーからフラッシュされなければなりません。

詳細は、directio(3C) のマニュアルページを参照してください。

mount コマンドに forcedirectio オプションを指定しても、ファイルシステムについて直接入出力を使用できます。ファイルシステムが大量の順次データを転送する場合のみ、直接入出力の効果が性能に現れます。

このオプションでファイルシステムをマウントすると、データはユーザーのアドレス空間とディスク間を直接転送されます。ファイルシステムに対して直接入出力を強制的に使用できない場合、ユーザーのアドレス空間とディスクとの間で転送されるデータは、まずカーネルアドレス空間に入れられます。

UFS ファイルシステムにおけるデフォルトの動作は、非強制直接入出力です。詳細は、mount_ufs(1M) のマニュアルページを参照してください。

UFS ファイルシステムに対し強制直接入出力を使用する方法

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

  2. forcedirectio マウントオプションを指定してファイルシステムをマウントします。

    # mount -F ufs -o forcedirectio /dev/dsk/c0t3d0s7 /datab
    
  3. マウントされたファイルシステムで強制直接入出力が使用できるか確認します。

    # mount
                        .
                        .
                        .
    /export/home on /dev/dsk/c0t3d0s7 forcedirectio/setuid/read/write/
    largefiles on Tue Jun 16 10:25:05 1998

メモリーとシステム性能

システム上で実行中のプログラムに、使用可能な容量よりも大きな物理メモリーが必要になると、性能が低下します。この問題が発生すると、オペレーティングシステムはページングとスワッピングを開始し、ディスクと CPU のオーバーヘッドを増加させます。

ページングでは、最近参照されていないページが使用可能なメモリーページの空きリストに移動されます。カーネルのほとんどの部分はメインメモリーに常駐しており、ページングできません。

スワッピングは、ページングデーモンがメモリーの需要に追いつけなくなると発生します。スワッパは、休眠中または停止した軽量プロセス (LWP) をスワップアウトしようとします。休眠中または停止した LWP がなければ、スワッパは実行可能プロセスをスワップアウトします。そして優先順位に基づいて LWP をスワップバックします。スワッパは実行可能なプロセスをメモリーに戻します。ページのページングとスワッピングが発生すると、ディスクと CPU のオーバーヘッドが増加します。

スワップ空間

スワップ空間は、実際にはスワッピングに使用されるファイルシステムです。スワップ空間のサイズは、アプリケーションの要件に基づいて設定する必要があります。購入先にアプリケーションの要件を問い合わせてください。

表 24-5 に、Solaris のインストールプログラムがデフォルトのスワップ空間のサイズ設定に使用する値を示します。スワップ空間のサイズを設定する方法がわからない場合は、これらのデフォルトのスワップサイズから始めるとよいでしょう。

表 24-5 デフォルトのスワップサイズ

物理メモリーのサイズ 

デフォルトのスワップサイズ 

16 〜 64M バイト 

32M バイト 

64 〜 128M バイト 

64M バイト 

128 〜 512M バイト 

128M バイト 

512M バイトを超える場合 

256M バイト 

スワップ空間の管理については、『Solaris のシステム管理 (第 1 巻)』の「追加スワップ空間の構成の手順」を参照してください。

バッファー資源

read システムコールと write システムコール用のバッファーキャッシュは、カーネルアドレス空間内で一定の範囲の仮想アドレスを使用します。1 ページ分のデータがカーネルのアドレス空間に対応づけられ、プロセスが要求したデータ量がプロセスのアドレス空間に物理的にコピーされます。次に、ページはカーネル内で対応づけを解除されます。物理ページは、ページデーモンによって開放されるまでメモリー内に残ります。

これは、少数の入出力集中型プロセスによってメインメモリーが独占されたり、他のプロセスが排除されたりする可能性があることを意味します。メインメモリーの独占を防ぐには、スクリプト内で並列に、または at(1) コマンドを使用して、入出力集中型のプロセスの実行負荷を調整します。プログラマは、mmap(2)madvise(3) を使用して、プログラムが使用していないときに必ずメモリーを開放するように設定できます。

カーネルパラメタとシステム性能

カーネル内の多数の基本的なパラメタ (またはテーブル) は、maxusers パラメタの値から計算されます。テーブルには領域が動的に割り当てられます。ただし、これらのテーブルの最大値を設定して、アプリケーションが大量のメモリーを占めないようにできます。

デフォルトでは、maxusers はシステム上の物理メモリーのメガバイト数と同程度に設定されています。ただし、システムが 1024 を超える maxusers を設定することはありません。maxusers の最大値は 2048 であり、これは /etc/system ファイルを変更して設定できます。

カーネルパラメタについては、第 28 章「カーネルパラメタの調整手順」system(3S) のマニュアルページを参照してください。

表 24-6 のように、maxusers の他にも多数のカーネルパラメタが、システム上の物理メモリーの容量に基づいて動的に割り当てられます。

表 24-6 カーネルパラメタ

カーネルパラメタ 

説明 

ufs_ninode

i ノードテーブルの最大サイズ 

ncsize

ディレクトリ名検索キャッシュのサイズ 

max_nprocs

プロセスの最大サイズ 

ndquot

ディスク割り当て構造体の数 

maxuprc

1 ユーザー ID 当たりのユーザープロセスの最大数 

表 24-7 は、maxusers に割り当てられた値の影響を受けるカーネルパラメタのデフォルト設定を示しています。

表 24-7 カーネルパラメタのデフォルト設定

カーネルテーブル 

変数 

デフォルト設定 

i ノード 

ufs_ninode

max_nprocs + 16 + maxusers + 64

名前キャッシュ 

ncsize

max_nprocs + 16 + maxusers + 64

プロセス 

max_nprocs

10 + 16 * maxusers

割り当てテーブル 

ndquot

(maxusers * NMOUNT) / 4 + max_nprocs

ユーザープロセス 

maxuprc

max_nprocs - 5

カーネルパラメタの説明とデフォルト値を変更する方法については、 第 28 章「カーネルパラメタの調整手順」を参照してください。

性能の監視

コンピュータの稼働中は、各種のシステム動作を追跡するためにオペレーティングシステムのカウンタが増分されます。追跡されるシステム動作は次のとおりです。

監視ツール

Solaris 7 システムソフトウェアには、システム性能を追跡できるように複数のツールが提供されています。次のような監視ツールがあります。

表 24-8 性能監視ツール

ツール 

目的 

参照先 

sar ユーティリティと sadc ユーティリティ

システム動作データを収集および報告する 

第 26 章「性能の監視手順」

ps コマンド

アクティブなコマンドについての情報を表示する 

第 25 章「プロセスの管理手順」

パフォーマンスメーター 

ネットワーク上のシステムの状態をグラフィカルに表示する 

第 26 章「性能の監視手順」

vmstat コマンドと iostat コマンド

システム動作データの要約。仮想メモリーの統計、ディスクの使用率、CPU の動作など 

第 26 章「性能の監視手順」

swap コマンド

ユーザーのシステムで利用可能なスワップ領域についての情報を表示する 

Solaris のシステム管理 (第 1 巻)』の「追加スワップ空間の構成の手順」

netstat コマンドと nfsstat コマンド

ネットワーク性能についての情報を表示する 

第 27 章「ネットワーク性能の監視手順」

Solstice システムモニター (SyMON) 

UltraTM EnterpriseTM 3000、4000、5000、および 6000 のシステム上で、システム動作データを収集する

Solstice SyMON 1.6 User's Guide