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에서 테스트 되었다.

이상.

Trackback 1 And Comment 9
  1. 루트 2010.02.09 16:17 address edit & del reply

    잘봤습니다.

    혹시...
    (1024 * 1024 * 1024) /* 1M byte */
    1G byte 아닌가요??

  2. onegun 2010.03.16 19:16 address edit & del reply

    굿 내용입니다. 퍼가고 싶네요. 트랙백은 당근 하겠습니다.

    • 엘레노아 2010.03.17 19:07 신고 address edit & del

      도움이 되셨다니 감사합니다. 트랙백도 감사드립니다. ^^

  3. 최익필 2010.06.21 10:21 address edit & del reply

    좋은 정보 감사합니다. 이제까지 가상메모리와 리얼메모리를 반대로 사용하고 있었네요. : )

  4. onegun 2011.02.08 15:03 address edit & del reply

    올만입니다. 공부를 하다보니 이제 이 이유에 대해 설명할 수 있을것 같군요.
    kernel 은 메모리를 할당하는데 buddy system 이란걸 사용합니다.
    이 buddy system 은 할당을 할때 한꺼번에 메모리를 훅- 주는게 아니라 실제 i/o 가 일어나는 만큼만 조금씩 할당하게 됩니다.
    메모리를 효율적으로 사용하기 위해서지요. 그나저나 buddy system 은 책에도 자세히는 안나오는군요.

  5. hanulcat 2013.11.21 11:09 address edit & del reply

    이 글은 기록된지 몇 년 된 내용이지만... 최근에 rss 관련 내용을 찾다가 방문하게 되었습니다.

    한가지 의아한 점은... 이 내용 자체가 플랫폼에 영향을 받는지에 대한 부분입니다.
    한 예로 AIX 의 경우

    $ ps -p 3424378 -o vsz,rssize
    VSZ RSS
    666648 671932

    와 같이 RSS가 역전하여 더 큰 상황도 발생합니다.
    즉, VSZ 범주 안에서 RSS가 할당된다는 내용과는 사뭇 다른 부분이 아닌가 싶습니다.

    • 엘레노아 2014.01.02 17:18 신고 address edit & del

      RSS가 VSZ보다 큰 경우에 관한 내용입니다.

      "The reason why resident size can be larger than virtual size is because VSZ typically only counts the data and stack segments. But portions of the text segment also have to be in main memory for the program to run, and it's possible for this to exceed the amount of data/stack memory."

      그러니까 VSZ는 메인 메모리를 제외한 스택과 데이터 세그먼트만 계산하기 때문입니다.