Руководство по системному администрированию: контейнеры в Solaris - управление ресурсами и зонами

Глава 7 Администрирование элементов управления ресурсами (задачи)

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

Краткое описание механизма элементов управления ресурсами приведены в Глава 6Элементы управления ресурсами (обзор).

Администрирование элементов управления ресурсами (карта задач)

Задача 

Описание 

Инструкции 

Настройка элементов управления ресурсами 

Элементы управления ресурсами для проектов настраиваются в файле /etc/project.

Настройка элементов управления ресурсами

Получение или пересмотр значений элементов управления ресурсов для активных процессов, задач или проектов в локальной области действия. 

Опрос или изменение в рабочем режиме элементов управления ресурсами, связанных с активным процессом, задачей или проектом. 

Использование командыprctl

Просмотр или обновление глобального состояния элементов управления ресурсами в работающей системе 

Просмотр глобального состояния журналирования каждого элемента управления ресурсами по всей системе. Кроме того, настройка уровня журналирования syslog при превышении значений элементов управления.

Использование rctladm

Отчет о состоянии активных средств взаимодействия процессов (IPC) 

Отображение информации об активных средствах взаимодействия процессов (IPC). Определение объектов IPC, вносящих вклад в потребление ресурсов проектом.  

Использование команды ipcs

Определение достаточности процессорной мощности, выделенной для веб-сервера 

Настройка глобального действия для элемента управления ресурсами. Это действие позволяет получать извещение о любой сущности, для которой установлено слишком низкое значение элемента управления ресурсами. 

Определение достаточности процессорной мощности, выделенной для веб-сервера

Настройка элементов управления ресурсами

ProcedureНастройка максимального количества LWP для каждой задачи в проекте

Эта процедура позволяет добавить проект с названием x-files в файл /etc/project и установить максимальное количество LWP для задач, создаваемых в проекте.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Создайте проект с названием x-files, используя команду projadd с параметром -K. Для всех задач, создаваемых в проекте, устанавливается максимальное количество LWP, равное 3 .


    # projadd -K 'task.max-lwps=(privileged,3,deny)' x-files
    
  3. Просмотрите запись в файле /etc/project одним из следующих способов:

    • Введите следующее:


      # projects -l
      system
              projid : 0
              comment: ""
              users  : (none)
              groups : (none)
              attribs: 
      .
      .
      .
      x-files
              projid : 100
              comment: ""
              users  : (none)
              groups : (none)
              attribs: task.max-lwps=(privileged,3,deny)
    • Введите следующее:


      # cat /etc/project
      system:0:System:::
      .
      .
      .
      x-files:100::::task.max-lwps=(privileged,3,deny)

Пример 7–1 Пример сеанса

После выполнения этих действий при создании суперпользователем новой задачи в проекте x-files путем соединения проекта с newtask суперпользователь не сможет создать в этой задаче более трех LWP. Это можно проиллюстрировать следующим примером сеанса.


# newtask -p x-files csh

# prctl -n task.max-lwps $$
process: 111107: csh
NAME    PRIVILEGE    VALUE    FLAG   ACTION            RECIPIENT
task.max-lwps
        privileged       3       -   deny                      -
        system       2.15G     max   deny                      -
# id -p
uid=0(root) gid=1(other) projid=100(x-files)

# ps -o project,taskid -p $$
 PROJECT TASKID
 x-files    73

# csh        /* creates second LWP */

# csh        /* creates third LWP */

# csh        /* cannot create more LWPs */
Vfork failed
#

ProcedureНастройка нескольких элементов управления для проекта

