ulimit -a 用來顯示當前的各種用戶進程限制。
Linux對於每個用戶,系統限制其最大進程數。為提高性能,可以根據設備資源情況,設置各linux 用戶的最大進程數,下面我把某linux用戶的最大進程數設為10000個:
ulimit -u 10000
對於需要做許多 socket 連接並使它們處於打開狀態的 Java 應用程序而言,最好通過使用 ulimit -n xx 修改每個進程可打開的文件數,缺省值是 1024。
ulimit -n 4096 將每個進程可以打開的文件數目加大到4096,缺省為1024
其他建議設置成無限制(unlimited)的一些重要設置是:
數據段長度:ulimit -d unlimited
最大內存大小:ulimit -m unlimited
堆棧大小:ulimit -s unlimited
CPU 時間:ulimit -t unlimited
虛擬內存:ulimit -v unlimited
暫時地,適用於通過 ulimit 命令登錄 shell 會話期間。
永久地,通過將一個相應的 ulimit 語句添加到由登錄 shell 讀取的文件中, 即特定於 shell 的用戶資源文件,如:
1)、解除 Linux 系統的最大進程數和最大文件打開數限制:
vi /etc/security/limits.conf
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
說明:* 代表針對所有用戶
noproc 是代表最大進程數
nofile 是代表最大文件打開數
2)、讓 SSH 接受 Login 程式的登入,方便在 ssh 客戶端查看 ulimit -a 資源限制:
a、vi /etc/ssh/sshd_config
把 UserLogin 的值改為 yes,並把 # 注釋去掉
b、重啟 sshd 服務:
/etc/init.d/sshd restart
3)、修改所有 linux 用戶的環境變量文件:
vi /etc/profile
ulimit -u 10000
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
/**************************************
有時候在程序裡面需要打開多個文件,進行分析,系統一般默認數量是1024,(用ulimit -a可以看到)對於正常使用是夠了,但是對於程序來講,就太少了。
修改2個文件。
1./etc/security/limits.conf
vi /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480
2./etc/pam.d/login
session required /lib/security/pam_limits.so
**********
另外確保/etc/pam.d/system-auth文件有下面內容
session required /lib/security/$ISA/pam_limits.so
這一行確保系統會執行這個限制。
***********
3.一般用戶的.bash_profile
#ulimit -n 1024
重新登陸ok
————-
對於solaris
其實在系統裡面有這樣一個命令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的最大值的。
*************************************************
修改文件描述符限制
Solaris有兩個參數控制進程可打開的文件描述符:rlim_fd_max,rlim_fd_cur。前者修改是個硬設置,修改需要權限,後者 是個軟設置,用戶可以limit或者setrlimit() 修改,該值最大不能超過前者。一般我們在/etc/system裡修改這兩個參數
set rlim_fd_max = 65535
set rlim_fd_cur = 65535
==========================
ulimit 用於shell啟動進程所占用的資源。
可以使用該命令查看進程占用資源的情況。
使用方法:ulimit [-acdfHlmnpsStvw] [size]
-H 設置硬件資源限制.
-S 設置軟件資源限制.
-a 顯示當前所有的資源限制.
-c size:設置core文件的最大值.單位:blocks
-d size:設置數據段的最大值.單位:kbytes
-f size:設置創建文件的最大值.單位:blocks
-l size:設置在內存中鎖定進程的最大值.單位:kbytes
-m size:設置可以使用的常駐內存的最大值.單位:kbytes
-n size:設置內核可以同時打開的文件描述符的最大值.單位:n
-p size:設置管道緩沖區的最大值.單位:kbytes
-s size:設置堆棧的最大值.單位:kbytes
-t size:設置CPU使用時間的最大上限.單位:seconds
-v size:設置虛擬內存的最大值.單位:kbytes 5
1]在RH8的環境文件/etc/profile中,我們可以看到系統是如何配置ulimit的:
#grep ulimit /etc/profile
ulimit -S -c 0 > /dev/null 2>&1 (輸出重定向,正常輸出和異常輸出都忽略)
這條語句設置了對軟件資源和對core文件大小的設置
2]如果我們想要對由shell創建的文件大小作些限制,如:
#ll h
-rw-r–r– 1 lee lee 150062 7月 22 02:39 h
#ulimit -f 100 #設置創建文件的最大塊(一塊=512字節)
#cat h>newh
File size limit exceeded
#ll newh
-rw-r–r– 1 lee lee 51200 11月 8 11:47 newh
文件h的大小是150062字節,而我們設定的創建文件的大小是512字節x100塊=51200字節
當然系統就會根據你的設置生成了51200字節的newh文件.
3]可以像實例1]一樣,把你要設置的ulimit放在/etc/profile這個環境文件中.
如果針對所有用戶設置,可在/etc/security/limits.conf 設置.