Несмотря на то, что тема довольно старая, я хочу поделиться другим проектом, появившимся в ядре Linux cgroups.
https://github.com/gsauthof/cgmemtime :
cgmemtime измеряет интенсивное использование памяти RSS + CACHE для процесса и его дочерних процессов.
Чтобы иметь возможность сделать это, он помещает процесс в свою собственную группу.
Например, процесс A выделяет 10 МБ и разветвляет дочерний элемент B, который выделяет 20 МБ, и разветвляет дочерний элемент C, который выделяет 30 МБ. Все три процесса совместно используют временное окно, в котором их выделения приводят к соответствующему использованию памяти RSS (резидентного набора).
Теперь возникает вопрос: сколько памяти фактически используется в результате запуска A?
Ответ: 60 МиБ
cgmemtime - это инструмент для ответа на такие вопросы.
Примеры использования будут:
$ sudo ./cgmemtime --setup -g <myusergroup> --perm 775
$ ./cgmemtime ./testa x 10 20 30
Parent PID is 27189
Allocating 10 MiBs
New Child: 27193
Allocating 20 MiBs
New Child: 27194
Allocating 30 MiBs
Child user: 0.000 s
Child sys : 0.005 s
Child wall: 6.006 s
Child high-water RSS : 11648 KiB
Recursive and acc. high-water RSS+CACHE : 61840 KiB
$ ./cgmemtime python -c 'print range(100000)[48517]'
48517
Child user: 0.014 s
Child sys : 0.014 s
Child wall: 0.029 s
Child high-water RSS : 9948 KiB
Recursive and acc. high-water RSS+CACHE : 5724 KiB