Файл /etc/project может содержать параметры для ряда элементов управления ресурсами по каждому проекту, а также несколько пороговых значений для каждого элемента управления. Пороговые значения определяются в выражениях действия, разделяемых запятыми в случае указания нескольких значений.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Настройте элементы управления ресурсами для проекта x-files командой projmod с параметрами -s и -K:


    # projmod -s -K 'task.max-lwps=(basic,10,none),(privileged,500,deny);
    process.max-file-descriptor=(basic,128,deny)' x-filesone line in file
    

    Задаются следующие элементы управления:

    • Базовый (basic) элемент управления, не влияющий на максимальное количество LWP в задаче.

    • Привилегированный элемент управления deny, управляющий максимальным количеством LWP на задачу. Этот элемент управления приводит к отклонению любой попытки создания LWP, в результате которой будет превышено максимальное количество, как показано в предыдущем примере Настройка максимального количества LWP для каждой задачи в проекте.

    • Ограничение по максимальным дескрипторам файла для каждого процесса на уровне basic, приводящее к отклонению любого вызова open, превышающего максимальное значение.

  3. Просмотрите запись в файле одним из следующих способов:

    • Введите следующее:


      # projects -l
      .
      .
      .
      x-files
              projid : 100
              comment: ""
              users  : (none)
              groups : (none)
              attribs: process.max-file-descriptor=(basic,128,deny)
                       task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file
      
    • Введите следующее:


      # cat etc/project
      .
      .
      .
      x-files:100::::process.max-file-descriptor=(basic,128,deny);
      task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file
      

Использование командыprctl

Команда prctl используется для опроса и модификации элементов управления ресурсами, связанных с процессами, задачами или проектами, активными в системе. Для получения дополнительной информации см. справочную страницу prctl(1).

ProcedureИспользование команды prctl для вывода значений элементов управления ресурсами по умолчанию

Эту процедуру необходимо выполнять в системе, в которой не создавались и не изменялись элементы управления ресурсами. В файле /etc/system или в базе данных project должны находиться только значения, отличные от значений по умолчанию.

  1. Команду prctl можно ввести для любого процесса, например для интерпретатора команд, выполняющегося в текущий момент.


    # prctl $$
    process: 100337: -sh
    NAME    PRIVILEGE       VALUE    FLAG   ACTION                   RECIPIENT
    process.max-port-events
            privileged      65.5K       -   deny                             -
            system          2.15G     max   deny                             -
    process.crypto-buffer-limit
            system          16.0EB    max   deny                             -
    process.max-crypto-sessions
            system          18.4E     max   deny                             -
    process.add-crypto-sessions
            privileged        100       -   deny                             -
            system          18.4E     max   deny                             -
    process.min-crypto-sessions
            privileged         20       -   deny                             -
            system          18.4E     max   deny                             -
    process.max-msg-messages
            privileged      8.19K       -   deny                             -
            system          4.29G     max   deny                             -
    process.max-msg-qbytes
            privileged      64.0KB      -   deny                             -
            system          16.0EB    max   deny                             -
    process.max-sem-ops
            privileged        512       -   deny                             -
            system          2.15G     max   deny                             -
    process.max-sem-nsems
            privileged        512       -   deny                             -
            system          32.8K     max   deny                             -
    process.max-address-space
            privileged      16.0EB    max   deny                             -
            system          16.0EB    max   deny                             -
    process.max-file-descriptor
            basic             256       -   deny                        100337
            privileged      65.5K       -   deny                             -
            system          2.15G     max   deny                             -
    process.max-core-size
            privileged      8.00EB    max   deny                             -
            system          8.00EB    max   deny                             -
    process.max-stack-size
            basic           8.00MB      -   deny                        100337
            privileged      8.00EB      -   deny                             -
            system          8.00EB    max   deny                             -
    process.max-data-size
            privileged      16.0EB    max   deny                             -
            system          16.0EB    max   deny                             -
    process.max-file-size
            privileged      8.00EB    max   deny,signal=XFSZ                 -
            system          8.00EB    max   deny                             -
    process.max-cpu-time
            privileged      18.4Es    inf   signal=XCPU                      -
            system          18.4Es    inf   none                             -
    task.max-cpu-time
            system          18.4Es    inf   none                             -
    task.max-lwps
            system          2.15G     max   deny                             -
    project.max-contracts
            privileged      10.0K       -   deny                             -
            system          2.15G     max   deny                             -
    project.max-device-locked-memory
            privileged       499MB      -   deny                             -
            system          16.0EB    max   deny                             -
    project.max-port-ids
            privileged      8.19K       -   deny                             -
            system          65.5K     max   deny                             -
    project.max-shm-memory
            privileged      1.95GB      -   deny                             -
            system          16.0EB    max   deny                             -
    project.max-shm-ids
            privileged        128       -   deny                             -
            system          16.8M     max   deny                             -
    project.max-msg-ids
            privileged        128       -   deny                             -
            system          16.8M     max   deny                             -
    project.max-sem-ids
            privileged        128       -   deny                             -
            system          16.8M     max   deny                             -
    project.max-tasks
            system          2.15G     max   deny                             -
    project.max-lwps
            system          2.15G     max   deny                             -
    project.cpu-shares
            privileged          1       -   none                             -
            system          65.5K     max   none                             -
    zone.max-lwps
            system          2.15G     max   deny                             -
    zone.cpu-shares
            privileged          1       -   none                             -
            system          65.5K     max   none                             -

