Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161763
  • 博文数量: 51
  • 博客积分: 318
  • 博客等级: 二等列兵
  • 技术积分: 315
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-12 10:44
文章分类
文章存档

2011年(51)

分类: IT职场

2011-02-17 13:24:01

   AIX 用户使用的系统资源限制包括两个概念 --- 硬限制(hard limits) 和软限制(soft limits)。
   
   hard limits自AIX 4.1版本开始引入。hard limits 应由AIX系统管理员设置,只有security组的成员可以将此值增大,
   用户本身可以减小此限定值,但是其更改将随着该用户从系统退出而失效。使用下列命令可以查看hard limits的限定值:
   
   ulimit -Ha
   
   soft limits 是AIX核心使用的限制进程对系统资源的使用的上限值。此值可由任何人更改,但不能超出
   hard limits值。这里要注意的是只有security组的成员可使更改永久生效,普通用户的更改在其退出系统 
   后将失效。使用以下命令可以查看soft limits的设置:
   
   ulimit -a
   
   在/etc/security/limits 将stack值设为了-1 为何用ulimit -a 看到的是   4194304?
   
   出现这种问题的原因是在您的操作系统中设置了默认的stack的“硬限制”(hard limit)。要解决这个问题,您需要在/etc/security/limits中设置stack的新的硬限制(hard limit)为无限,然后再设置stack的限制。如:
   default:
   fsize = 2097151
   core = 2097151
   cpu = -1
   data = 262144
   rss = 65536
   stack_hard = -1
   stack = -1
   nofiles = 2000
   然后用受影响的用户账户重新登录并运行ulimit -a命令,新的stack的限制应该成为无限:
   #ulimit -a
   time(seconds) unlimited
   file(blocks) unlimited
   data(kbytes) 131072
   stack(kbytes) unlimited
   memory(kbytes) 32768
   coredump(blocks) 2097151
   nofiles(descriptors) 2000
   
   
   
   To view the current value specified for these shell limits, and to change them if necessary:
   
   1.Enter the following command:
   
   # smit chuser
   
   很多问题也会由设置不当而引起,这些值可以通过ulimit -a来查看:
   
   PEKAX528:/>ulimit -a
   time(seconds)        unlimited
   file(blocks)         unlimited
   data(kbytes)         unlimited
   stack(kbytes)        4194304
   memory(kbytes)       32768
   coredump(blocks)     unlimited
   nofiles(descriptors) 2000
   
   但是这些都是什么含义呢?下面这段文字看了就明白了。
   
   PEKAX528:/>more /etc/security/limits 
   *
   * Sizes are in multiples of 512 byte blocks, CPU time is in seconds
   *
   * fsize            --- soft file size in blocks
   * core             --- soft core file size in blocks
   * cpu              --- soft per process CPU time limit in seconds
   * data             --- soft data segment size in blocks
   * stack            --- soft stack segment size in blocks
   * rss               --- soft real memory usage in blocks
   * nofiles          --- soft file descriptor limit
   * fsize_hard    --- hard file size in blocks
   * core_hard    --- hard core file size in blocks
   * cpu_hard     --- hard per process CPU time limit in seconds
   * data_hard    --- hard data segment size in blocks
   * stack_hard   --- hard stack segment size in blocks
   * rss_hard       --- hard real memory usage in blocks
   * nofiles_hard --- hard file descriptor limit
   *
   * The following table contains the default hard values if the
   * hard values are not explicitly defined:
   *
   *   Attribute        Value
   *   ==========    ============
   *   fsize_hard    set to fsize
   *   cpu_hard      set to cpu
   *   core_hard         -1
   *   data_hard         -1
   *   stack_hard      8388608 
   *   rss_hard          -1
   *   nofiles_hard      -1
   *
   * NOTE: A value of -1 implies "unlimited"
   *
   
   default:
           fsize = 2097151
           core = 2097151
           cpu = -1
           data = 262144
           rss = 65536
           stack = 65536
           nofiles = 2000
   
   root:
           fsize = -1
           data = -1
           stack = -1
           core = -1
   
   daemon:
   
   bin:
   
   sys:
   
   adm:
   
   uucp:
   
   guest:
   
   nobody:
   
   lpd:
   
   db2inst1:
           core = -1
           rss = -1
           fsize = -1
           data = 491519
   
   oracle:
       fsize = -1
       data = -1
       stack = -1
       core = -1
       fsize_hard = -1
       cpu_hard = -1
       data_hard = -1
       stack_hard = -1
       core_hard = -1
       core_hard = -1
       rss = -1
       nofiles = 4000

 

 

