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