Linux 名前空間は、pid、mount poing、network などを分離できます。Linux 名前空間を使用して OS レベルの仮想マシン (vserver や LXC と同様) を実装していますが、頻繁にメモリ不足になります。異なる名前空間に 2 つのプロセスがあり、それらが同じ共有ライブラリを使用している場合、ライブラリは物理メモリに 1 回または 2 回ロードされるのでしょうか? また、プロセス間でライブラリを共有する下層のメカニズムは何ですか? IPCのようなものですか?
質問する
771 次
1 に答える
4
それらがすべて同じファイルにアクセスしている場合は、メモリを共有する必要があります。メカニズムは非常に単純です。各プロセスは共有オブジェクトを開き、それをmmap(2)
sします。mmap()
プロセスのアドレス空間でファイルのVFSページキャッシュを使用できるようにするだけなので、複数のプロセスmmap()
が同じファイルを処理すると、同じページが取得されます。
ファイルシステムを複数回マウントする場合(これは、バインドマウントと複数の名前空間からのマウントが行うことです)、ファイルシステムインスタンスは1つだけであり、複数のマウントはVFSレイヤーで処理されるため、各ファイルのコピーは1つだけにする必要があります。キャッシュ。
共有ライブラリがメモリの枯渇を引き起こす可能性はほとんどありません。これらはディスク上のファイルの読み取り専用キャッシュであるため、メモリが不足するとカーネルはそれらを削除し、プログラムがそれらのページにアクセスするたびにディスクを読み取ります(たとえば、関数を呼び出したり、ライブラリからメモリにアクセスしたりします)。
于 2012-12-01T20:41:49.043 に答える