Tru64 UNIX オペレーティング・システムは,ブート時にリソースの限界値を設定します。 この限界値によって,システム・テーブル,仮想アドレス空間,および他のシステム・リソースのサイズが制御されます。
大半の構成では,省略時のシステム・リソース限界値で十分です。 ただし,システムのメモリ容量が大きい場合や,大量のリソースを必要とするプログラムやメモリ・サイズの大きいアプリケーションを実行する場合は,サブシステム属性を変更して,システムの限界値を大きくしなければならいこともあります。
この章では,システム・リソースの割り当てと,次のシステム・ワイドの限界値を大きくする方法について説明します。
プロセスの限界値 (8.1 節)
プログラム・サイズの限界値 (8.2 節)
アドレス空間の限界値 (8.3 節)
プロセス間通信 (IPC) の限界値 (8.4 節)
オープン・ファイルの限界値 (8.5 節)
Aurema ARMTech Suite (8.6 節)
システム・ワイドの限界値を変更する代わりに,setrlimit
関数を使用して,特定のプロセスとその子プロセスが使用するシステム・リソースを制御できます。
詳細は,
setrlimit
(2)8.1 プロセスの限界値のチューニング
Tru64 UNIX は,大半の構成に適した,プロセスの限界値を使用します。 ただし,メモリを多用するアプリケーションの場合や,大規模メモリ (LVM) システムやインターネット・サーバ (Web サーバ,プロキシ・サーバ,ファイアウォール・サーバ,ゲートウェイ・サーバなど) がある場合は,プロセスの限界値を大きくしなければならないこともあります。 プロセスの限界値を大きくするとシステムの固定メモリの量も増えるため,限界値を大きくするのは,システムが必要とするリソースが不足する場合だけにしてください。
以降の項では,限界値を大きくする方法について説明します。
proc
サブシステム属性の詳細は,
sys_attrs_proc
(5)8.1.1 システム・テーブルとデータ構造体を大きくする
システムのアルゴリズムでは,proc
サブシステムの
maxusers
属性によって,システム・プロセス・テーブルなどの各種のシステム・データ構造体およびシステム・テーブルのサイズが決定されます。
このテーブルによって,同時に実行できるアクティブ・プロセスの数が決まります。
注意
maxusers
属性の値は,システムの限界値を設定するサブシステム属性 (max_proc_per_user
,max_threads_per_user
,min_free_vnodes
,およびname_cache_hash_size
属性) の省略時の値を設定するために使用されます。
性能上の利点と欠点
maxusers
の値を大きくすると,プロセスが利用できるシステム・リソースが増えます。
ただし,ユーザ用のリソースを増やすと,固定メモリの量も増えます。
maxusers
属性は,システムをリブートすることなく変更できます。
チューニングするかどうかの判断
大規模メモリ・システムやインターネット・サーバがある場合や,システムがリソース不足になっている場合は,maxusers
属性の値を大きくします。
リソース不足は,No more processes
,Out of processes
,または
pid table is full
というメッセージで示されます。
推奨値
省略時の
maxusers
属性の値は,システムのメモリ容量によって異なります。
表 8-1
に,各メモリ容量での
maxusers
属性の省略時の値を示します。
表 8-1: maxusers 属性の省略時の値
メモリ・サイズ | maxusers の値 |
256 MB 以下 | 128 |
257 〜 512 MB | 256 |
513 〜 1024 MB | 512 |
1025 〜 2048 MB | 1024 |
2049 〜 4096 MB | 2048 |
4097 MB 以上 | 2048 |
maxusers
属性の最適値を判断するには,性能が改善されるまで,省略時の値を 2 倍にしていきます。
インターネット・サーバがある場合は,maxusers
属性の値を 2048 に増やします。
maxusers
属性の値は,2048 より大きくしないようにしてください。
maxusers
の値を大きくする場合は,max_vnodes
属性の値もそれに比例して大きくしてください (8.5.1 項を参照)。
maxusers
属性は,省略時の値より小さくしないでください。
カーネル・サブシステム属性の変更については,第 3 章
を参照してください。
8.1.2 プロセスの最大数を増やす
proc
サブシステムの
max_proc_per_user
属性は,一時点で各ユーザ (スーパユーザを除く) に割り当てることができるプロセスの最大数を指定します。
性能上の利点と欠点
max_proc_per_user
の値を大きくすると,プロセスが利用できるシステム・リソースが増えます。
チューニングするかどうかの判断
システムがプロセス不足になっている場合や,大規模メモリ (VLM) システムやインターネット・サーバがある場合は,max_proc_per_user
属性の値を大きくしてください。
max_proc_per_user
属性の値を変更したときには,システムのリブートが必要です。
推奨値
max_proc_per_user
属性の省略時の値は,maxusers
属性によって決まります。
プロセスの最大数を大きくする場合は,maxusers
属性の値を大きくします (8.1.1 項
参照)。
または,max_proc_per_user
属性の値に,システム上で同時に実行されるプロセスの最大数以上の値を指定することもできます。
Web サーバがある場合は,このプロセスには CGI プロセスも含まれます。
インターネット・サーバがある場合は,max_proc_per_user
属性の値を 512 に増やします。
max_proc_per_user
属性の値に 0 を指定すると,プロセス数は制限されません。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.1.3 スレッドの最大数を増やす
proc
サブシステムの
max_threads_per_user
属性は,一時点で各ユーザ (スーパユーザを除く) に割り当てることができるスレッドの最大数を指定します。
性能上の利点と欠点
max_threads_per_user
の値を大きくすると,プロセスが利用できるシステム・リソースが増えます。
max_proc_per_user
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
システムがスレッド不足になっている場合や,VLM システムやインターネット・サーバがある場合は,max_threads_per_user
属性の値を大きくしてください。
推奨値
max_threads_per_user
属性の省略時の値は,maxusers
属性によって決まります。
スレッドの最大数を大きくしたいときには,maxusers
属性の値を変更します (8.1.1 項
参照)。
または,max_threads_per_user
属性の値に,システム上で同時に実行されるスレッドの最大数以上の値を指定することもできます。
たとえば,max_threads_per_user
属性の値を 512 に増やすことができます。
メモリが十分にある負荷の高いサーバや,インターネット・サーバでは,max_threads_per_user
属性の値を 4096 に増やします。
max_threads_per_user
属性の値が 0 の場合,スレッド数の限界値がなくなります。
max_threads_per_user
属性の値に 0 を指定すると,スレッド数は制限されません。
カーネル・サブシステム属性の変更については,第 3 章
を参照してください。
8.2 プログラム・サイズの限界値のチューニング
大規模なアプリケーションを実行する場合は,プログラム・サイズの限界値を制御する
proc
サブシステムの属性値を大きくしなければならないことがあります。
大規模なプログラムや大規模メモリ・プロセスは,この属性の省略時の値を変更しないと動作しないことがあります。
以降の項では,次の作業を実行する方法について説明します。
proc
サブシステム属性についての詳細は,
sys_attrs_proc
(5)8.2.1 ユーザ・プロセス・スタックのサイズを大きくする
proc
サブシステムの
per_proc_stack_size
属性および
max_per_proc_stack_size
属性は,ユーザ・プロセス・スタックの省略時のサイズと最大サイズを指定します。
大規模なプログラムや大規模メモリ・プロセスは,これらの属性の省略時の値を変更しないと動作しないことがあります。
性能上の利点と欠点
ユーザ・プロセス・スタックの省略時のサイズと最大サイズを大きくすると,大規模なアプリケーションを実行できるようになります。
per_proc_stack_size
属性と
max_per_proc_stack_size
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
大規模なプログラムまたは大規模メモリ・プロセスを実行している場合や,Cannot grow stack
というメッセージが表示された場合は,ユーザ・プロセス・スタックの省略時のサイズと最大サイズを大きくします。
推奨値
per_proc_stack_size
属性の省略時の値は,8,388,608 バイトです。
max_per_proc_stack_size
属性の省略時の値は,33,554,432 バイトです。
アドレス空間の限界値よりも十分に小さい値を選択してください。
詳細は
8.3 節を参照してください。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.2.2 ユーザ・プロセスのデータ・セグメント・サイズを大きくする
proc
サブシステムの
per_proc_data_size
属性および
max_per_proc_data_size
属性は,ユーザ・プロセスのデータ・セグメント・サイズの省略時の値および最大値を指定します。
大規模なプログラムや大規模メモリ・プロセスでは,これらの属性の省略時の値を変更しないと動作しないことがあります。
性能上の利点と欠点
ユーザ・プロセスのデータ・セグメント・サイズの省略時の値および最大値を大きくすると,大規模なアプリケーションを実行できるようになります。
per_proc_data_size
属性と
max_per_proc_data_size
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
大規模なプログラムや大規模メモリ・プロセスを実行する場合,Out of process memory
というメッセージが表示された場合,またはシステムがインターネット・サーバの場合には,per_proc_data_size
属性および
max_per_proc_data_size
属性の値を大きくしなければならないことがあります。
推奨値
per_proc_data_size
の省略時の値は,134,217,728 バイトです。
max_per_proc_data_size
の省略時の値は,1 GB (1,073,741,824 バイト) です。
アドレス空間の限界値よりも十分に小さい値を選択してください。
8.3 節を参照してください。
インターネット・サーバの場合は,max_per_proc_data_size
属性の値を大きくして,10 GB (10,737,418,240 バイト) にします。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.3 アドレス空間の限界値のチューニング
proc
サブシステムの属性
per_proc_address_space
および
max_per_proc_address_space
は,ユーザ・プロセスのアドレス空間の大きさ (有効な仮想領域の数) について,省略時の値および最大値を指定します。
性能上の利点と欠点
アドレス空間の限界値を大きくすると,大規模なプログラムを実行できるようになり,メモリを多用するアプリケーションの性能が向上します。 ただし,メモリの使用量が少し増加します。
per_proc_address_space
属性と
max_per_proc_address_space
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
メモリを多用するプロセスを実行する場合や,システムがインターネット・サーバの場合は,アドレス空間の限界値を大きくしてください。
推奨値
per_proc_address_space
属性および
max_per_proc_address_space
属性の省略時の値は,4 GB (4,294,967,296 バイト) です。
インターネット・サーバの場合は,max_per_proc_address_space
属性の値を大きくして,10 GB (10,737,418,240 バイト) にします。
カーネル属性の変更については,第 3 章を参照してください。
8.4 プロセス間通信の限界値のチューニング
プロセス間通信 (IPC) とは,複数のプロセス間で情報を交換することです。 IPC の例としては,メッセージ,共用メモリ,セマフォ,パイプ,シグナル,プロセスのトレース,およびネットワークを通して他プロセスと通信するプロセスがあります。
以降の項では,以下の方法について説明します。
System V メッセージの最大サイズを大きくする (8.4.1 項)
System V メッセージ・キューの最大サイズを大きくする (8.4.2 項)
System V キューのメッセージの最大サイズを大きくする (8.4.3 項)
System V 共用メモリ領域の最大サイズを大きくする (8.4.4 項)
プロセスにアタッチできる共用メモリ領域の最大数を増やす (8.4.5 項)
共用ページ・テーブルの共用を変更する (8.4.6 項)
Tru64 UNIX オペレーティング・システムには,次のプロセス間通信機能があります。
シグナル -- 『Guide to Realtime Programming』を参照してください。
ソケット -- 『ネットワーク・プログラミング・ガイド』を参照してください。
ストリーム -- 『Programmer's Guide: STREAMS』を参照してください。
XTI (X/Open Transport Interface) -- 『ネットワーク・プログラミング・ガイド』を参照してください。
メモリを多用するプロセスを実行している場合は,一部の
ipc
サブシステム属性の値を大きくしなければならないことがあります。
表 8-2に,IPC の限界値を大きくするためのガイドラインと,性能上の利点および欠点のリストを示します。
表 8-2: IPC の限界値のチューニング・ガイドライン
ガイドライン | 性能上の利点 | 欠点 |
System V メッセージの最大サイズを大きくする (8.4.1 項)。 | System V のメッセージ・サイズを大きくして効果のあるアプリケーションでは,性能が改善される可能性がある。 | メモリを少し消費する。 |
System V のメッセージ・キューの最大バイト数を大きくする (8.4.2 項)。 | System V のメッセージ・キューを大きくして効果のあるアプリケーションでは,性能が改善される可能性がある。 | メモリを少し消費する。 |
System V キュー上の処理待ちメッセージの最大数を増やす (8.4.3 項)。 | 処理待ちメッセージの数を多くできて効果のあるアプリケーションでは,性能が改善される可能性がある。 | メモリを少し消費する。 |
System V の共用メモリ領域の最大サイズを大きくする (8.4.4 項)。 | System V の共用メモリ領域を大きくして効果のある,メモリを多用するアプリケーションでは,性能が改善される可能性がある。 | メモリを消費する。 |
プロセスにアタッチできる共用メモリ領域の最大数を増やす (8.4.5 項)。 | 多数の共用メモリ領域にアタッチしているアプリケーションの性能が改善されることがある。 | メモリを消費することがある。 |
共用ページ・テーブルの限界値を変更する (8.4.6 項)。 | メモリを多用するシステムや,VLM システムが,効率的に動作するようになる。 | メモリを消費することがある。 |
以降の項では,一部の System V 属性のチューニング方法について説明します。
その他の IPC
サブシステム属性については,
sys_attrs_ipc
(5)8.4.1 System V メッセージの最大サイズを大きくする
ipc
サブシステムの
msg_max
属性は,アプリケーションが受信できる System V メッセージの最大サイズを指定します。
性能上の利点と欠点
msg_max
属性の値を大きくすると,System V のメッセージ・サイズを省略時の値よりも大きくして効果のあるアプリケーションでは,性能が改善される可能性があります。
ただし,この値を大きくすると,メモリを消費します。
msg_max
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
System V の省略時のメッセージ最大サイズを 8192 バイトより大きい値にして効果のあるアプリケーションの場合は,msg_max
属性の値を大きくします。
推奨値
msg_max
属性の省略時の値は,8192 バイト (1 ページ) です。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.4.2 System V のメッセージ・キューの最大サイズを大きくする
ipc
サブシステムの
msg_mnb
属性は,System V のメッセージ・キューに保持できる最大バイト数を指定します。
キュー内のバイト数が
msg_mnb
属性で指定された限界値を超えている場合,プロセスはそのキューへメッセージを送信できません。
この限界値に達した場合,プロセスはスリープし,この状態が解除されるまで待ちます。
性能上の利点と欠点
msg_mnb
属性の値を大きくすると,System V のメッセージ・キューを省略時の値よりも大きくして効果のあるアプリケーションでは,性能が改善される可能性があります。
ただし,この値を大きくすると,メモリを消費します。
msg_mnb
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
IPC 機能の使用状況は,ipcs -a
コマンド
(
ipcs
(1)推奨値
msg_mnb
属性の省略時の値は,16,384 バイトです。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.4.3 System V のキュー上のメッセージ最大数を増やす
ipc
サブシステムの
msg_tql
属性は,System V のメッセージ・キュー上に存在できるメッセージの最大数 (システム内に存在できる処理待ちメッセージの総数) を指定します。
性能上の利点と欠点
msg_tql
属性の値を大きくすると,処理待ちメッセージの数を省略時の値よりも大きくして効果のあるアプリケーションの性能が改善される可能性があります。
ただし,この属性の値を大きくすると,メモリを消費します。
msg_tql
属性の値を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
処理待ちメッセージの最大数を 40 よりも大きい値にして効果のあるアプリケーションの場合は,msg_tql
の値を大きくしてください。
IPC 機能の使用状況は,ipcs -a
コマンド
(
ipcs
(1)推奨値
msg_tql
の省略時の値は 40 です。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.4.4 System V の共用メモリ領域の最大サイズを大きくする
ipc
サブシステムの
shm_max
属性は,System V の共用メモリ領域 1 個の最大サイズを指定します。
性能上の利点と欠点
shm_max
属性の値を大きくすると,System V の共用メモリ領域を大きくして効果のある,メモリを多用するアプリケーションの性能が改善される可能性があります。
ただし,shm_max
属性の値を大きくすると,メモリの使用量が増加します。
shm_max
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
メモリを多用するアプリケーションで,System V の共用メモリ領域を省略時の値の 512 ページよりも大きくして効果がある場合は,shm_max
属性の値を大きくしてください。
推奨値
shm_max
属性の省略時の値は,4,194,304 バイト (512 ページ) です。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.4.5 1 つのプロセスにアタッチできる共用メモリ領域の最大数を増やす
ipc
サブシステムの
shm_seg
属性は,1 つのプロセスに同時にアタッチできる System V 共用メモリ領域の最大数を指定します。
設計段階で,共用メモリの代わりにスレッドを使用すると性能が向上するかどうかを考慮してください。
性能上の利点と欠点
1 つのプロセスにアタッチできる System V 共用メモリ領域の数を増やすと,多数の共用メモリ領域をアタッチするアプリケーションの性能が改善される可能性があります。
shm_seg
属性の値を大きくすると,プロセスが多数の共用メモリ領域をアタッチしたときに,メモリを消費します。
shm_seg
属性の値を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
プロセスが限界値を超えて共用メモリ領域をアタッチしようとした (shmat
関数が
EMFILE
エラーを返却する) 場合は,shm_seg
属性の値を大きくしてください。
推奨値
shm_seg
の省略時の値は 32 です。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.4.6 共用ページ・テーブルの共用を変更する
shmget
関数で作成する System V 共用メモリ・セグメントのサイズが
ipc
サブシステムの
ssm_threshold
属性の値以上の場合,第 3 レベルのページ・テーブル共用が発生します。
性能上の利点と欠点
共用ページ・テーブルの限界値を大きくすると,共用ページ・テーブルの使用は,8 MB を超える共用メモリ・セグメントを作成するアプリケーションに制限されます。 ただし,この値を大きくすると,メモリの使用量が増えます。
アプリケーションが共用ページ・テーブルを使用できない場合は,ページ・テーブル共用を無効にできます。
ssm_threshold
属性は,システムをリブートすることなく変更できます。
チューニングするかどうかの判断
ページ・テーブル共用の使用を,8 MB を超える共用メモリ・セグメントを作成するアプリケーションに制限したい場合は,ssm_threshold
属性の値を大きくしてください。
境界合わせの制限のためにアプリケーションが共用ページ・テーブルを使用できない場合は,ページ・テーブル共用を無効にできます。
推奨値
ssm_threshold
属性の省略時の値は,8 MB (8,388,608 バイト) です。
ssm_threshold
属性に 0 を設定すると,セグメント化共用メモリの使用が無効になります。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.5 オープン・ファイルの限界値のチューニング
proc
サブシステム属性の詳細は,
sys_attrs_proc
(5)8.5.1 オープン・ファイルの最大数を増やす
オープン・ファイル用のカーネル・データ構造体のことを vnode といいます。 この構造体は,すべてのファイル・システムで使用されます。 vnode の数で,オープン・ファイルの数が決まります。 vnode の割り当てと割り当て解除は,オペレーティング・システムが動的に行います。
vfs
サブシステムの
max_vnodes
属性は,常にシステム内のオープン・ファイルの最大数以上である,vnode キャッシュのサイズを指定します。
オープン・ファイルの最大数を増やすには,この属性を省略時の値より大きくしてください。
この作業は,proc
サブシステムの
maxusers
属性値を大きくしても実行できます。
詳細は
8.1 節を参照してください。
性能上の利点と欠点
vnode キャッシュのサイズを大きくすると,多数のオープン・ファイルを必要とするアプリケーションの性能が改善されます。 ただし,このサイズを大きくすると,メモリを消費します。
max_vnodes
属性の値は,システムをリブートすることなく変更できます。
チューニングするかどうかの判断
アプリケーションが多数のオープン・ファイルを必要とする場合や,vnode 不足を示すメッセージが表示された場合は,max_vnodes
属性を省略時の値より大きくします。
推奨値
max_vnodes
属性の省略時の値は,メモリの 5 パーセントです。
カーネル・サブシステム属性の変更については,第 3 章を参照してください。
8.5.2 オープン・ファイル記述子の最大数を増やす
すべてのプロセスまたは特定のプロセスについて,オープン・ファイル記述子の最大数を増やすことができます。
proc
サブシステムの
open_max_soft
属性および
open_max_hard
属性は,プロセスごとのオープン・ファイル記述子のシステム・ワイドの最大数を制御します。
オープン・ファイル記述子の限界値により,割り当ての暴走 (エラーのために抜け出せないループ内での割り当てなど) で,利用可能なファイル記述子がすべて使われてしまうのを防ぐことができます。
プロセスが
open_max_soft
限界値に達した場合,警告メッセージが表示されます。
プロセスが
open_max_hard
限界値に達した場合,プロセスは停止させられます。
性能上の利点と欠点
多数のファイルをオープンするアプリケーションの性能が改善されます。
open_max_soft
属性および
open_max_hard
属性を変更したときには,システムのリブートが必要です。
チューニングするかどうかの判断
アプリケーションが多数のオープン・ファイルを必要とする場合は,open_max_soft
属性および
open_max_hard
属性の値を大きくすることによって,オープン・ファイル記述子の限界値を大きくできます。
ただし,オープン・ファイル記述子の限界値を大きくすると,割り当ての暴走の原因となることがあります。
推奨値
open_max_soft
属性および
open_max_hard
属性の省略時の値は,4,096 です。
この値は,/etc/sysconfigtab
ファイルに設定できる,システム・ワイドな値の最大値です。
多数のファイルをオープンするアプリケーションがある場合は,システム・ワイドな限界値を大きくするのではなく,そのアプリケーションのオープン・ファイル限界値だけを大きくすることができます。 特定のアプリケーションで拡張 (64 KB) ファイル記述子を使用可能にするには,次の手順に従います。
setsysinfo
システム・コールの
SSI_FD_NEWMAX
操作パラメータに 1 を設定します。
これにより
utask
ビットが設定され,最大 65,536 (64 KB) のオープン・ファイル記述子が使用可能になり,プロセスのハード・ファイル限界値が 64 KB に引き上げられます。
この設定は,すべての子プロセスに引き継がれます。
詳細は,
setsysinfo
(2)
プロセスのファイル記述子のソフト限界値に,4,096 (省略時の値) を超える値を設定します。
この設定を行うには,次のコードに示すように,setrlimit
関数を使用します。
# include <sys/resource.h> struct rlimit *rlp; rlp->rlim_cur = 6000; rlp->rlim_max = 6000; setrlimit(RLIMIT_NOFILE, rlp);
この設定は,すべての子プロセスに引き継がれます。
詳細は,
setrlimit
(2)
このステップは,select
関数の
fd_set
パラメータを使用するアプリケーションの場合だけ必要です。
このパラメータは,入出力記述子セット (および,FD_CLR
マクロ,FD_ISSET
マクロ,FD_SET
マクロ,または
FD_ZERO
マクロ) を指し,入出力記述子セットを変更できます。
この条件を満たしている場合は,次の 2 つの手順 (ファイル記述子の最大値の静的定義を有効にする手順または動的定義を有効にする手順) のいずれかを使用できます。
静的な定義:
FD_SETSIZE
に最大値 65,536 を指定して,<sys/select.h>
ヘッダ・ファイル内の
FD_SETSIZE
の省略時の値 4,096 を無効にします。
この値は次のように,コード内で
<sys/time.h>
ヘッダ・ファイル (<sys/select.h>
ヘッダ・ファイルをインクルードする) をインクルードする前に指定しなければなりません。
# define FD_SETSIZE 65536 # include <sys/time.h>
この設定は,子プロセスには継承されません。
このため,64 KB ファイル記述子を必要とする各子プロセスのコードに,FD_SETSIZE
を明示的に設定しなければなりません。
動的な定義:
静的に定義される
fd_set
構造体を使用する代わりに,fd_set
ポインタを
malloc
関数とともに使用することができます。
この方法では,ファイル記述子の最大数が将来変更になっても,互換性が保たれます。
例を次に示します。
fd_set *fdp; fdp = (fd_set *) malloc( (fds_howmany(max_fds,FD_NFDBITS))*sizeof(fd_mask));
max_fds
の値は,操作するファイル記述子の数です。
ファイル記述子のソフト限界値を,この値に指定することをお勧めします。
他のキーワードはすべて,<sys/select.h>
ヘッダ・ファイルで定義されています。
この方法を選択した場合のコードを次に示します。
# include <sys/time.h> # include <sys/resource.h> my_program() { fd_set *fdp; struct rlimit rlim; int max_fds; getrlimit(RLIMIT_NOFILE, &rlim;); max_fds = rlim.rlim_cur; fdp = (fd_set *) malloc( (fds_howmany(max_fds,FD_NFDBITS))*sizeof(fd_mask)); FD_SET(2, fdp); for (;;) { switch(select(max_fds, (fd_set *)0, fdp, (fd_set *)0, struct timeval *)0)) { ... }
また,vfs
サブシステムの
max_vnodes
属性には,記述子を多数必要とするアプリケーションに合わせて大きな値を設定しなければなりません。
max_vnodes
属性は vnode キャッシュのサイズを指定し,省略時はシステム・メモリの 5 パーセントが設定されます。
詳細は,8.5.1 項を参照してください。
64 KB までのファイル記述子のサポートをアプリケーションで無効にするには,setsysinfo
システム・コールの
SSI_FD_NEWMAX
操作のパラメータに 0 を指定します。
これによって
utask
ビットが無効になり,ハード・ファイル限界値がオープン記述子の省略時の最大値である 4,096 に戻ります。
ただし,プロセスが 4,096 を超えるファイル記述子を使用した場合,setsysinfo
システム・コールは
EINVAL
エラーを返します。
また,呼び出しプロセスのハードまたはソフト限界値が 4,096 を超えていた場合,呼び出しが正常終了すると,この限界値は 4 KB になります。
この設定は,すべての子プロセスに継承されます。
8.6 Aurema ARMTech Suite
Tru64 UNIX では,Aurema の ARMTech (Active Resource Management Technology) ソフトウェア製品スイートをサポートしています。 このソフトウェアは,高度なリソース管理機能を提供しています。 ARMTech スイートを使用すると,Tru64 UNIX のシステム管理者は,ユーザとグループの他に,Web サイトやアプリケーションなど,オペレーティング・システムの多くの構成要素を管理することができます。
armtech
(5)