Я ищу способ из сценария оболочки получить использование подкачки для определенного процесса. Сверху можно отображать эту информацию, но только в интерактивном режиме. В пакетном режиме настройки будут отображаться только при наличии .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 байта)», а = заставляет его не включать заголовок столбца.