Linux에서 프로세스의 스레드 기반 메모리 사용량을 얻는 방법은 무엇입니까? 우리는/proc/pid/task/tid/statm을 사용할 수 있다는 것을 알고 있지만 내 경우에는 도움이되지 않습니다. 모든 스레드는 PID의 statm과 동일한 값과 동일한 값을 표시합니다.프로세스의 스레드 레벨 메모리 사용량
우리는 valgrind를 할 수 있지만 잘못된 읽기/쓰기 또는 누출을 찾지 않습니다. Valgrind는 스레드 수준 정보를 알려주지 않습니다.
다른 제안 사항이 있으십니까?
편집 : 내 코드의 프로필을 작성하려면 어떻게해야합니까? 함수/줄 번호 등에서 할당 된 메모리 양은 어느 정도입니까?
잘 들어
top -H -p <PID>
의 출력에 나열된 TID와 일치시킬 수 있습니다 진수로, 개념적으로, 모든 스레드는 같은 메모리 풀에 액세스 할 수 있습니다 그래서 그들은 모두 같은 금액을 사용합니다. 추적하고자하는 것은 스레드 당 할당 수입니다. glibc 나 커널이 그렇게하지 않는다고 생각합니다. 그리고 고려하십시오 : 어떻게 한 스레드에서 할당되고 다른 메모리에서 해제 된 메모리 블록을 계산합니까? –
malloc 위에 래퍼를 작성할 수 있습니다. malloc 위에 통계를 수집 할 수 있지만 malloc을 많이 사용하여 거대한 코드를 프로파일 링하는 것은 어렵습니다. – Jack
'gettid (2)'를 호출하는 malloc 주위에 래퍼를 사용하는 것은 어떻습니까? 그렇게하면 래퍼를 호출하는 스레드를 추적하면서 호출 코드를 동일하게 유지할 수 있습니다. –