Як я можу дізнатись, чи використовуються процеси підкачки?


10

У мене вершина звітів про сервер linux про 9 Гб свопу: верх

Але я не можу зрозуміти, де він використовується свопом, деякі результати google сказали, що Oнаступні комади pпоказуватимуть використання swap у процесі. Але як показано на наведеному вище зображенні, з короткої суми стовпця SWAP видно, що використовується своп> 10 Гб, і звідки береться цифра 9 ГБ для використання свопів?

Топ повідомляє, що близько 96492 кб оперативної пам’яті використовується буферами. Чи можу я щось зробити, щоб використати це, замість того, щоб використовувати своп?


1
Вгорі (на вказівній сторінці) обчислюється, що SWAP буде ВІРТУАЛЬНО - ФІЗИЧНЕ використання оперативної пам'яті. Не зовсім точний з моїх експериментів.
lornix

Відповіді:


6

Цілком можливо, що кілька програм будуть використовувати одну і ту ж область свопу, тому про неї повідомлять двічі.

Не потрібно намагатися говорити Linux використовувати зону буфера, а не своп - це вже дуже розумно щодо того, що він робить. Якщо ви використовуєте 9gb swap та 9gb буфера, це гарна річ ... це означає, що Linux розуміє, що 9gb матеріалів, завантажених у пам'ять, не використовується активно, тому більш ефективно замінити його на диск, щоб ваш буфер може збільшуватися і підвищувати вашу ефективність.


РЕДАКТУВАННЯ: Якщо ви додасте всю пам'ять, яка використовується кожним процесом, ви отримаєте набагато більше, ніж фізична ОЗУ. Це пояснюється тим, що спільні бібліотеки використовуються багатьма програмами, а також те, як Linux обробляє виделки - це не дублює всю програму в пам'яті, а лише дублює частини, які відрізняються між двома екземплярами. У деяких випадках відеопам'ять може бути показана як частина процесу X - я думаю, що це зробили старі карти Voodoo3. Можуть бути й інші випадки, коли "фантомна" пам'ять також може з'являтися вгорі.


Я не думаю, що спільні бібліотеки не слід вважати свопом, тому що при запуску системи не використовується обмін, але багато спільних бібліотек вже завантажені. У будь-якому разі, я бачу, що моя система використовує близько 9 ГБ swap-розділу, я просто хочу дізнатися, який процес використовував більшість свопів (виключаючи бібліотеки спільного використання, файл карти пам'яті ...)
майстер

3

Розбір підкаталогу / proc:

Як баш сценарій:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

Вихід може бути відсортований Hi-Lo трубопроводом для сортування:

{blah}| sort -rn

Звичайно, перепишіть це улюбленою мовою тижня за вашим бажанням. Мій Awk-fu не сильний.

(вирізати-п-пасти)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr


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