AIX上ulimit -a 輸出的含義

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 [ -H ] [ -S ] [ -a ] [ -c ] [ -d ] [  -f ] [ -m ] [ -n ] [ -s ] [ -t ] [ Limit ]

描述

ulimit 命令設置或報告用戶進程資源極限,如 /etc/security/limits 文件所定義。文件包含以下缺省值極限:

fsize = 2097151

core = 2097151

cpu = -1

data = 262144

rss = 65536

stack = 65536

nofiles = 2000

當新用戶添加到系統中時,這些值被作爲缺省值使用。當向系統中添加用戶時,以上值通過 mkuser 命令設置,或通過 chuser 命令更改。

極限分爲軟性和硬性。通過 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
進程中打開文件的最大數量。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章