linux: ps u에 나오는 RSS 사이즈는 VSZ 사이즈까지 증가한다. (할 수 있다)

|

결과를 다 써놓고 정리하자니 벌쭘하지만.

VSZ와 RSS는 뭘까? man 페이지의 ps 항목에서 설명하는 두 파라미터의 설명은 다음과 같다.

VSZ
virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change. (alias vsize).

RSS
resident set size, the non-swapped physical memory that a task has used (in kiloBytes). (alias rssize, rsz).

아 뭐야. 몰라. 어려워.
간단히 말하자면 VSZ는 가상 메모리의 크기이고, 현재 디바이스 매핑에서는 제외되어 있다는 의미인 것 같다. RSS는 실제 메모리가 세팅된 크기이고, 스와핑이 되지 않은 물리적 메모리가 해당 task에 쓰이고 있는 양을 의미하는 것 같다.
그러니까 VSZ 크기만큼을 reserve 해놓고 실제로 물리적 메모리가 사용하고 있는 것은 RSS 크기만큼이라는 것인데.



그런데, 이것이 Shared Memory가 아니라 Local Memory라면?


malloc 혹은 Shared Memory를 attach 해서 확보해 놓은 메모리라고 해도, 실제 I/O를 일으키지 않으면 VSZ 영역에 예약만 되어 있을 뿐이다. 하지만 실제 I/O를 일으키게 되면 RSS 영역에 확보되게 되고, 이것은 실제로 물리적 메모리에 할당된다. (이 동작은 Local Memory와 Shared Memory가 완벽하게 동일하다.)

결론적으로 ps u 옵션에서 볼 수 있는 RSS는 실제 프로세스가 물리 메모리에서 점유하고 있는 메모리이며, VSZ까지 증가할 수 있다. 하지만 Shared Memory 등의 방식으로 각 프로세스는 메모리를 공유할 수 있기 때문에 RSS의 총 크기 합은 서버의 물리 메모리보다 클 수 있다. 프로세스가 동작하는 도중 별도의 메모리 할당 없이 RSS는 VSZ까지 증가할 수 있다. 이것은 정상적인 상황이다.

이 소스는 Linux Kernel 2.6.18 x86_64, Red Hat Enterprise Linux AS release 3에서 테스트 되었다.

이상.

And