Измерение того, сколько оперативной памяти использует процесс, практически невозможно.Сложность состоит в том, что каждый кусок оперативной памяти не используется ровно одним процессом, и не все оперативные памяти, которые использует процесс, фактически «принадлежат» ему.
Например, два процесса могут иметь общие отображенияодин и тот же файл, и в этом случае любые страницы, находящиеся в основном для отображения, будут «принадлежать» обоим процессам.Но что, если только один из этих процессов использовал его?
Личные страницы также можно копировать при записи, если процесс разветвлен или если они были отображены, но еще не использовались (рассмотрим случай, когдапроцесс имеет malloc'd огромную область, но еще не затронул большую ее часть).В этом случае, какой процесс «владеет» этими страницами?
Процессы также могут эффективно использовать части буферного кеша и множество других типов буферов ядра, которые им «не принадлежат».
Доступны два измерения: размер виртуальной машины (объем памяти, отображенный процессом в данный момент) и размер резидентного набора (RSS).Ни один из них на самом деле не говорит вам много о том, сколько памяти использует процесс, потому что они оба считают общие страницы, и ни один не считает не отображенные страницы.
Так есть ответ?Некоторые из них можно измерить, изучив структуры карт страниц, которые теперь доступны в / proc (/ proc / pid / pagemap), но не всегда существует тривиальный способ разделения «владения» общими страницами.
См. Документацию Linux / vm / pagemap.txt для обсуждения этого.