
컨테이너 내부의 *nix에서 일부 프로그램을 실행하고 있으며 내 프로세스에서 사용하는 RAM의 양을 자세히 계산하려고 합니다. 이 정보는 아래에 있어야 한다고 이해합니다 /proc/#{pid}/smaps
. 저는 smaps
이 Ruby 스크립트를 사용하여 시스템에 있는 모든 파일의 PSS를 모두 합산해 보았습니다 .https://gist.github.com/schneems/10025798
그러나 내 컨테이너가 보고하는 것보다 낮은 메모리 사용량이 보고되고 있습니다. RSS를 사용하도록 전환하면 값이 훨씬 높아집니다(내 컨테이너가 보고하는 것보다 훨씬 높음). 필요한 모든 정보가 에서 제공된다고 확신합니다 /proc
. 정확한 측정값을 얻기 위해 정보가 어떻게 보고되는지는 모르겠습니다. 내 질문은 이것입니다. smaps
PSS만으로는 좋은 지표가 아니기 때문에 어떤 값을 합산해야 합니까? Linux 시스템 내에서 이 정보를 얻는 더 좋고 더 정확한 방법이 있습니까?
답변1
RSS는 상주 세트 크기, 즉 런타임에 로드된 모든 라이브러리를 포함하는 프로세스에서 사용하는 전역 메모리입니다. 단일 라이브러리는 여러 번 사용될 수 있습니다(예를 들어 Apache 프로세스 포크를 생각해 보면 각 하위 프로세스가 동일한 라이브러리를 사용할 수 있습니다). 가상 메모리 모델에 따르면 각 프로세스는 이 메모리가 자체적으로 사용되는 것으로 간주합니다. 실제로 커널은 가상 메모리 주소를 라이브러리의 고유 메모리 주소에 매핑합니다.
반면 PSS는 프로세스의 각 USS(비공유 세트 크기)를 합산합니다. 프로세스를 종료하면 프로세스가 즉시 해제할 메모리라고 생각하세요. 공유 메모리는 고려하지 않고 프로세스가 사용하는 고유한 메모리만 고려합니다.
결과적으로 RSS 값은 사용된 유효 메모리를 과대평가합니다. 로드된 라이브러리 메모리 크기를 고려하면 PSS가 더 정확합니다.
자세한 내용은여기, 특히 마지막 단락에서.