답변:
나는 이것을 위해 내 자신의 유틸리티를 작성했다 : https://gist.github.com/Eugeny/04ccfe8accf4bc74b0ca
init
테스트를 위해 (pid 1)에 대해 실행 했으며 총보고 된 물리적 램 사용량 (htop 당)과 거의 같으므로 다소 정확하다고 생각합니다.
사용 예 :
~ » pstree -ap 15897
zsh,15897
└─sudo,9783 make rundev
└─make,9784 rundev
└─sh,9785 -c cd ajenti-panel && ./ajenti-panel -v --autologin --plugins ../plugins --dev
└─python ./ajenti,9786
├─./ajenti-panel ,9834
├─./ajenti-panel ,9795
└─{python ./ajenti},9796
~ » sudo ./memuse.py 15897
PID Commandline Frames (+unique) VMEM
- 15897 (/usr/bin/zsh ): 1776 +1776 7104 KB
- 9783 (sudo make rundev ): 608 +408 2432 KB
- 9784 (make rundev ): 261 +98 1044 KB
- 9785 (/bin/sh -c cd ajenti-panel && ): 166 +48 664 KB
- 9786 (python ./ajenti-panel -v --aut): 9279 +8977 37116 KB
- 9795 (./ajenti-panel worker [restric): 7637 +1334 30548 KB
- 9834 (./ajenti-panel worker [session): 8972 +2639 35888 KB
----------------------------------------------------------------------------------------
TOTAL: 15280 61120 KB
어떤 도구에서 어떤 프로세스가 모든 매핑을 반복하고 주소를 비교하지 않고 어떤 맵을 공유 하는지를 결정하는 명확한 방법은 없습니다.
그러나 리눅스는 비례 설정 크기 로 알려진 합리적인 추정치를 제공 합니다 . 이것은 / proc / [pid]> / maps에보고됩니다.
이 값은 맵핑 크기를 동일한 맵핑이 열린 형제 / 부모 프로세스 수로 나눈 값입니다.
따라서 1MiB 매핑이 열려 있고 4 개의 다른 프로세스와 공유되는 1MiB가있는 프로그램에서 비례 세트 크기는 1MiB + (1Mib / 4) 또는 1.250 MiB입니다. 이 경우 RSS는 2MiB입니다.
PSS를 사용하여 실제 사용중인 메모리의 '좋은 추정치'를 계산하는 htop 플로팅 패치가 있습니다.
/proc/*/map
파일을 심층 분석하면 가능 하지만 도구를 찾지 못하더라도 가능합니다. 주요 문제는 따라야 할 데이터 구조가 훨씬 복잡하다는 것입니다. 여기서 좋은 대답을 얻지 못하면 유닉스 SE를 사용해 볼 수도 있습니다.