系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones

使用 prctl 命令

使用 prctl 命令,可以对与系统上的活动进程、任务或项目关联的资源控制进行运行时询问和修改。有关更多信息,请参见 prctl(1) 手册页。

Procedure如何使用 prctl 命令显示缺省资源控制值

必须在未设置或更改任何资源控制的系统上使用此过程。/etc/system 文件或 project 数据库中只能有非缺省条目。

  1. 在任意进程(如正在运行的当前 shell)中使用 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. 显示正在运行的当前 shell 的最大文件描述符。


    # 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 命令临时添加一个新的权限值,以便拒绝在每个 x-files 项目中使用三个以上的 LWP。可将此结果与如何为项目中的每个任务设置最大 LWP 数中的结果进行对比。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”

  2. 使用 newtask 加入 x-files 项目。


    # newtask -p x-files
    
  3. 使用带有 -p 选项的 id 命令检验是否已加入正确的项目。


    # id -p
    uid=0(root) gid=1(other) projid=101(x-files)
  4. project.max-lwps 添加一个新的权限值,将 LWP 数限制为三个。


    # 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. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”

  2. 使用带有 -r 选项的 prctl 命令更改 process.max-file-descriptor 资源控制的最低值。


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

Procedure如何使用 prctl 显示、替换和检验项目的控制值

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:基本管理》中的“使用 RBAC 和 Solaris 管理工具(任务图)”

  2. 显示项目 group.staffproject.cpu-shares 的值。


    # 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-shares1 替换为值 10


    # prctl -n project.cpu-shares -v 10 -r -i project group.staff
    
  4. 显示项目 group.staffproject.cpu-shares 的值。


    # 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