はい、VSZ は仮想メモリです。 RLIMIT_AS に関して、上記の段落はどこで見つけましたか? setrlimit(2) は Linux システム コールであるため、ライブラリ関数である malloc(3) をどのように監視できるかわかりません。代わりに、brk(2)、sbrk(2)、および mmap(2) でのみ動作します。これは、そのマンページ (Scientific Linux のチェック済み) が示唆するものでもあります。ただし、これらの関数を介して要求されるメモリの総量は 仮想メモリであるため、 RLIMIT_AS は実際に仮想メモリを制限します。 (これも、setrlimit(2) マンページに準拠しています。)
残念ながら、Linux では RSS を制限できません (これは ulimit -m
になります)。 )。 ulimit -d
を試すことができます (RLIMIT_DATA) ですが、これには通常、大規模な割り当てに使用される Linux 4.7 以降の mmap(2) のみが含まれます。別の可能性として、仮想メモリを制限することもできますが、RSS と VSZ の違いが非常に大きいため、これは難しいかもしれません。
多くのプロセスは、そのメモリの一部を他のプロセスと共有します。 libc はほぼすべてのプロセスで使用されますが、メモリにマップされるのは一度だけですが、すべてのプロセスの仮想メモリ使用量にカウントされます。特定のプロセス (主に RSS) のみが使用するメモリ使用量を制限するには、cgroups を使用します。その方法については、プロセスとその子の合計リソース (メモリ) を制限する方法への回答を参照してください。これにより、プロセスとその子プロセスの合計メモリが制限されます。