私のプログラムは、実行時間の半分くらいでメモリ不足になります。Linux では、ulimit -v mem-in-kbytes を使用して、使用可能なメモリにハード制限を設定できます。実際、私は ulimit -S -v mem-in-kbytes を使用して、プログラムで適切なメモリ割り当ての問題を検出し、中止することができます。
しかし... ulimit は OSX 10.6 では動作しません。 -s および -m オプションを試してみましたが、動作しません。
2008年にも同じ問題について議論がありました。マックルーマーズしかし、誰も良い代替案を提案しませんでした。プログラムがメモリを過剰に消費していることを学習したり、OS を通じて制限を設定したりできる方法が必要です。
ベストアンサー1
できません。Apple は (ledger()
非公開のシステム コールを使用して) できますが、あなたにはできません。launchd のオプションが機能するかどうかは完全にはわかりません。確かに、最後のオープン ソース バージョン (10.9.5 以降) で表示されるコードをまだ使用していた場合は、 を呼び出すため機能しませんsetrlimit()
が、それ以降大幅に書き換えられています。ただし、 を呼び出すことは見られませんledger()
。これが機能するはずであれば、 を呼び出すはずです。
なぜでしょうか?RLIMIT_DATA
とRLIMIT_AS
オプションはsetrlimit()
実際にはするXNU (macOS カーネル) の現在のバージョンに含まれるもの。