Linux 指令篇:系統設定--ulimit
功能說明:控制shell程式的資源。
語 法:ulimit [-aHS][-c
補充說明:ulimit為shell內建指令,可用來控制shell執行程式的資源。
參 數:
-a 顯示目前資源限制的設定。
-c
-d 程式資料節區的最大值,單位為KB。
-f shell所能建立的最大檔案,單位為區塊。
-H 設定資源的硬性限制,也就是管理員所設下的限制。
-m 指定可使用記憶體的上限,單位為KB。
-n 指定同一時間最多可開啟的檔案數。
-p 指定管道緩衝區的大小,單位512位元組。
-s 指定堆疊的上限,單位為KB。
-S 設定資源的彈性限制。
-t
-u 使用者最多可開啟的程式數目。
-v 指定可使用的虛擬記憶體上限,單位為KB。
5.舉例
在Linux下寫程式的時候,如果程式比較大,經常會遇到“段錯誤”(segmentation fault)這樣的問題,這主要就是由於Linux系統初始的堆疊大小(stack size)太小的緣故,一般為10M。我一般把stack size設定成256M,這樣就沒有段錯誤了!命令為:
ulimit -s 262140
如果要系統自動記住這個配置,就編輯/etc/profile檔案,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,新增“ulimit -s 262140”,儲存重啟系統就可以了!
設定各linux 使用者的最大程式數,下面我把某linux使用者的最大程式數設為10000個:
最好通過使用 ulimit -n xx 修改每個程式可開啟的檔案數,預設值是 1024。
ulimit -n 4096 將每個程式可以開啟的檔案數目加大到4096,預設為1024
資料段長度:ulimit -d unlimited
最大記憶體大小:ulimit -m unlimited
堆疊大小:ulimit -s unlimited
CPU 時間:ulimit -t unlimited
虛擬記憶體:ulimit -v unlimited
暫時地,適用於通過 ulimit 命令登入 shell 會話期間。
永久地,通過將一個相應的 ulimit 語句新增到由登入 shell 讀取的檔案中, 即特定於 shell 的使用者資原始檔,如:
vi /etc/security/limits.conf
# 新增如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
說明:* 代表針對所有使用者
noproc 是代表最大程式數
nofile 是代表最大檔案開啟數
a、vi /etc/ssh/sshd_config
把 UserLogin 的值改為 yes,並把 # 註釋去掉
b、重啟 sshd 服務:
/etc/init.d/sshd restart
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
修改2個檔案。
vi /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480
session required /lib/security/pam_limits.so
另外確保/etc/pam.d/system-auth檔案有下面內容
session required /lib/security/$ISA/pam_limits.so
這一行確保系統會執行這個限制。
***********
#ulimit -n 1024
其實在系統裡面有這樣一個命令ulimit,以下是ulimit -a執行的結果:
time(seconds) unlimited
file(blocks) unlimited
data(kbytes) unlimited
stack(kbytes) 8192
coredump(blocks) unlimited
nofiles(descriptors) 1024
memory(kbytes) unlimited
其中nofiles就是檔案描述符的變數值,該值受rlim_fd_cur這個引數的影響,可以用ulimit -n number命令來修改。但不管怎麼改,程式仍然不能突破fd=256的限制。在Solaris Tunable Parameters Reference Manua這本書裡面能查到以下的資料:
A 32-bit program using standard I/O is limited to 256 file descriptors。
A 64-bit program using standard I/O can use up to 2 billion descriptors。
這也就是說32位的程式是沒有辦法突破這個限制的,只有64位的程式才能使用高達2億個檔案描述符,SUN的軟硬體在很早以前就實現了64位的架構,現在唯一要解決的就是將程式編譯成64位程式,為了生成64位程式,就必須要有64位的編譯器(其實不是這樣的),如果你去www.sunfreeware.com下載64位編譯器gcc,網站上沒有特別註明是64位的gcc,但是會有個意外的收穫,就是該軟體的說明裡面註明了只要在用gcc編譯的時候加上-m64的option就能生成64位程式了。
於是用gcc -m64去編譯生成一個64位程式後,用ulimit -n 102400將number of fd設成很大的情況下,所有問題迎刃而解,再也不存在檔案描述符不夠用的情況。
在/etc/system檔案設定rlimi_fc_max和rlim_fd_cur格式如下:
* set hard limit on file descriptors
set rlim_fd_max = 4096
* set soft limit on file descriptors
set rlim_fd_cur = 1024
命令ulimit使用格式如下:
usage: ulimit [ -HSacdfnstv ] [ limit ]
ulimit -a是顯示各引數的設定值,ulimit -n是用來設定fd的最大值的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/241379/viewspace-691490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux系統如何設定開機自動執行指令碼?Linux指令碼
- Linux ulimit使用LinuxMIT
- linux系統時間設定Linux
- Linux設定系統時間Linux
- linux系統設定環境變數Linux變數
- Linux 系統中如何設定印表機?Linux
- 雲伺服器Linux系統設定時間同步設定伺服器Linux
- 如何在 Linux 伺服器上設定 ulimit 和檔案描述符數限制Linux伺服器MIT
- Linux系統檢查指令碼Linux指令碼
- linux系統下svn常用指令Linux
- 如何設定 Linux 系統的密碼策略Linux密碼
- Linux 檢視設定系統語言(轉)Linux
- Linux系統超詳細Linux設定靜態IP教程!Linux
- linux系統for迴圈小指令碼Linux指令碼
- linux 路由表設定 之 route 指令詳解Linux路由
- Linux開啟防火牆並設定策略指令碼Linux防火牆指令碼
- linux系統中檢視己設定iptables規則Linux
- 第2課筆記 linux系統指令筆記Linux
- Linux 作業系統!開篇!!!Linux作業系統
- Laravel setting 設定 / 系統設定 / 網站設定Laravel網站
- linux啟定時指令碼Linux指令碼
- Linux系統篇-檔案系統&虛擬檔案系統Linux
- 設定Linux伺服器IP地址的shell指令碼Linux伺服器指令碼
- Linux系統ACL許可權設定之setfacl和getfaclLinux
- Linux系統設定環境變數是怎樣的Linux變數
- linux系統軟體啟動sh指令碼Linux指令碼
- Linux系統Shell指令碼如何執行?linux運維繫統工程師Linux指令碼運維工程師
- linux系統之間透過nfs網路檔案系統掛載設定方法LinuxNFS
- linux設定開機自啟動指令碼的最佳方式Linux指令碼
- 麒麟作業系統 (kylinos) 從入門到精通 - 系統設定 - 第一篇 系統準備作業系統
- Linux系統檔案系統及檔案基礎篇Linux
- linux系統怎麼新增每天定時任務? linux系統新增定時任務的教程Linux
- 指令系統
- linux系統指令碼中trap訊號都有哪些?Linux運維Linux指令碼運維
- linux系統呼叫第一篇Linux
- 【Linux】Linux系統程式設計入門Linux程式設計
- Windows系統常用系統引數設定文件Windows
- 如何設定與檢視Linux系統中的環境變數?Linux變數
- 如何在Linux系統中設定Boost庫的環境變數?Linux變數