GNU/Linux >> Linux の 問題 >  >> Linux

Linux –単一のLinuxプロセスのメモリ使用量を制限しますか?

pdftoppmを実行しています ユーザー提供のPDFを300DPI画像に変換します。これは、ユーザーが非常に大きなページサイズのPDFを提供する場合を除いて、うまく機能します。 pdftoppm そのサイズの300DPI画像をメモリに保持するのに十分なメモリを割り当てます。100インチ四方のページの場合、100 * 300 * 100 * 300*4バイト/ピクセル=3.5GBです。悪意のあるユーザーが私にばかげた大きなPDFを渡して、あらゆる種類の問題を引き起こす可能性があります。

ですから、私がやりたいのは、実行しようとしている子プロセスのメモリ使用量にある種の厳しい制限を設けることです。たとえば、500 MBを超えるメモリを割り当てようとした場合は、プロセスを停止させます。それは可能ですか?

これにulimitを使用できるとは思いませんが、1つのプロセスに相当するものはありますか?

承認された回答:

ulimitにはいくつかの問題があります。このトピックに関する有用な読み物は次のとおりです。Linuxでのプログラムの時間とメモリ消費の制限。これにより、タイムアウトツールが使用され、時間またはメモリ消費によってプロセス(およびそのフォーク)をケージに入れることができます。

タイムアウトツールには、Perl5以降と/procが必要です。 ファイルシステムがマウントされました。その後、ツールをコピーします。 /usr/local/bin そのように:

curl https://raw.githubusercontent.com/pshved/timeout/master/timeout | 
  sudo tee /usr/local/bin/timeout && sudo chmod 755 /usr/local/bin/timeout

その後、次のように質問のように、メモリ消費によってプロセスを「ケージ」に入れることができます。

timeout -m 500 pdftoppm Sample.pdf

または、-t <seconds>を使用することもできます および-x <hertz> 時間またはCPUの制約によってそれぞれプロセスを制限します。

このツールが機能する方法は、生成されたプロセスが設定された境界をオーバーサブスクライブしていないかどうかを1秒間に複数回チェックすることです。これは、プロセスが潜在的に可能性がある小さなウィンドウが実際に存在することを意味します タイムアウトが通知されてプロセスが強制終了される前に、オーバーサブスクライブする必要があります。

したがって、より正確なアプローチにはcgroupが含まれる可能性がありますが、DockerまたはrunCを使用する場合でも、cgroupの周りでよりユーザーフレンドリーな抽象化を提供するため、セットアップにははるかに複雑です。


Linux
  1. Linux/Unix プロセスのピーク時のメモリ使用量

  2. Linuxで単一プロセスのCPU使用率とメモリ使用率を取得しますか?

  3. Linux で特定のプロセスのオープン FD 制限を確認する

  1. Linux で R のメモリ使用量を制限する

  2. アプリケーションのメモリ使用量を制限するには?

  3. 単一の Linux プロセスのメモリ使用量を制限する

  1. プロセスのピーク時のメモリ使用量

  2. Linux でメモリ使用量はどのように報告されますか?

  3. Linuxでアプリケーションによるメモリ使用量を制限するには?