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
НТН.