Ubuntu Linux: обробляйте своп-пам'ять та використання пам'яті


14

Мій Ubuntu споживає більше пам'яті, ніж показує менеджер завдань:

sudo ps -e --format rss  | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29

free -m

             total       used       free     shared    buffers     cached
Mem:          3860       2765       1094          0          3        300
-/+ buffers/cache:       2461       1398
Swap:         2729       2374        354

Це дивно. Чи може хтось пояснити цю різницю?

Але що важливіше: я хотів би знати, скільки пам’яті справді використовує процес. Я не хочу знати розмір віртуальної пам’яті, а, скоріше, резидентну пам’ять плюс обмін процесом.

Я також спробував вивести параметр формату "sz" 'ps', але сума цього велика (16000 МБ) (параметр 'розмір' дає 36700 МБ). Чи є інші варіанти?

Я дуже хочу скористатися цим, щоб визначити, які програми / процеси споживають багато пам’яті (та обміняються ними), щоб вбити їх, тому що пам'ять цінна :-) Це просто не має сенсу, тому я прошу тут.

Вихід / proc / meminfo:

MemTotal:        3952812 kB                
MemFree:         1119192 kB
Buffers:            2676 kB
Cached:           290068 kB
SwapCached:       160980 kB
Active:          1805396 kB
Inactive:         731680 kB
Active(anon):    1745820 kB
Inactive(anon):   689184 kB
Active(file):      59576 kB
Inactive(file):    42496 kB
Unevictable:         148 kB
Mlocked:             148 kB
SwapTotal:       2795272 kB
SwapFree:         390900 kB
Dirty:              1984 kB
Writeback:             0 kB
AnonPages:       2085472 kB
Mapped:            67432 kB
Shmem:            190676 kB
Slab:              88012 kB
SReclaimable:      42704 kB
SUnreclaim:        45308 kB
KernelStack:        5496 kB
PageTables:        87860 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4771676 kB
Committed_AS:    9522364 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      374404 kB
VmallocChunk:   34359330144 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       61440 kB
DirectMap2M:     4030464 kB

Я мушу зазначити, що "1043,84" не дуже далеко від "1178", це число, яке ви збираєтеся отримати при тому розрахунку, який ви робите.
cjc

У мене було буквально однакове питання на unix.stackexchange (+1). Патрік теж підірвав мій погляд: P-- unix.stackexchange.com/questions/34795/…
GoldenNewby

Відповіді:


10

Система віртуальної пам’яті Linux не така вже й проста. Ви не можете просто скласти всі поля RSS і отримати значення, про usedяке повідомляє free. Причин для цього багато, але я потраплю на пару найбільших.

  • Коли процес розщедриться, і батько, і дитина покажуть однаковий RSS. Однак у Linux працює copy-on-writeтак, що обидва процеси реально використовують однакову пам'ять. Тільки коли один із процесів модифікує пам'ять, він насправді буде дублюватися. Таким чином, це призведе freeдо меншої кількості topRSS-суми.

  • Значення RSS не включає спільну пам'ять. Оскільки спільна пам'ять не належить жодному процесу, topне включає її в RSS. Таким чином, це призведе до того, що freeкількість буде більшим, ніж topсума RSS.


О, дякую! Я завжди думав, що free -m показує фактичну суму спільної пам'яті всієї системи. Але як вказує "man ps": "Стовпчик спільної пам'яті слід ігнорувати; він застарілий".
Девід Холтер

Вибачте, я не можу прийняти цю відповідь, оскільки вона не відповідає проблемі свопу, але все-таки дякую!
Девід Хальтер

@DavidHalter яка проблема підкачки? Надана мною інформація стосується всієї пам'яті, включаючи своп.
Патрік

загальна пам’ять насправді не велика, як правило? Принаймні, це я бачив у менеджері завдань. Але мій своп досить широко використовується: 1035 Мб; Сума PS становить 1 ГБ, а сума swap + rss> 2 ГБ. Я хочу побачити, скільки пам’яті справді використовує процес, а не лише rss. Ще цікавішим буде те, наскільки обмінна пам'ять використовує процес.
Девід Хальтер

1
@DavidHalter, якщо ви хочете побачити, скільки пам’яті використовує процес (включаючи спільну), перегляньте стовпець «VSZ».
Патрік

1

Я думаю, вам краще довіряти виходу "безкоштовно", наскільки йде загальне використання пам'яті, і довіряти "ps" для загального уявлення про те, скільки пам'яті використовує один процес.

Просто тому, що сума значень RSS "ps" не дорівнює "безкоштовно", не заважає вам сортувати свої процеси за RSS та оцінювати найбільші за вбивство.

Якщо говорити, якщо всі ваші зусилля спрямовані лише на те, щоб переконатися, що машина може перейти у сплячку, створення більшої кількості свопів (у разі необхідності у вигляді файлу на диску), мабуть, простіший шлях.


1

Нарешті я отримав відповідь на своє запитання. Існує програма під назвою smem (на Ubuntu / Debian apt install smem), яка дозволяє окремо перелічувати своп і використану пам'ять.

Тут можна знайти кілька різних способів перерахування свопів: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/ .

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