Tru64 UNIX 資料一覧

任意のプログラムを実行しようとすると「task_create() failed for pid 81131: max_proc_per_user (=64) exceeded for uid: これ以上プロセスは生成できません」というエラーが出る

2007/8/17更新

対応バージョン: 5.0A

1ユーザあたりの最大プロセス数がシステムの既定値(= max_proc_per_user)を超えた。

大量のプロセスが発生する可能性のあるサーバプログラムなどがある場合はこの値を変更してもよいが、属性値には最大値/最小値があるのでこの範囲内で設定する。

max_proc_per_userが省略された場合、maxusersの値がデフォルトで設定される。

また、max_proc_per_userの値を増やしてもメモリを消費する等のシステムリソースの消費はせず、あくまで最大プロセス数を増やすだけである。

ところで、本事象ではmax_proc_per_userがシステムの既定値を超えているのでまず現在の設定値をみると、

# sysconfig -q proc max_proc_per_user
proc: 
max_proc_per_user = 64

64に設定されているので次にこの属性値の最大値/最小値を調べる。

# sysconfig -Q proc max_proc_per_user
proc:
max_proc_per_user -   type=UINT op=CQ min_val=0 max_val=524287

設定できる値は0〜524287となっている。

最大値は搭載メモリによって変化するのでマシンによって値が変化する。

尚、0を設定すると無制限になる。

またop欄に示されている値はその属性に対して適用できるアクションになっていて以下の種類がある。

C

この属性はサブシステムの初期ロード時にだけ変更可能である。

つまりこの属性はブート時の変更と恒久的な変更だけをサポートしている。

R

この属性は稼働中にチューニングできる。

つまりシステムが現在使用している値を変更できる。

Q

属性の現在の値を表示(照会)できる。

max_proc_per_user属性の場合はop欄がCQなのでサブシステムの初期ロード時にだけ(通常はブート時だけ)値が変更できることになる。

例えばmax_proc_per_userを128に設定する場合は以下の手順で行う。

設定用のスタンザ形式ファイルを用意する。スタンザ形式とは以下のようなもので、サブシステム毎に属性の設定情報を羅列していく。尚、<属性名>の前はタブにする。

<サブシステム名>:
        <属性名> = <属性値>
        <属性名> = <属性値>
                 :

ここではprocサブシステムのmax_proc_per_user属性を128に設定するので以下の内容のファイル(/tmp/hogeとする)を用意する。

proc:
        max_proc_per_user = 128

sysconfigdbコマンドにてこのファイルをシステム設定に組み込む。実際には/etc/sysconfigtabにこのファイルの内容が追加されるのだがこのファイルは直接編集してはいけない。

# sysconfigdb -f /tmp/hoge -a proc

(*) -a(add)オプションは最初だけ指定可能で、いったん/etc/sysconfigtabにこのエントリが追加された後は-u(update)オプションで設定を変更することができる。

マシンリブート

設定が反映されたことを確認する。

# sysconfigdb -l proc
proc:
        max_proc_per_user = 128

# sysconfig -q proc max_proc_per_user
proc:
max_proc_per_user = 128

また、次回ブート時に元の設定に戻ってもよいのであればsysconfig -rにて設定してもよい。

例えばinetサブシステムのtcp_keepidleアトリビュートの値を30に設定する場合は以下のようにする。

# sysconfig -r inet tcp_keepidle=30
tcp_keepidle: reconfigured

# sysconfig -q inet tcp_keepidle
tcp_keepidle = 30