Назад | Перейти на главную страницу

получить использование подкачки для процесса

Я ищу способ из сценария оболочки получить использование подкачки для определенного процесса. Сверху можно отображать эту информацию, но только в интерактивном режиме. В пакетном режиме настройки будут отображаться только при наличии .toprc, но вы не можете указать конкретный .toprc в командной строке. я нашел этот сценарий, но на моем сервере нет записей подкачки в / proc / * / smaps:

# find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi swap '{}'/smaps \;
#

поэтому сценарий просто выводит 0 для каждого процесса.

Есть ли способ найти эту информацию? Я нахожусь на RHEL5.1 2.6.18-53.el5 x86_64.

Редактировать:

Чтобы было ясно, когда я спрашиваю об «использовании подкачки», я имею в виду объем памяти, используемый процессом, который был выгружен в файловую систему подкачки (что в настоящее время не находится в основной памяти). Не предполагая лучшего способа, я собираюсь по умолчанию вычислять его с помощью (virtual - rss) через значения из ps -o vsz,rss.

Интересный вопрос, который заставил меня некоторое время чесать затылок.

Во-первых, почему у вас нет строки Swap: хотя теоретически она была добавлена ​​в ядре 2.6.16, она не отображалась в RHEL до версии 5.3 или около того (ядро 2.6.18-99.el5). Вот фиксация (к сожалению, недоступна в RH Bugzilla; если у вас есть учетная запись с соответствующими привилегиями, идентификатор Bugzilla - 443749). http://sophie2.aero.jussieu.fr/distrib/Scientific%20Linux/5x/i386/by-pkgid/351d529f9beeb4e5d936a6d5e3e7813a/files/645

Во-вторых, это означает, что верхние данные ненадежны, поскольку они не считываются из smaps (т.е. это virt-res):

    case P_SWP:
       MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident), w, s));

В-третьих, я с сожалением сообщаю, что ядро ​​- это Единый Истинный Оракул в отношении того, сколько используется свопинг, и, насколько я могу сказать, различные патчи, делающие информацию доступной в smaps и статусе, являются единственным способом раскрыть эту информацию. К сожалению, я считаю обновление ядра единственным способом получить точную информацию; либо путем исправления источника самостоятельно (образец патча, без гарантии) или обновление до ядра 2.6.18-99.el5.

Я хотел бы найти более простой ответ; винить Линуса.

Смотреть в /proc/<pid>/status. Вы увидите VmSwap линия.

Похоже, из пс (1) страница руководства для CentOS 5 (1), что вы можете указать vsize (VSZ) в качестве поля вывода, например:

/bin/ps -p $pid -o vsize=

сделать трюк для вас? Это извлекает «размер виртуальной памяти процесса в КиБ (единицы по 1024 байта)», а = заставляет его не включать заголовок столбца.