歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> AIX上ulimit -a輸出的含義

AIX上ulimit -a輸出的含義

日期:2017/3/1 16:35:48   编辑:關於Linux
AIX上ulimit -a輸出的含義 之前分享了有關linux下更改命令,不過AIX的命令和linux還不太一樣。 不過基本解決的都是 www.2cto.com :too many open files的錯誤 AIX 用戶使用的系統資源限制包括兩個概念 --- 硬限制(hard limits) 和軟限制(soft limits)。 hard limits自AIX 4.1版本開始引入。hard limits 應由AIX系統管理員設置,只有security組的成員可以將此值增大, 用戶本身可以減小此限定值,但是其更改將隨著該用戶從系統退出而失效。使用下列命令可以查看hard limits的限定值: www.2cto.com 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 中的 getrlimit、setrlimit或 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 進程中打開文件的最大數量。
Copyright © Linux教程網 All Rights Reserved