ProcedureИспользование команды prctl для отображения информации о выбранном элементе управления ресурсами

  1. Эта команда позволяет вывести максимальный дескриптор файла для текущего работающего интерпретатора команд.


    # prctl -n process.max-file-descriptor $$
    process: 110453: -sh
    NAME    PRIVILEGE       VALUE    FLAG   ACTION       RECIPIENT
    process.max-file-descriptor
            basic             256       -   deny            110453
            privileged      65.5K       -   deny                 -
            system          2.15G     max   deny     

ProcedureИспользование команды prctl для временного изменения значения

В этом примере команда prctl используется для временного добавления нового привилегированного значения, запрещающего использование более трех LWP на проект x-files. Результат можно сравнить с результатом Настройка максимального количества LWP для каждой задачи в проекте.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Выполните команду newtask для присоединения к проекту x-files.


    # newtask -p x-files
    
  3. Для проверки правильности присоединения к проекту можно воспользоваться командой id с параметром - p.


    # id -p
    uid=0(root) gid=1(other) projid=101(x-files)
  4. Добавьте новое привилегированное значение для project.max-lwps , ограничивающее количество LWP значением 3.


    # prctl -n project.max-lwps -t privileged -v 3 -e deny -i project x-files
    
  5. Проверьте результат.


    # prctl -n project.max-lwps -i project x-files
    process: 111108: csh
    NAME    PRIVILEGE    VALUE    FLAG   ACTION            RECIPIENT
    project.max-lwps
            privileged       3       -   deny                      -
            system       2.15G     max   deny                      -

ProcedureИспользование команды prctl для уменьшения значения элемента управления ресурсами

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Команда prctl с параметром -r используется для изменения самого низкого значения элемента управления ресурсами process.max-file-descriptor .


    # prctl -n process.max-file-descriptor -r -v 128 $$
    

ProcedureИспользование команды prctl для вывода, замены и проверки значений элементов управления для проекта

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Выведите значение project.cpu-shares для проекта group.staff.


    # prctl -n project.cpu-shares -i project group.staff
    project: 2: group.staff
    NAME    PRIVILEGE       VALUE    FLAG   ACTION     RECIPIENT
    project.cpu-shares
            privileged          1       -   none               -
            system          65.5K     max   none 
  3. Замените текущее значение project.cpu-shares , равное 1, значением 10.


    # prctl -n project.cpu-shares -v 10 -r -i project group.staff
    
  4. Выведите значение project.cpu-shares для проекта group.staff.


    # prctl -n project.cpu-shares -i project group.staff
    project: 2: group.staff
    NAME    PRIVILEGE       VALUE    FLAG   ACTION     RECIPIENT
    project.cpu-shares
            privileged         10       -   none               -
            system          65.5K     max   none 

Использование rctladm

Использование rctladm

Команда rctladm позволяет опрашивать и модифицировать глобальное состояние механизма элементов управления ресурсами во время выполнения. Для получения дополнительной информации см. справочную страницуrctladm(1M).

