OSのメモリ管理はどう動いている?仮想メモリとページングの仕組み
パソコンの「メモリ」ってよく聞くけど、なんで足りなくなったりするの?
じゃあメモリが足りなくなったらどうなるの?アプリが動かなくなっちゃう?
仮想と物理って、どうやって対応づけてるの?
毎回変換表を引くのって遅くないの?
もし必要なページが物理メモリに載ってなかったらどうなるの?
ディスクから読むってことは、物理メモリがいっぱいになったら誰かを追い出すの?
アプリが「malloc」でメモリを確保するときって、裏で何が起きてるの?
もし本当にメモリが足りなくなって、スワップも限界になったらどうなるの?
えっ、勝手に終了されちゃうの!?実際にそれで困ったことってあるの?
実はLinuxにはメモリの「オーバーコミット」という仕組みがあって、実際の物理メモリ+スワップ以上のメモリ確保を許可するんだ。mallocが成功しても、実際に使うときにメモリが足りなければOOM Killerが発動する。Kubernetesの現場では、Podのメモリ制限を超えるとcgroupのOOM Killerに殺されて「OOMKilled」ステータスで再起動を繰り返す、なんてインシデントが日常茶飯事だよ。メモリのrequestsとlimitsを適切に設定するのが本当に大事なんだ。
メモリ管理って奥が深いんだね…。まずは何を覚えておけばいい?