Скажем, у меня есть процесс, использующий 200 МБ памяти, и это fork () s:
python -c "import os; data='x'*200000000; os.fork(); raw_input()"
Такие программы, как 'top', будут отображать каждый процесс, занимающий 200 МБ, с очень небольшим объемом памяти SHRd, поэтому создается впечатление, что в целом процессы используют 400 МБ. Однако, поскольку fork () реализует копирование при записи (COW) для страниц памяти процесса, в действительности процессы используют всего 200 МБ.
Почему сверху не отображается, какая часть памяти занимает КОРОВА? Есть ли способ сделать это? Или я могу использовать другую команду?
Примечание. «Top» в OSX, кажется, имеет столбец RSHRD, который делает то, что я ожидал. У меня вопрос по Linux.
Вы можете получить такую информацию из /proc/<pid>/smaps
файл для каждого процесса в виде Pss
запись (сокращение от «Пропорциональный размер доли»).
В приведенном выше примере с 200 МБ, «совместно используемыми» между двумя процессами, каждый процесс будет отображать 100 МБ в записи PSS для этого сопоставления, то есть память распределяется равномерно между процессами, которые разделяют ее (до тех пор, пока она не будет скопирована и не будет разделена любым процессом).
Вот отрывок из того, что вы опубликовали:
$ top
...
30986 me 20 0 790m 769m 2200 S 0 4.8 0:00.48 python3.2
30987 me 20 0 790m 767m 224 S 0 4.8 0:00.00 python3.2
$ cat /proc/30986/smaps
...
0119a000-015b7000 rw-p 00000000 00:00 0 [heap]
Size: 4212 kB
Rss: 3924 kB
Pss: 1992 kB
...
7fa06b020000-7fa09ab11000 rw-p 00000000 00:00 0
Size: 781252 kB
Rss: 781252 kB
Pss: 390626 kB
...
7fff8e45a000-7fff8e489000 rw-p 00000000 00:00 0 [stack]
Size: 192 kB
Rss: 160 kB
Pss: 82 kB
...
(Есть много материала в этих файлах, включая сопоставления для общих библиотек, которые потенциально могут использоваться многими процессами, и, таким образом, каждый процесс получает для них лишь небольшую часть в своей записи PSS.)
Вот хорошая статья об этом: ELC: Сколько памяти действительно используют приложения?
Я не знаю распространенного инструмента, похожего на топ, для отображения этой информации, и я не думаю, что ps
есть варианты показать это либо к сожалению. В статье указывается на репозиторий со скриптами Python, который называется pagemap
Мэтта Макколла, который вы могли бы использовать или адаптировать.
Бесстыдная вилка: вы найдете несколько сообщений на Unix и Linux о PSS и smaps
файл, если вам это интересно.