Чому значення VSIZE вгорі відрізняється від значення VSZ (розмір віртуального набору) у ps?


9

Я знаю, що VSZ ps- це загальний адресний простір, виділений для програми, і іноді псевдонім як vsize (згадується на man-сторінці 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 рази більше, ніж повідомляється вгорі. можливо, topIOS не включає спільні об'єкти в vsize, або щось таке.
Тім Кеннеді

"Цей топ-вихід від iPhone відрізняється від вершини в Linux" - це не сюрприз, чи не так?
poige

Відповіді:


5

Система пам’яті Linux наповнена безліччю утиліт утиліти оптимізації пам’яті та обміну пам’яттю, що робить саму ідею того, як поділяється пам’ять і споживається серед неї, громіздкий підхід. Вихід PS та інших команд, пов'язаних з PS, все покращує їх вихід із даних під /procфайловою системою. Особливоps, RSS (пам'ять розміру резидента) та VSIZE (розмір віртуальної пам'яті) є важливими, однак VSIZE не показує точне використання пам'яті, а різниця між VSIZE та rss - це те, що насправді призначено та виділено програмі під час ініціалізації, але можливо, ще не посилаються. Як і у програми, можливо, є багато пов'язаних бібліотек, але вони ще не завантажені, оскільки вони ще не посилаються на фактичну програму. RSS дає загальну пам'ять, яку фактично використовує програма, але може не дати справжньої картини споживання пам'яті, оскільки більша частина виділеної пам'яті може бути спільною з іншими прикладами того ж процесу чи інших процесів. Дивлячись нижче, /proc/<processid>/mapsможна дати грубе уявлення про те, як використовується пам'ять, але вони спокійні, іноді можуть вводити в оману. Використовуйтеpmap -x <pid> з командного рядка, корисно побачити розповсюдження.

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


Ще одна причина або продумане пояснення, чому PS НЕ слід вважати таким, що дає правильне використання пам'яті процесу. Читайте це на сайті virtualthreads.blogspot.com/2006/02/…
Nikhil Mulley

2
Справжня відповідь намагається сказати, що визначення пам'яті, що використовується, є складним і різноманітним. У ядрі немає єдиного місця, де воно відстежується та повідомляється. Утиліти виконують своє власне тлумачення численних статистичних даних, про які повідомляє ядро.
Йохан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.