名前でプロセスメモリを永久に制限

名前でプロセスメモリを永久に制限

私は開発のためにwebpackを使用しています。問題は、現在のプロジェクトが大規模で、約6 GBのRAM(上によればRAMの約30%)が必要であることです。

メモリを永久に制限するコマンドを実行できますか?ルートで始まることに注意してください(私たちが使っているツール - 私も知っています - 変です)

問題は、メモリが少なすぎるとコンピュータがフリーズすることです。凍らない方法を探しています。したがって、システム自体のために500 MBを予約することもできます。私は提案を受け入れる

答え1

ハードおよび/またはソフト制限の設定に使用する場合は、一度設定するulimit [-H|S]特定のシェルについてルート以外のユーザーはハード制限を変更できません。これを行うには、非ルートプロセス所有者が実行を停止し、新しい制限を設定してから再起動する必要があります。

現在のプロジェクトの実行シェルで制限を指定する必要があります。呼び出しシェルでこれを行うと、そのシェルで開始または生成されたすべてのプロセスに制限セットが適用されます。結合された。したがって、これを念頭に置いて、最大スタックサイズ(ulimit -H -s <limit>)および/または最大常駐セットサイズulimit -H -m <limit>最大RSSの場合)。

RSSは、プロセスが占める物理メモリの一部です。

システムによっては、後者にアクセスすることもそうでない場合もあります。 (今はUbuntu OSにアクセスして確認できません。運が悪いかもしれません。)

この制限を設定すると、取得できる動作がレプリケーションの実行に対して完全に決定的ではないことに注意することが重要です。所与の瞬間にシステムが実行するタスクに応じて、ある実行から次の実行まで異なる時間にメモリブロックを交換することを決定することができる。つまり、実行中に異なる時間に異なるRSS値に達する可能性があります。たとえば、関連していない他のプロセスが同時に実行される場合です。

マニュアルページに加えて、ulimit回答と説明を確認してください。ここ

答え2

/etc/security/limits.confプロジェクト(またはそれを実行するプログラム)がシステムサービス、スライス、マウント、またはソケットの場合は、有効または設定するのではなく、service / slice / mount / socketファイルでリソース制限を設定する必要がありますulimit

ディストリビューション/usr/lib/systemd/system/または/etc/systemd/systemディストリビューションに応じて、システム単位のファイルを検索できます。

systemctl edit <unit name>すばやく編集するには、直接編集を使用できます。以前のコマンド仕様では、--full編集中にサービスファイル全体を表示できます(デフォルトではコピーと置換の編集)。

特定の問題に推奨される設定は次のとおりです。

MemoryHigh=<Bytes>

このディレクティブをプログラムのメモリ使用制限ポイントを指定すると考えることができます。 K、M、G、またはTをサフィックスとして追加して、それぞれキロバイト、メガバイト、ギガバイト、またはテラバイトを指定できます。

以下を設定することもできます。

MemoryMax=<Bytes>

このコマンド値を超えると、デバイス内でメモリ不足キラーが呼び出されます。このガイドラインのマンページ(systemd.resourcecontrol)はこれを「最後の防御線」としてお勧めします。前のガイドラインと同様に、K、M、G、Tを指定することもできます。

MemoryLimitまた、最新のシステムバージョンを使用していない場合に役立つ可能性がある上記の2つのディレクティブの前には、廃止予定の設定があります。

上記の2つのディレクティブは、制御グループ全体に制限を適用し、分岐したプロセスが制限を超えないようにします。ただし、LimitAS(アドレス空間制限)ディレクティブを使用して、個々のプロセスに制限を設定することもできます.

MemoryHigh=とを使用するサンプルサービスファイルMemoryMax=

[Unit]
Description=A foobar service that does foo and bar
After=network.target

[Service]
Type=simple
MemoryHigh=2500M
MemoryMax=3000M
ExecStart=/usr/bin/foobar-daemon start
ExecStop=/usr/bin/foobar-daemon stop

[Install]
WantedBy=multi-user.target

ガイドラインの完全な説明またはその他の情報

バラよりsystemd.resourcecontrolまたはman systemd.resource-controlシステムランチャーまたはman systemd.exec

関連情報