Системный вызов getrusage: что такое «максимальный размер резидентного набора»

23

man getrusage 2 говорит

ru_maxrss (since Linux 2.6.32)
              This is the maximum resident set size used (in kilobytes). For RUSAGE_CHILDREN, this is the resident set size of the largest
              child, not the maximum resident set size of the process tree.

Так что же конкретно означает это число?

жэнь
источник
Просто примечание, которое ru_maxrssнаходится в байтах на компьютерах Mac / BSD.
Исаак Тернер
1
Небольшое уточнение: ru_maxssв байтах на машинах Mac OS X (Darwin), но в килобайтах на машинах BSD и Linux. См. Stackoverflow.com/q/40773924/781723 и stackoverflow.com/q/12050913/781723 .
DW

Ответы:

27

Размер резидентного набора процесса - это объем памяти, который принадлежит ему и в настоящее время присутствует (резидентный) в ОЗУ (реальное ОЗУ, не поменяно местами или не является резидентным).

Например, если процесс выделяет кусок памяти (скажем, 100 МБ) и активно его использует (читает / записывает в него), его размер резидентного набора будет около 100 МБ (плюс накладные расходы, сегмент кода и т. Д.). Если после этого процесс затем перестает использовать (но не освобождает) эту память на некоторое время, ОС может выбрать обмен частями этой памяти для замены, чтобы освободить место для других процессов (или кеша). Размер резидентного набора будет тогда уменьшаться на величину, которую поменял ядро. Если процесс активируется и начинает повторно использовать эту память, ядро ​​перезагрузит данные из свопинга, и размер резидентного набора снова увеличится.

ru_maxrssПоле struct rusageявляется «высоким водяным знаком» для резидентов установленного размера. Это указывает на пиковое использование RAM для этого процесса (при использовании RUSAGE_SELF).

Вы можете ограничить размер резидентного набора процесса, чтобы одно приложение не «съело» всю оперативную память в вашей системе и не заставляло другие приложения выполнять подкачку (или полностью отказывать из-за нехватки памяти).

Мат
источник