web-dev-qa-db-ja.com

ulimit設定はLinuxにどのように影響しますか?

最近、EAGAINエラーが発生し、いくつかの非同期コードによりulimit設定を詳しく確認できました。私はnofileなどの特定の制限を明確に理解していますが、他の制限はまだかなり混乱しています。

それらの設定方法に関するリソースを見つけるのは非常に簡単ですが、各設定の内容とそれがシステムにどのように影響するかを正確に説明する記事は見つかりませんでした。

/etc/security/limits.confから取られた定義は、実際には自明ではありません。

- core - limits the core file size (KB)
- data - max data size (KB)
- fsize - maximum filesize (KB)
- memlock - max locked-in-memory address space (KB)
- nofile - max number of open files
- rss - max resident set size (KB)
- stack - max stack size (KB)
- cpu - max CPU time (MIN)
- nproc - max number of processes
- as - address space limit (KB)
- maxlogins - max number of logins for this user
- maxsyslogins - max number of logins on the system
- priority - the priority to run user process with
- locks - max number of file locks the user can hold
- sigpending - max number of pending signals
- msgqueue - max memory used by POSIX message queues (bytes)
- Nice - max Nice priority allowed to raise to values: [-20, 19]
- rtprio - max realtime priority
- chroot - change root to directory (Debian-specific)

ですから、誰かがこれらのかなり重要なLinuxの設定について教えてくれたら嬉しいです!

私が直面しているエラーは実際には:

{ [Error: spawn mediainfo EAGAIN]
  code: 'EAGAIN',
  errno: 'EAGAIN',
  syscall: 'spawn mediainfo',
  path: 'mediainfo',
  spawnargs: 
   [ '--Output=XML',
     '/home/buzut/testMedia' ],
  cmd: 'mediainfo --Output=XML /home/buzut/testMedia' }

gnu.org の定義に従って:

非ブロックモードが選択されているオブジェクトに対して、ブロックする操作が試行されました。同じ操作を再試行すると、何らかの外部条件によって読み取り、書き込み、または接続(操作に関係なく)が可能になるまでブロックされます。

EAGAINエラーは、一時的に利用できないリソースを参照していることを理解しています。すべてのパラメーターをunlimitedに設定するのは賢明ではありません。したがって、どのパラメーターが1つのブロックを識別して調整するか(ulimit設定、コード、またはその両方)の影響を適宜理解します。

これが私の現在の制限です:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127698
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 64000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 127698
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
4
Buzut

私は宿題を作り、(ほとんど)各オプションの機能を見つけました。また、/etc/security/limits.confには、ulimit -aに表示されるオプションよりも多くのオプションがあることに注意しました。したがって、ここでは後者のみを文書化しました。もちろん、誰もがこの答えを豊かにするために招待されています!

  • コアファイルサイズ(ブロック、-c)

    作成されるコアファイルの最大サイズ。コアダンプは、システムスナップショット(RAM +コンテキストスイッチ+プロセッサレジスタ)です。

    https://en.wikipedia.org/wiki/Core_dump


  • data seg size(kbytes、-d)

    プロセスのデータセグメントの最大サイズ。データセグメントは、オブジェクトファイルの一部、または初期化された静的変数を含むプログラムの対応する仮想アドレス空間です。

    https://en.wikipedia.org/wiki/Data_segment



  • ファイルサイズ(ブロック、-f)

    シェルとその子によって書き込まれるファイルの最大サイズ。




  • 最大メモリサイズ(kbytes、-m)

    プロセスが合計で仮想メモリをどれだけ持っているかとは対照的に、プロセスが現在メインメモリ(RAM)に持っているメモリの量。

    https://en.wikipedia.org/wiki/Resident_set_size






  • スタックサイズ(キロバイト、-s)

    最大スタックサイズ。スタックサイズは、returnステートメントが正しい場所に戻ることができるように、関数呼び出しの場所を格納するために使用される予約済みのメモリ領域です。

    https://en.wikipedia.org/wiki/Stack-based_memory_allocation



  • 最大ユーザープロセス(-u)

    ユーザーが開始またはフォークできるプロセスの最大数。

    https://en.wikipedia.org/wiki/Process_%28computing%29

    このコマンドは、各ユーザーが現在使用しているプロセスの量を示します。

    ps h -Led -o user | sort | uniq -c | sort -n


  • 仮想メモリ(kbytes、-v)

    シェルで使用可能な仮想メモリの最大量。仮想メモリは、プログラムが使用するメモリアドレス(仮想アドレスと呼ばれます)をコンピュータメモリの物理アドレスにマップします。

    https://en.wikipedia.org/wiki/Virtual_memory


  • ファイルロック(-x)

    ファイルロックは、特定の時間に1人のユーザーまたはプロセスのみにアクセスを許可することにより、コンピューターファイルへのアクセスを制限するメカニズムです。

    https://en.wikipedia.org/wiki/File_locking

3
Buzut

Linuxでの制限の正確な問題は何も触れていないので、修正するのは難しいでしょう。あなたが使う ulimit -a OSでのすべての制限を確認してください。また、すべての制限を変更することもできます(rootが何でもできる場合を除いて、増やすことはせずに減らすこともできます)man ulimit変更する必要があるオプションを確認します。

1
Ali Ghasempour