ulimit 命令

设置或报告用户资源极限。

语法

ulimit [  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ] [ Limit ]

描述

ulimit 命令设置或报告用户进程资源极限,如 /etc/security/limits 文件所定义。文件包含以下缺省值极限:

fsize = 2097151

core = 2097151

cpu = -1

data = 262144

rss = 65536

stack = 65536

nofiles = 2000

当新用户添加到系统中时,这些值被作为缺省值使用。当向系统中添加用户时,以上值通过  命令设置,或通过  命令更改。

极限分为软性和硬性。通过 ulimit 命令,用户可将软极限更改到硬极限的最大设置值。要更改资源硬极限,必须拥有 root 用户权限。

很多系统不包括以上一种或数种极限。 特定资源的极限在指定 Limit 参数时设定。Limit 参数的值可以是每个资源中指定单元中的数字,或者为值 unlimited。要将特定的 ulimit 设置为unlimited,可使用词 unlimited。

注:在 /etc/security/limits 文件中设置缺省极限就是设置了系统宽度极限, 而不仅仅是创建用户时用户所需的极限。

省略 Limit 参数时,将会打印出当前资源极限。除非用户指定 -H 标志,否则打印出软极限。当用户指定一个以上资源时,极限名称和单元在值之前打印。如果未给予选项,则假定带有了-f 标志。

由于 ulimit 命令影响当前 shell 环境,所以它将作为 shell 常规内置命令提供。如果在独立的命令执行环境中调用该命令,则不影响调用者环境的文件大小极限。以下示例中正是这种情况:

nohup ulimit -f 10000

env ulimit 10000

一旦通过进程减少了硬极限,若无 root 特权则无法增加,即使返回到原值也不可能。

关于用户和系统资源极限的更多信息,请参见 AIX 5L Version 5.2 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimitsetrlimit 或 vlimit子例程。

标志

-a

列出所有当前资源极限。

-c

以 512 字节块为单位,指定核心转储的大小。

-d

以 K 字节为单位指定数据区域的大小。

-f

使用 Limit 参数时设定文件大小极限(以块计),或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。

-H

指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限。

-m

以 K 字节为单位指定物理存储器的大小。

-n

指定一个进程可以拥有的文件描述符的数量的极限。

-s

以 K 字节为单位指定堆栈的大小。

-S

指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者。

-t

指定每个进程所使用的秒数。

退出状态

返回以下退出值:

0

成功完成。

>0

拒绝对更高的极限的请求,或发生错误。

示例

要将文件大小极限设置为 51,200 字节,输入:

ulimit -f 100

文件

/usr/bin/ksh

包含 ulimit 内置命令。

 

