Незважаючи на те, що тема досить стара, я хочу поділитися ще одним проектом, який з’явився з функції ядра cgroups Linux.
https://github.com/gsauthof/cgmemtime :
cgmemtime вимірює багатоводневу пам'ять RSS + CACHE для процесу та його нащадків.
Щоб мати змогу зробити це, він ставить процес у власну групу.
Наприклад, процес A виділяє 10 MiB і роздвоює дитину B, яка виділяє 20 MiB, і роздвоює дочку C, яка виділяє 30 MiB. Усі три процеси поділяють часове вікно, коли їх розподіл призводить до відповідного використання пам'яті 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