37

私のプログラムは、実行時間の半分のようにメモリ不足になります。Linux では、ulimit -v mem-in-kbytes を使用して、使用可能なメモリにハード リミットを設定できます。実際には、ulimit -S -v mem-in-kbytes を使用しているため、プログラムで適切なメモリ割り当ての問題が発生し、中止することができます。

しかし... ulimit は OSX 10.6 では機能しません。-s オプションと -m オプションを試しましたが、機能しません。

2008 年にMacRumorsで同じ問題についていくつかの議論がありましたが、誰も良い代替案を提案しませんでした. これは、プログラムがメモリを使いすぎていること、または OS を介して制限を設定していることをプログラムが学習できる方法であるべきです。

4

3 に答える 3

7

できません。Apple は (ledger()プライベートなシステム コールを使用して) できますが、あなたはできません。launchd のオプションが機能するかどうかは完全にはわかりません。確かに、最後のオープン ソース バージョン (10.9.5 以降) で表示されていたコードをまだ使用していた場合はsetrlimit()、.それから、私はそれが を呼び出しているのを見ることはできませんがledger()、これが機能するはずだった場合、私はそれを期待します。

なんで?RLIMIT_DATAおよびRLIMIT_ASオプションは、現在のバージョンの XNU (macOS カーネル) では実際には何もsetrlimit()ないためです。

于 2020-05-05T14:23:13.633 に答える
6

自分でこれに苦労した後(限られた成功で)、それを行うには2つの方法があるようだと判断しました...

実行可能ファイルの launchd 項目をセットアップできます。plist の重要な部分は、次のようなセクションです。

<key>SoftResourceLimits</key>
<dict>
    <key>Stack</key>
    <integer>10000000000</integer>
</dict>

利用可能なさまざまなキーがあります... Apple の MAN ページで見つけることができます

それを行う別の方法は、 /etc/ launchd.conf (システム) または/etc/launchd-usr.conf (ユーザーごと)のいずれかに値を設定することだと思います。たとえば、launchd.conf には次のものが含まれる可能性があります。

umask 002
limit stack 67104768 67104768
limit maxproc 3400 4500
limit maxfiles 256 unlimited
setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

あなたが私に尋ねると、launchdのすべての機能のドキュメントは不十分です..まるでAppleが気にしないか、壁の外の人々に実際にすべてがどのように機能するかを理解してほしくないかのようです。 launchd とその複雑さをマスターすることで得られる力は非常に大きいですが、それらを適切に実装する方法に関して利用できる具体的/公式のリソースはほとんどありません。

于 2011-05-29T19:17:45.160 に答える
1

setrlimit仕事をする必要があります。私はそれがBSDに相当すると信じていulimitます...

于 2010-07-18T19:36:52.480 に答える