在linux上的程序放到AIX560上,结果一跑就coredown.
用ulimit -a查看限制,发现内存限制太小。将内存改为无限制(也可以用smit),
ulimit -m unlimited 内存
ulimit -s unlimited 堆栈
ulimit -d unlimited 数据段
发现程序最多可以申请256M内存,再多还是coredown。
再将
export LDR_CNTRL=MAXDATA=0x40000000 1G
export LDR_CNTRL=MAXDATA=0x80000000 2G
也最多可以申请2G空间,以上是用32位编译的。
采用64位编译(-q64)后。
export LDR_CNTRL=MAXDATA=0xD0000000 
export LDR_CNTRL=MAXDATA=0xF0000000 4G
可以最多申请4G空间。
最后设置
export LDR_CNTRL=MAXDATA=0xF00000000 4G
几乎可以申请无限空间(超出物理内存)。
设置该环境变量同时,可以设置使用dsa属性和是否使用最大页
eg: 
export LDR_CNTRL=MAXDATA=0xF00000000@dsa
export LDR_CNTRL=MAXDATA=0xF00000000@LARGE_PAGE_DATA=y
如果使用32位编译的话,可以通过共享内存来扩展超过2G的内存申请。
以上环境变量仅对当前对话有效,也可以单独设置到程序中,
采用编译或者启动时添加选项都可以
eg:
cc -bmaxdata:0xD0000000/dsa sample.o 
LDR_CNTRL=MAXDATA=0xF00000000 a.out

 

该值(nofiles)只能在AIX 4.3.1 或以后的版本中更改。

上述定义作为默认值存放在文件 /etc/security/limits 中,在新用户被加进系统后生效。直接更改此文件中的定义值需要将系统重新启动以便使更改生效。将相应值该为"-1" 表示不受 soft limits的限制(unlimited)。

下面我们将就各字段逐一进行介绍:

fsize 用户创建的文件大小限制。此定义值(512字节为单位)为该用户可以生成的最大文件的大小。
core 生成的core文件大小的限制(512字节为单位)。
cpu 用户进程可用cpu的限定值(以秒为单位)。普通用户只能将此值减小,root可以将此值增大。这里要注意的
是进程使用CPU的时间取决于AIX Kernel(核心程序)进程调度算法,该值在此仅做参考。
data 进程数据段大小的限定值(以字节为单位)。
stack 进程堆栈段大小的限定值(以字节为单位)。
rss 进程常驻内存段的限定值(以字节为单位)。AIX核心并不参考此限定。
nofiles 进程中打开文件的最大数量。

 

 

 

 

AIXulimit -a 输出的含义

 

