其實Linux是有文件句柄限制的,而且Linux默認不是很高,一般都是1024,生產服務器用其實很容易就達到這個數量.
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited||<
若要令修改ulimits的數值永久生效,則必須修改配置文檔,可以給ulimit修改命令放入/etc/profile裏面,這個方法實在是不方便,還有一個方法是修改/etc/sysctl.conf .我修改了,測試過,但對用戶的ulimits -a 是不會改變的。只是/proc/sys/fs/file-max的值變了.(我給命令放到rc.local中失敗)
裏面有很詳細的註釋,比如:
* hard nofile 65536
echo -ne "
* soft nofile 65536
* hard nofile 65536
" >>/etc/security/limits.conf
默認顯示的是軟限制,如果運行ulimit命令修改的時候沒有加上的話,就是兩個參數一起改變.
limits.conf的後端是這樣工作的:limits.conf是pam_limits.so的配置文件,然後/etc/pam.d/下的應用程序調用pam_***.so模塊。譬如說,當用戶訪問服務器,服務程序將請求發送到PAM模塊,PAM模塊根據服務名稱在/etc/pam.d目錄下選擇一個對應的服務文件,然後根據服務文件的內容選擇具體的PAM模塊進行處理。
例:限制admin用戶登錄到sshd的服務不能超過2個
在/etc/pam.d/sshd 中添加 session required pam_limits.so
在/etc/security/limits.conf中添加 admin - maxlogins 2
查看應用程序能否被PAM支持,用ldd
limits.conf文件的參數
Limits.conf文件的參數可以設置成以下兩種形式之一:
暫時地,適用於通過 ulimit 命令登錄 shell 會話期間。
永久地,通過將一個相應的 ulimit 語句添加到由登錄 shell 讀取的文件之一(例如 ~/.profile),即特定於 shell 的用戶資源文件;或者通過編輯 /etc/security/limits.conf。
1.core - 限制內核文件的大小
何謂core文件,當一個程序崩潰時,在進程當前工作目錄的core文件中複製了該進程的存儲圖像。core文件僅僅是一個內存映象(同時加上調試信息),主要是用來調試的。 core文件是個二進制文件,需要用相應的工具來分析程序崩潰時的內存映像。
系統默認core文件的大小爲0,所以沒有創建。可以用ulimit命令查看和修改core文件的大小。
$ulimit -c
0
$ ulimit -c 1000
$ ulimit -c
1000
-c 指定修改core文件的大小,1000指定了core文件大小。也可以對core文件的大小不做限制,如:
# ulimit -c unlimited
#ulimit -c
unlimited
如果想讓修改永久生效,則需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf。
2.nofile - 打開文件的最大數目
對於需要做許多套接字連接並使它們處於打開狀態的應用程序而言,最好通過使用 ulimit –n,或者通過設置nofile 參數,爲用戶把文件描述符的數量設置得比默認值高一些