resource —リソース使用情報
このモジュールは、プログラムによって使用されるシステムリソースを測定および制御するための基本的なメカニズムを提供します。
シンボリック定数は、特定のシステムリソースを指定し、現在のプロセスまたはその子に関する使用情報を要求するために使用されます。
システムコールが失敗すると、 OSError が発生します。
- exception resource.error
OSError の非推奨のエイリアス。
リソース制限
以下に説明する setrlimit()関数を使用して、リソースの使用を制限できます。 各リソースは、ソフト制限とハード制限の2つの制限によって制御されます。 ソフト制限は現在の制限であり、時間の経過とともにプロセスによって増減する可能性があります。 ソフト制限がハード制限を超えることはありません。 ハード制限は、ソフト制限よりも大きい任意の値に下げることができますが、上げることはできません。 (スーパーユーザーの有効なUIDを持つプロセスのみがハード制限を上げることができます。)
制限できる特定のリソースは、システムによって異なります。 これらについては、 getrlimit(2)のマニュアルページで説明されています。 以下にリストされているリソースは、基盤となるオペレーティングシステムがそれらをサポートしている場合にサポートされます。 オペレーティングシステムでチェックまたは制御できないリソースは、これらのプラットフォームのこのモジュールでは定義されていません。
- resource.RLIM_INFINITY
- 無制限のリソースの制限を表すために使用される定数。
- resource.getrlimit(resource)
- リソースの現在のソフト制限とハード制限を持つタプル
(soft, hard)
を返します。 無効なリソースが指定された場合は ValueError を発生させ、基盤となるシステムコールが予期せず失敗した場合は error を発生させます。
- resource.setrlimit(resource, limits)
リソースの消費の新しい制限を設定します。 limits 引数は、新しい制限を記述する2つの整数のタプル
(soft, hard)
である必要があります。 RLIM_INFINITY の値を使用して、無制限の制限を要求できます。無効なリソースが指定された場合、新しいソフト制限がハード制限を超えた場合、またはプロセスがハード制限を引き上げようとした場合、 ValueError が発生します。 そのリソースのハード制限またはシステム制限が無制限でない場合に RLIM_INFINITY の制限を指定すると、 ValueError が発生します。 スーパーユーザーの有効なUIDを持つプロセスは、無制限を含む任意の有効な制限値を要求できますが、要求された制限がシステムによって課された制限を超えると、 ValueError が発生します。
setrlimit
は、基盤となるシステムコールが失敗した場合にも、エラーを発生させる可能性があります。VxWorksは、 RLIMIT_NOFILE の設定のみをサポートします。
- resource.prlimit(pid, resource[, limits])
setrlimit()と getrlimit()を1つの関数に組み合わせ、任意のプロセスのリソース制限の取得と設定をサポートします。 pid が0の場合、呼び出しは現在のプロセスに適用されます。 resource および limits は、 limits がオプションであることを除いて、 setrlimit()と同じ意味です。
limits が指定されていない場合、関数はプロセス pid の resource 制限を返します。 limits を指定すると、プロセスの resource 制限が設定され、以前のリソース制限が返されます。
pid が見つからない場合は ProcessLookupError を発生させ、ユーザーがプロセスの
CAP_SYS_RESOURCE
を持っていない場合は PermissionError を発生させます。バージョン3.4の新機能。
これらのシンボルは、以下で説明する setrlimit()および getrlimit()関数を使用して消費を制御できるリソースを定義します。 これらのシンボルの値は、Cプログラムで使用される定数とまったく同じです。
getrlimit(2)のUnixマニュアルページには、利用可能なリソースがリストされています。 すべてのシステムが同じリソースを示すために同じ記号または同じ値を使用するわけではないことに注意してください。 このモジュールは、プラットフォームの違いを隠そうとはしません—プラットフォームに定義されていないシンボルは、そのプラットフォームのこのモジュールからは利用できません。
- resource.RLIMIT_CORE
- 現在のプロセスが作成できるコアファイルの最大サイズ(バイト単位)。 これにより、プロセスイメージ全体を含めるためにより大きなコアが必要になる場合、部分的なコアファイルが作成される可能性があります。
- resource.RLIMIT_CPU
- プロセスが使用できるプロセッサ時間の最大量(秒単位)。 この制限を超えると、
SIGXCPU
信号がプロセスに送信されます。 (このシグナルをキャッチして何か便利なことをする方法については、 signal モジュールのドキュメントを参照してください。 開いているファイルをディスクにフラッシュします。)
- resource.RLIMIT_FSIZE
- プロセスが作成できるファイルの最大サイズ。
- resource.RLIMIT_DATA
- プロセスのヒープの最大サイズ(バイト単位)。
- resource.RLIMIT_STACK
- 現在のプロセスの呼び出しスタックの最大サイズ(バイト単位)。 これは、マルチスレッドプロセスのメインスレッドのスタックにのみ影響します。
- resource.RLIMIT_RSS
- プロセスで使用できるようにする必要がある常駐セットの最大サイズ。
- resource.RLIMIT_NPROC
- 現在のプロセスが作成できるプロセスの最大数。
- resource.RLIMIT_NOFILE
- 現在のプロセスで開いているファイル記述子の最大数。
- resource.RLIMIT_OFILE
- RLIMIT_NOFILE のBSD名。
- resource.RLIMIT_MEMLOCK
- メモリにロックされる可能性のある最大アドレス空間。
- resource.RLIMIT_VMEM
- プロセスが占有する可能性のあるマップメモリの最大領域。
- resource.RLIMIT_AS
- プロセスが使用できるアドレス空間の最大領域(バイト単位)。
- resource.RLIMIT_MSGQUEUE
POSIXメッセージキューに割り当てることができるバイト数。
バージョン3.4の新機能。
- resource.RLIMIT_NICE
プロセスの適切なレベルの上限(20 --rlim_curとして計算)。
バージョン3.4の新機能。
- resource.RLIMIT_RTPRIO
リアルタイムの優先順位の上限。
バージョン3.4の新機能。
- resource.RLIMIT_RTTIME
プロセスがブロッキングシステムコールを作成せずにリアルタイムスケジューリングで費やすことができるCPU時間の制限時間(マイクロ秒単位)。
バージョン3.4の新機能。
- resource.RLIMIT_SIGPENDING
プロセスがキューに入れることができるシグナルの数。
バージョン3.4の新機能。
- resource.RLIMIT_SBSIZE
このユーザーのソケットバッファー使用量の最大サイズ(バイト単位)。 これにより、このユーザーがいつでも保持できるネットワークメモリの量、つまりmbufの量が制限されます。
バージョン3.4の新機能。
- resource.RLIMIT_SWAP
このユーザーIDのすべてのプロセスによって予約または使用される可能性のあるスワップスペースの最大サイズ(バイト単位)。 この制限は、vm.overcommitsysctlのビット1が設定されている場合にのみ適用されます。 このsysctlの完全な説明については、 Tuning(7)を参照してください。
バージョン3.4の新機能。
- resource.RLIMIT_NPTS
このユーザーIDによって作成される疑似端末の最大数。
バージョン3.4の新機能。
リソースの使用
これらの関数は、リソース使用情報を取得するために使用されます。
- resource.getrusage(who)
この関数は、 who パラメーターで指定されているように、現在のプロセスまたはその子のいずれかによって消費されるリソースを記述するオブジェクトを返します。 who パラメーターは、以下で説明する
RUSAGE_*
定数のいずれかを使用して指定する必要があります。簡単な例:
戻り値のフィールドはそれぞれ、特定のシステムリソースがどのように使用されたかを示します。 実行に費やされた時間は、ユーザーモードまたはプロセスがメインメモリからスワップアウトされた回数です。 一部の値は、内部のクロックティックに依存しています。 プロセスが使用しているメモリの量。
下位互換性のために、戻り値は16要素のタプルとしてもアクセスできます。
戻り値のフィールド
ru_utime
とru_stime
は、それぞれユーザーモードでの実行に費やされた時間とシステムモードでの実行に費やされた時間を表す浮動小数点値です。 残りの値は整数です。 これらの値の詳細については、 geotrusage(2)のマニュアルページを参照してください。 簡単な要約をここに示します。索引
分野
リソース
0
ru_utime
ユーザーモードでの時間(フロート秒)
1
ru_stime
システムモードでの時間(フロート秒)
2
ru_maxrss
常駐セットの最大サイズ
3
ru_ixrss
共有メモリサイズ
4
ru_idrss
非共有メモリサイズ
5
ru_isrss
非共有スタックサイズ
6
ru_minflt
I / Oを必要としないページフォールト
7
ru_majflt
I / Oを必要とするページフォールト
8
ru_nswap
スワップアウトの数
9
ru_inblock
入力操作をブロックする
10
ru_oublock
ブロック出力操作
11
ru_msgsnd
送信されたメッセージ
12
ru_msgrcv
受信したメッセージ
13
ru_nsignals
受信した信号
14
ru_nvcsw
自発的なコンテキストスイッチ
15
ru_nivcsw
非自発的なコンテキストスイッチ
この関数は、無効な who パラメーターが指定された場合、 ValueError を発生させます。 また、異常な状況ではエラー例外が発生する場合があります。
- resource.getpagesize()
- システムページのバイト数を返します。 (これは、ハードウェアのページサイズと同じである必要はありません。)
次のRUSAGE_*
シンボルが getrusage()関数に渡され、どのプロセス情報を提供するかを指定します。
- resource.RUSAGE_SELF
- getrusage()に渡して、呼び出しプロセスによって消費されるリソースを要求します。これは、プロセス内のすべてのスレッドによって使用されるリソースの合計です。
- resource.RUSAGE_CHILDREN
- getrusage()に渡して、終了して待機している呼び出しプロセスの子プロセスによって消費されるリソースを要求します。
- resource.RUSAGE_BOTH
- getrusage()に渡して、現在のプロセスと子プロセスの両方で消費されているリソースを要求します。 すべてのシステムで利用できるとは限りません。
- resource.RUSAGE_THREAD
getrusage()に渡して、現在のスレッドによって消費されているリソースを要求します。 すべてのシステムで利用できるとは限りません。
バージョン3.2の新機能。