AIX 用户使用的系统资源限制包括两个概念 --- 硬限制(hard limits) 和软限制(soft limits)。
   
   hard limits自AIX 4.1版本开始引入。hard limits 应由AIX系统管理员设置,只有security组的成员可以将此值增大,
   用户本身可以减小此限定值,但是其更改将随着该用户从系统退出而失效。使用下列命令可以查看hard limits的限定值:
   
   ulimit -Ha
   
   soft limits 是AIX核心使用的限制进程对系统资源的使用的上限值。此值可由任何人更改,但不能超出
   hard limits值。这里要注意的是只有security组的成员可使更改永久生效,普通用户的更改在其退出系统 
   后将失效。使用以下命令可以查看soft limits的设置:
   
   ulimit -a
   
   在/etc/security/limits 将stack值设为了-1 为何用ulimit -a 看到的是   4194304?
   
   出现这种问题的原因是在您的操作系统中设置了默认的stack的“硬限制”(hard limit)。要解决这个问题,您需要在/etc/security/limits中设置stack的新的硬限制(hard limit)为无限,然后再设置stack的限制。如:
   default:
   fsize = 2097151
   core = 2097151
   cpu = -1
   data = 262144
   rss = 65536
   stack_hard = -1
   stack = -1
   nofiles = 2000
   然后用受影响的用户账户重新登录并运行ulimit -a命令,新的stack的限制应该成为无限:
   #ulimit -a
   time(seconds) unlimited
   file(blocks) unlimited
   data(kbytes) 131072
   stack(kbytes) unlimited
   memory(kbytes) 32768
   coredump(blocks) 2097151
   nofiles(descriptors) 2000
   
   
   
   To view the current value specified for these shell limits, and to change them if necessary:
   
   1.Enter the following command:
   
   # smit chuser
   
   很多问题也会由设置不当而引起,这些值可以通过ulimit -a来查看:
   
   PEKAX528:/>ulimit -a
   time(seconds)        unlimited
   file(blocks)         unlimited
   data(kbytes)         unlimited
   stack(kbytes)        4194304
   memory(kbytes)       32768
   coredump(blocks)     unlimited
   nofiles(descriptors) 2000
   
   但是这些都是什么含义呢?下面这段文字看了就明白了。
   
   PEKAX528:/>more /etc/security/limits 
   *
   * Sizes are in multiples of 512 byte blocks, CPU time is in seconds
   *
   * fsize            --- soft file size in blocks
   * core             --- soft core file size in blocks
   * cpu              --- soft per process CPU time limit in seconds
   * data             --- soft data segment size in blocks
   * stack            --- soft stack segment size in blocks
   * rss               --- soft real memory usage in blocks
   * nofiles          --- soft file descriptor limit
   * fsize_hard    --- hard file size in blocks
   * core_hard    --- hard core file size in blocks
   * cpu_hard     --- hard per process CPU time limit in seconds
   * data_hard    --- hard data segment size in blocks
   * stack_hard   --- hard stack segment size in blocks
   * rss_hard       --- hard real memory usage in blocks
   * nofiles_hard --- hard file descriptor limit
   *
   * The following table contains the default hard values if the
   * hard values are not explicitly defined:
   *
   *   Attribute        Value
   *   ==========    ============
   *   fsize_hard    set to fsize
   *   cpu_hard      set to cpu
   *   core_hard         -1
   *   data_hard         -1
   *   stack_hard      8388608 
   *   rss_hard          -1
   *   nofiles_hard      -1
   *
   * NOTE: A value of -1 implies "unlimited"
   *
   
   default:
           fsize = 2097151
           core = 2097151
           cpu = -1
           data = 262144
           rss = 65536
           stack = 65536
           nofiles = 2000
   
   root:
           fsize = -1
           data = -1
           stack = -1
           core = -1
   
   daemon:
   
   bin:
   
   sys:
   
   adm:
   
   uucp:
   
   guest:
   
   nobody:
   
   lpd:
   
   db2inst1:
           core = -1
           rss = -1
           fsize = -1
           data = 491519
   
   oracle:
       fsize = -1
       data = -1
       stack = -1
       core = -1
       fsize_hard = -1
       cpu_hard = -1
       data_hard = -1
       stack_hard = -1
       core_hard = -1
       core_hard = -1
       rss = -1
       nofiles = 4000

 

 

ulimit 命令

用途

设置或报告用户资源极限。

语法

ulimit [  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ] [ Limit ]

描述

ulimit 命令设置或报告用户进程资源极限,如 /etc/security/limits 文件所定义。文件包含以下缺省值极限:

fsize = 2097151

core = 2097151

cpu = -1

data = 262144

rss = 65536

stack = 65536

nofiles = 2000

当新用户添加到系统中时,这些值被作为缺省值使用。当向系统中添加用户时,以上值通过  命令设置,或通过  命令更改。

极限分为软性和硬性。通过 ulimit 命令,用户可将软极限更改到硬极限的最大设置值。要更改资源硬极限,必须拥有 root 用户权限。

很多系统不包括以上一种或数种极限。 特定资源的极限在指定 Limit 参数时设定。Limit 参数的值可以是每个资源中指定单元中的数字,或者为值 unlimited。要将特定的 ulimit 设置为unlimited,可使用词 unlimited。

注:在 /etc/security/limits 文件中设置缺省极限就是设置了系统宽度极限, 而不仅仅是创建用户时用户所需的极限。

省略 Limit 参数时,将会打印出当前资源极限。除非用户指定 -H 标志,否则打印出软极限。当用户指定一个以上资源时,极限名称和单元在值之前打印。如果未给予选项,则假定带有了-f 标志。

