이 명령 에는 Linux의 매뉴얼 페이지에 따라 다음과 같은 목적으로 사용되는 time
형식 매개변수 "M"이 포함되어 있습니다 .time
Maximum resident set size of the process during its lifetime, in Kilobytes.
time
그러나 프로세스 수명 동안 프로세스의 최대 가상 집합 크기를 측정 할 수 없는 것 같습니다 . Linux에서 어떻게 이를 달성할 수 있나요?
분명히 말하면 프로파일링 중인 프로세스에 대한 제어권이 있으므로 실행이 끝날 때 이 자식 프로세스가 종료할 준비가 되었다는 신호를 내보내도록 해야 하는 경우 부모가 해당 VSZ를 읽은 다음 종료할 수 ps
있습니다 pmap
. 부모 프로세스가 메모리를 읽은 후 자식 프로세스를 명시적으로 종료합니다. 그렇게 할 수는 있지만 고통스럽기 때문에 프로파일링되는 프로그램 코드를 감지하지 않는 더 간단한 솔루션이 있을 수 있기를 바랍니다. 최대값을 측정하는 것과 같은 time
가상 세트 크기와 직접적으로 동등한 것이 이상적입니다. 그러나 필요한 경우 하위 프로세스를 시작하는 사용자 정의 C 프로그램을 작성할 수 있습니다. 그러나 C 경로로 가면 하위 프로세스에서 VSZ의 커널 추적을 활성화하는 데 어떤 시스템 호출이 사용될지 확신할 수 없습니다.
어떤 지침이라도 대단히 감사하겠습니다.
편집: 이것은 사소한 일이 아닌 것으로 밝혀졌습니다. 가능한 해결책은 다음과 같습니다.https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process/10957355#10957355
답변1
이것이 당신에게 도움이 될지는 모르지만, pidstat -r 1 -p 1
/sbin/init의 예는 다음과 같습니다:
10:53:38 PID minflt/s majflt/s VSZ RSS %MEM Command
10:53:39 1 0.00 0.00 13648 1108 0.01 init
10:53:40 1 0.00 0.00 13648 1108 0.01 init
10:53:41 1 0.00 0.00 13648 1108 0.01 init
10:53:42 1 0.00 0.00 13648 1108 0.01 init
10:53:43 1 0.00 0.00 13648 1108 0.01 init
10:53:44 1 0.00 0.00 13648 1108 0.01 init