Почему значение 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
Автор этого ответа пытается сказать, что определение используемой памяти является сложным и разнообразным. В ядре нет ни одного места, где бы оно отслеживалось и сообщалось. Утилиты выполняют свою собственную интерпретацию многочисленных статистических данных, представляемых ядром.
Йохан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.