Например, команду rctladm с параметром -e можно использовать для включения глобального атрибута syslog для элемента управления ресурсами. При превышении значения элемента управления в журнал заносится уведомление на указанном уровне syslog. Для включения глобального атрибута syslog для process.max-file-descriptor используется следующая команда:


# rctladm -e syslog process.max-file-descriptor

При использовании без аргументов команда rctladmвыводит для каждого элемента управления ресурсами глобальные флаги, в том числе глобальный флаг типа.


# rctladm
process.max-port-events     syslog=off  [ deny count ]
process.max-msg-messages    syslog=off  [ deny count ]
process.max-msg-qbytes      syslog=off  [ deny bytes ]
process.max-sem-ops         syslog=off  [ deny count ]
process.max-sem-nsems       syslog=off  [ deny count ]
process.max-address-space   syslog=off  [ lowerable deny no-signal bytes ]
process.max-file-descriptor syslog=off  [ lowerable deny count ]
process.max-core-size       syslog=off  [ lowerable deny no-signal bytes ]
process.max-stack-size      syslog=off  [ lowerable deny no-signal bytes ]
.
.
.

Использование команды ipcs

Использование команды ipcs

Служебная программа ipcs используется для вывода информации по активным средствам взаимодействия процессов (IPC). Для получения дополнительной информации см. справочную страницу ipcs(1).

Вызов команды ipcs с параметром -J позволяет получить информацию о проекте, для ограничения которого выделен объект IPC.


# ipcs -J
    IPC status from <running system> as of Wed Mar 26 18:53:15 PDT 2003
T         ID      KEY        MODE       OWNER    GROUP    PROJECT
Message Queues:
Shared Memory:
m       3600      0       --rw-rw-rw-   uname    staff    x-files
m        201      0       --rw-rw-rw-   uname    staff    x-files
m       1802      0       --rw-rw-rw-   uname    staff    x-files
m        503      0       --rw-rw-rw-   uname    staff    x-files
m        304      0       --rw-rw-rw-   uname    staff    x-files
m        605      0       --rw-rw-rw-   uname    staff    x-files
m          6      0       --rw-rw-rw-   uname    staff    x-files
m        107      0       --rw-rw-rw-   uname    staff    x-files
Semaphores:
s          0      0       --rw-rw-rw-   uname    staff    x-files

Предупреждения по доступной мощности

Глобальное действие для элемента управления ресурсами позволяет получать уведомления о сущностях, сталкивающихся с чрезмерно низкими значениями элементов управления ресурсами.

Например, предположим, что требуется определить, достаточно ли процессорной мощности выделено веб-серверу для его типичной нагрузки. Для этого можно проанализировать результаты работы команды sar и определить время простоя процессора и среднюю нагрузку. Также можно исследовать данные расширенного учета и определить количество одновременно работающих процессов веб-сервера.

Однако более простой подход заключается в размещении веб-сервера в задаче. Затем командой syslog можно задать глобальное действие, отправляющее уведомление при каждом превышении задачей запланированного количества LWP, соответствующего возможностям оборудования.

Для получения дополнительной информации см. справочную страницу sar(1).

ProcedureОпределение достаточности процессорной мощности, выделенной для веб-сервера

  1. С помощью команды prctl установите привилегированный (принадлежащий суперпользователю) элемент управления ресурсами для задач, содержащих процесс httpd. Задайте для каждой задачи ограничение по количеству LWP, равное 40, и отключите все локальные действия.


    # prctl -n task.max-lwps -v 40 -t privileged -d all `pgrep httpd`
    
  2. Активируйте глобальное действие системного журнала для элемента управления ресурсами task.max-lwps.


    # rctladm -e syslog task.max-lwps
    
  3. Проверьте, срабатывает ли элемент управления ресурсами под рабочей нагрузкой.

    Если срабатывает, появится сообщение /var/adm/messages, подобное следующему:


    Jan  8 10:15:15 testmachine unix: [ID 859581 kern.notice] 
    NOTICE: privileged rctl task.max-lwps exceeded by task 19