プロセスのメモリ消費に一種のソフト制限を適用することは可能ですか?

プロセスのメモリ消費に一種のソフト制限を適用することは可能ですか?

私はこれがまれな問題だとは思わない。プロセスは大量のメモリを割り当てます(おそらく実行不可能なほど大きな入力ファイルを処理しようとしているため、メモリリークエラーまたは他の理由による)。 RAMがいっぱいになると、ある時点でLinuxはスワップに切り替える必要があります。まあ、時にはこれは最後の手段です。高価な計算を行う場合、最終的にRAMが不足してもデータを失いたくありません。

しかし、(私の経験では)不良プロセス、欠陥のあるプロセスのためにメモリ消費が無制限になることが多くあります。つまり、私は結局緊急性の低いデータスワップに移動しましたが、オペレーティングシステムが緊急に大量のデータをスワップする必要がありました。残念ながら、これは問題のプロセスを深刻に妨げるだけでなく、システム全体をほぼ静止させる可能性があります(SSDを搭載したシステムではもはや悪くはありませんが、OTOHではギガバイト単位のセクションとセクションの作成について心配します)。ギガバイトのジャンクデータがシステムクラッシュを引き起こす可能性があります)フラッシュバッテリーが長期的に損傷する可能性があります。
問題を発見してプロセスを手動で終了するまで(一度は実際に仮想端末にログインするのに数分かかりました!)、実行中のセッションの半分がスワップにあり、システムがスムーズに実行されるまで長い時間を待たなければなりませんでした。再び。

この問題には大胆な解決策があります。つまり、ハードメモリ制限を適用することです。ただし、システム全体でこれを行うと、依然として必要なプロセスが終了することがあり、ulimit開始する前に問題のあるプロセスを手動で終了する必要があります。

私がより満足できるソリューションの種類は次のとおりです。

  • プロセスが特定のメモリ使用量を超えると、残りのシステムが応答し続けるように人工的に調整されます。
  • プロセスが特定のメモリ使用量を超えると、SIGSTOPpedが発生し、次に何をすべきかを特定する時間が提供されます。
  • プロセスがRAMの制限に達すると、警告が表示されます。今後偉大な交流が始まります。

この動作や同様の動作を得る方法はありますか?

ベストアンサー1

Niceload --noswap yourprgこれはこの種の状況のた​​めに設計されています。交換活動を見てください。

  • 交換した場合:プロセスを実行します。
  • スワップの場合:プロセスを実行させます。
  • スワップインとスワップアウトの場合:スワップが停止するまでプロセスを一時停止し、スワップが停止したらプロセスを再開します。

スワップが開始される前にプロセスを一時停止するのではなく、続行する前にスワップが1秒間実行されるようにします。

niceload --mem 1G yourprg同様に動作します。空き容量が1GB未満の場合、PRGは一時停止します。 1GB以上が使用可能になると、プログラムが再開されます。

おすすめ記事