由于 ulimit 命令影响当前 shell 环境,所以它将作为 shell 常规内置命令提供。如果在独立的命令执行环境中调用该命令,则不影响调用者环境的文件大小极限。以下示例中正是这种情况:

nohup ulimit -f 10000

env ulimit 10000

一旦通过进程减少了硬极限,若无 root 特权则无法增加,即使返回到原值也不可能。

关于用户和系统资源极限的更多信息,请参见 AIX 5L Version 5.2 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimitsetrlimit 或 vlimit子例程。

标志

-a

列出所有当前资源极限。

-c

以 512 字节块为单位,指定核心转储的大小。

-d

以 K 字节为单位指定数据区域的大小。

-f

使用 Limit 参数时设定文件大小极限(以块计),或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。

-H

指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限。

-m

以 K 字节为单位指定物理存储器的大小。

-n

指定一个进程可以拥有的文件描述符的数量的极限。

-s

以 K 字节为单位指定堆栈的大小。

-S

指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者。

-t

指定每个进程所使用的秒数。

退出状态

返回以下退出值:

0

成功完成。

>0

拒绝对更高的极限的请求,或发生错误。

示例

要将文件大小极限设置为 51,200 字节,输入:

ulimit -f 100

文件

/usr/bin/ksh

包含 ulimit 内置命令。

 

在linux上的程序放到AIX560上,结果一跑就coredown.
用ulimit -a查看限制,发现内存限制太小。将内存改为无限制(也可以用smit),
ulimit -m unlimited 内存
ulimit -s unlimited 堆栈
ulimit -d unlimited 数据段
发现程序最多可以申请256M内存,再多还是coredown。
再将
export LDR_CNTRL=MAXDATA=0x40000000 1G
export LDR_CNTRL=MAXDATA=0x80000000 2G
也最多可以申请2G空间,以上是用32位编译的。
采用64位编译(-q64)后。
export LDR_CNTRL=MAXDATA=0xD0000000 
export LDR_CNTRL=MAXDATA=0xF0000000 4G
可以最多申请4G空间。
最后设置
export LDR_CNTRL=MAXDATA=0xF00000000 4G
几乎可以申请无限空间(超出物理内存)。
设置该环境变量同时,可以设置使用dsa属性和是否使用最大页
eg: 
export LDR_CNTRL=MAXDATA=0xF00000000@dsa
export LDR_CNTRL=MAXDATA=0xF00000000@LARGE_PAGE_DATA=y
如果使用32位编译的话,可以通过共享内存来扩展超过2G的内存申请。
以上环境变量仅对当前对话有效,也可以单独设置到程序中,
采用编译或者启动时添加选项都可以
eg:
cc -bmaxdata:0xD0000000/dsa sample.o 
LDR_CNTRL=MAXDATA=0xF00000000 a.out

 

该值(nofiles)只能在AIX 4.3.1 或以后的版本中更改。

上述定义作为默认值存放在文件 /etc/security/limits 中,在新用户被加进系统后生效。直接更改此文件中的定义值需要将系统重新启动以便使更改生效。将相应值该为"-1" 表示不受 soft limits的限制(unlimited)。

下面我们将就各字段逐一进行介绍:

fsize 用户创建的文件大小限制。此定义值(512字节为单位)为该用户可以生成的最大文件的大小。
core 生成的core文件大小的限制(512字节为单位)。
cpu 用户进程可用cpu的限定值(以秒为单位)。普通用户只能将此值减小,root可以将此值增大。这里要注意的
是进程使用CPU的时间取决于AIX Kernel(核心程序)进程调度算法,该值在此仅做参考。
data 进程数据段大小的限定值(以字节为单位)。
stack 进程堆栈段大小的限定值(以字节为单位)。
rss 进程常驻内存段的限定值(以字节为单位)。AIX核心并不参考此限定。
nofiles 进程中打开文件的最大数量。

阅读(2255) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~