Почему значение VSIZE в верхней части отличается от значения VSZ (размер виртуального набора) в пс?

9

Я знаю, что VSZ psпредназначен для общего адресного пространства, выделенного для приложения, и иногда его называют псевдонимом vsize (упомянуто на странице руководства psпо Linux), но каково определение VSIZE top? Этот верхний вывод на iPhone отличается от верхнего на Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Ральф Вен
источник
Я не могу воспроизвести это ни на одной из моих машин Дарвина. Это заставляет меня думать, что у оболочки, которую они установили на iphone, был странный набор блоков?
полином
похоже, что они рассчитывают RSIZE / rss таким же образом, но ps сообщает о vsz в 2.5 раза больше, чем сообщается top. может быть, topна IOS не включает общие объекты в vsize, или что-то.
Тим Кеннеди
«Этот топовый вывод от iPhone отличается от топового в Linux» - не удивительно, не так ли?
Пойдж

Ответы:

5

Система памяти Linux заполнена многими подпрограммами утилит оптимизации памяти и совместного использования памяти, что делает саму идею о том, как память распределяется и используется между ними, громоздким подходом. Вывод ps и других связанных с ps команд все обрабатывают их вывод из данных под /procфайловой системой. в частностиpsRSS, (резидентный размер памяти) и VSIZE (размер виртуальной памяти) оба важны, однако VSIZE не показывает точное использование памяти, и разница между VSIZE и rss является тем, что фактически предназначено и выделено программе во время инициализации, но может быть еще не ссылка. Например, программа может иметь множество связанных библиотек, но они еще не загружены, потому что на них еще нет ссылок в реальном времени выполнения программы. RSS дает общий объем памяти, фактически используемый программой, но может не дать истинную картину потребления памяти, поскольку большая часть выделенной памяти может использоваться совместно с другими экземплярами того же процесса или других процессов. Взгляд вниз /proc/<processid>/mapsможет дать приблизительное представление о том, как использовалась память, но иногда они могут вводить в заблуждение. использованиеpmap -x <pid> из командной строки, полезно увидеть распространение.

Часто лучшие утилиты freeи vmstat. freeпредоставит вам общую информацию о текущем потреблении памяти, а vmstat поможет вам узнать, как часто оно обновляется.

Никхил Мулли
источник
Другая причина или вдумчивое объяснение, почему не следует считать, что ps дает правильное использование памяти процесса. Прочитайте это по адресу virtualthreads.blogspot.com/2006/02/…
Никхил Мулли,
2
Автор этого ответа пытается сказать, что определение используемой памяти является сложным и разнообразным. В ядре нет ни одного места, где бы оно отслеживалось и сообщалось. Утилиты выполняют свою собственную интерпретацию многочисленных статистических данных, представляемых ядром.
Йохан