カーネル設定があります
/ proc / sys / vm / overcommit_memory
優秀な記事からの引用:
Since 2.5.30 the values are: 0 (default): as before: guess about how much
overcommitment is reasonable, 1: never refuse any malloc(), 2: be precise
about the overcommit - never commit a virtual address space larger than swap
space plus a fraction overcommit_ratio of the physical memory. Here
/proc/sys/vm/overcommit_ratio (by default 50) is another user-settable
parameter. It is possible to set overcommit_ratio to values larger than 100.
(See also Documentation/vm/overcommit-accounting.)
これは、フォークと通常のmallocに適用されます。つまり、0に設定すると、フォークは書き込み時にコピーされます。書き込み時にコピーとは、アプリがフォークされると、両方のコピーがutil子または元のメモリページを共有することを意味します。
ほとんどのディストリビューションでは、オーバーコミットが0であることを知っています。ただし、2に設定すると、すべてのメモリページが実際のメモリによって完全にバックアップされ、場合によっては高いメモリプレッシャーでより安定しますが、依存する一部のプログラム(gitkに直面)オーバーコミットでは失敗します。
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.
はい、ありがとうございます。つまり、メモリ(RAMおよびスワップ)が限られた環境でプロセスの仮想フットプリントを削減すると、フォークできないという問題を解決できる可能性があります。