kstat, получение числа легких процессов, запущенных в зоне

Зоны SmartOS имеют ограничение или максимальное количество легких процессов, определенных в пакете зон. Чтобы проверить, имеют ли мои текущие настройки смысл, я бы хотел собрать общее количество легких процессов с течением времени (из зоны). У меня уже есть инструменты для сбора счетчиков kstat, поэтому я бы предпочел использовать их. Я заметил, что prstat обеспечивает lwps count и любая информация о том, как prstat получить это значение, может быть полезной.

В то же время я был в состоянии получить количество процессов, используя 'caps:*:nprocs_zone_*:usage' или же 'unix:0:system_misc:nproc' но ничего относительно легких процессов.

Подводя итог, хотелось бы знать:

  • если есть какой-либо счетчик kstat, представляющий общее количество lwps или счетчиков на процессы, которые я мог бы суммировать, чтобы получить это значение.
  • если нет, то как prstat получает общее количество lwps?
  • Есть ли другой способ получить это значение? (Надеюсь без разбора вывод прстать)

1 ответ

prstat запрашивает информацию в файловой системе /proc, пример запуска фермы для команды prstat показывает:

open("/proc/25841/psinfo", O_RDONLY)            = 158

Здесь хорошо документирован proc, в качестве альтернативы ищите "раздел man 4 страниц Форматы файлов Oracle".

В каждом каталоге /proc/[pid] существует каталог /proc/[pid]/lwp/. Например:

root@sol11:/proc/597/lwp# ls -l
total 35
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 1
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 10
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 11
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 12
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 13
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 14
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 15
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 16
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 17
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 18
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 19
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 2
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 20
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 21
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 22
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 23
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 24
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 26
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 27
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 28
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 29
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 3
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 30
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 31
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 33
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 34
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 35
dr-xr-xr-x   2 root     root         256 Jun  3 13:07 36
dr-xr-xr-x   2 root     root         256 Jun 16 11:16 37
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 4
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 5
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 6
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 7
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 8
dr-xr-xr-x   2 root     root         256 Jun  3 13:06 9

Запуск ps для того же процесса прочитает, что такое каждый lwp, и представит его обратно, этот конкретный pid относится к службе fmd.

root@sol11:/proc/597/lwp# ps -Lp 597
  PID   LWP LNAME            TTY        LTIME CMD
  597     1 -                ?           0:00 fmd
  597     2 fmd_timerq_exec  ?           0:04 fmd
  597     3 fmd-self-diagnosis ?           0:00 fmd
  597     4 sysevent-transport ?           0:00 fmd
  597     5 door_xcreate_startf ?           0:00 fmd
  597     6 door_xcreate_startf ?           0:00 fmd
  597     7 subscriber_event_handler ?           0:01 fmd
  597     8 fmd_door_server  ?           0:00 fmd
  597     9 fmd_thread_start ?           0:00 fmd
  597    10 cpumem-retire    ?           0:00 fmd
  597    11 ses-log-transport ?           0:04 fmd
  597    12 ext-event-transport ?           0:00 fmd
  597    13 door_xcreate_startf ?           0:00 fmd
  597    14 door_xcreate_startf ?           0:00 fmd
  597    15 sas-cabling      ?           0:01 fmd
  597    16 io-retire        ?           0:00 fmd
  597    17 eft              ?           0:00 fmd
  597    18 endurance-transport ?           0:00 fmd
  597    19 fdd-msg          ?           0:00 fmd
  597    20 disk-transport   ?           0:00 fmd
  597    21 sensor-transport ?           0:04 fmd
  597    22 -                ?           0:00 <defunct>
  597    23 syslog-msgs      ?           0:00 fmd
  597    24 disk-diagnosis   ?           0:00 fmd
  597    26 zfs-retire       ?           0:00 fmd
  597    27 fru-monitor      ?           0:02 fmd
  597    28 -                ?           0:00 fmd
  597    29 software-response ?           0:00 fmd
  597    30 enum-transport   ?           0:00 fmd
  597    31 non-serviceable  ?           0:00 fmd
  597    33 fabric-xlate     ?           0:00 fmd
  597    34 software-diagnosis ?           0:00 fmd
  597    35 zfs-diagnosis    ?           0:00 fmd
  597    36 umem_update_thread ?           0:06 fmd
  597    37 fmd_door_server  ?           0:00 fmd

Следующая команда должна проанализировать общее количество LWP для вас.

prstat -n 1,1 1 1 | nawk '/Total/ { print $4 }'

Запустите с zlogin -c, чтобы получить подробную информацию о LWP в зонах. Вы можете получить ту же информацию с помощью dtrace, но я не знаю, как это сделать. Опубликовать с вашими выводами, если вы узнаете...

Если вы хотите углубиться в информацию LWP, ключи -lL предоставляют подробную информацию о LWP, например:

root@sol11:/etc# ps -lLp 597
 F S    UID   PID  PPID   LWP LNAME              C PRI NI     ADDR     SZ    WCHAN TTY        LTIME CMD
 0 S      0   597     1     1 -                  0  40 20        ?  25470        ? ?           0:00 fmd
 0 S      0   597     1     2 fmd_timerq_exec    0  40 20        ?  25470        ? ?           0:04 fmd
 0 S      0   597     1     3 fmd-self-diagnosis   0  40 20        ?  25470        ? ?           0:00 fmd
 0 S      0   597     1     4 sysevent-transport   0  40 20        ?  25470        ? ?           0:00 fmd
 0 S      0   597     1     5 door_xcreate_startf   0  40 20        ?  25470        ? ?           0:00 fmd
 0 S      0   597     1     6 door_xcreate_startf   0  40 20        ?  25470        ? ?           0:00 fmd
 0 S      0   597     1     7 subscriber_event_handler   0  40 20        ?  25470        ? ?           0:01 fmd

НТН.

Другие вопросы по тегам