ヒープサイズを制限するにはどうすればいいですか? 質問する

ヒープサイズを制限するにはどうすればいいですか? 質問する

実行前にメモリ使用量を判断するのが非常に難しい Python プログラムを書くことがあります。そのため、大量の RAM を割り当てようとする Python プログラムを呼び出すと、カーネルが頻繁にスワップし、実行中の他のプロセスのパフォーマンスが低下することがあります。

このため、Python ヒープが拡張できるメモリの量を制限したいと考えています。制限に達すると、プログラムがクラッシュする可能性があります。これを行うための最良の方法は何ですか?

問題になる場合は、多くのコードが Cython で記述されているため、そこに割り当てられたメモリを考慮する必要があります。私は純粋な Python ソリューションにこだわっているわけではないので (移植性は不要)、Linux で動作するものであれば何でも問題ありません。

ベストアンサー1

チェックアウトリソース制限の設定()これは Unix システムでのみ機能しますが、resource.RLIMIT_DATA パラメータを使用してプロセスとプロセスの子の最大ヒープ サイズを選択できるため、探しているものである可能性があります。

編集: 例を追加します:

import resource

rsrc = resource.RLIMIT_DATA
soft, hard = resource.getrlimit(rsrc)
print 'Soft limit starts as  :', soft

resource.setrlimit(rsrc, (1024, hard)) #limit to one kilobyte

soft, hard = resource.getrlimit(rsrc)
print 'Soft limit changed to :', soft

ユースケースが正確にどのようなものかはわかりませんが、代わりに resouce.RLIMIT_STACK を使用してスタックのサイズに制限を設定する必要がある可能性があります。この制限を超えると、プロセスに SIGSEGV シグナルが送信され、これを処理するために、setrlimit Linux で説明されているように、代替シグナル スタックを使用する必要があります。マニュアルページただし、sigaltstack が Python に実装されているかどうかはわかりません。そのため、この境界を超えた状態から回復したい場合は困難になる可能性があります。

おすすめ記事