Мне удалось вычислить использование неразделяемой памяти путем суммирования анонимных и стековых отображений, pmap -x
например,
sudo pmap -x $THE_PID |egrep 'anon|stack' | awk '{print $2}' | paste -sd+ | bc
но не могу найти способ получить подобную информацию вообще ps
. top
показывает SHR
столбец, но, похоже, не предлагает способа сортировки по неразделяемой памяти. Сортировка по RSS бесполезна, поскольку RSS содержит общие страницы, но только те общие страницы, которые затронул процесс.
Так что если у вас есть два процесса, оба использующие одно и то же общее адресное пространство в 16 ГБ, они будут сортироваться на основе того, какой из них затронул больше общей памяти. А не на основе того, какой из них выделил больше частной (не общей) памяти, если только оба не затронули одинаковое количество shmem или близко к этому.
Аналогичные проблемы возникают с сопоставлениями чтения/записи общих библиотек, а также с процессами fork
, которые были редактированы, но не редактированы exec
, которые совместно используют страницы копирования при записи от своего предка.
Это... бесполезно.
Я искал способы сортировки top
вывода по выражениям. Но если он поддерживает это в своем синтаксисе сортировки, я не могу понять.
Это кажется таким очевидным, но ps вообще не раскрывает общую информацию!
Пожалуйста, скажите мне, что я что-то упускаю.