linux普通用户句柄数上限,linux系统下的用户文件句柄数限制
為什么要修改用戶打開的文件數
系統默認單個進程可以打開1024個文件,對于一些應用如tomcat、oracle等,運行時經常open成千上萬個文件,系統管理員需根據系統上運行的應用需求,修改系統文件數限制值。
系統中除了有限制單個進程打開的文件數,還有全部進程打開的文件總數限制。打開的文件總數限制是系統跟據硬件配置推算出來的,所以不同系統上,總數限制值可能不相同,系統管理員也可以手動修改總數限制。
在系統日志或終端上看到“resource temporarily unavaliable”報錯信息時,一般是出現了單個進程打開的文件數達最大值、系統中打開文件總數達最大值、用戶使用的進程(包括線程)數達最大值、文件系統滿這四種情況中的一種。
查看系統打開文件總數限制:
# cat /proc/sys/fs/file-max
1517258
或
# sysctl -a | grep fs.file-max
fs.file-max = 1517258
查看系統當前打開文件總數:(粗略計算,此值略低于實際值)
# lsof -n | wc -l
13077
臨時修改系統打開文件總數限制:(立即生效,重啟無效)
# echo 1600000 > /proc/sys/fs/file-max
永久修改系統打開文件最大值限制:
# echo fs.file-max = 1600000 >> /etc/sysctl.conf
# sysctl -w
(sysctl -w命令,使/etc/sysct.conf配置內容立即生效)
2. 修改用戶文件句柄數
(root用戶不受限制)
通過/etc/security/limits.conf修改用戶的資源限制,包括文件數限制。例如:
tiger soft nofile 4096 //設置tiger用戶每個進程可以打開4096個文件(軟限制)
tiger hard nofile 4096 //設置tiger用戶每個進程可以打開4096個文件(硬限制)
tiger - nofile 4096 //設置tiger用戶每個進程可以打開4096個文件(軟硬限制)
@sale - nofile 4096 //設置sale組用戶每個進程可以打開4096個文件(軟硬限制)
* - nofile 4096 //默認值,如果用戶與其他條目不匹配,則使用此設置
說明:
(1)如果軟限制和硬限制的值不相同,則較小的那個值生效。
(2)用戶可以自行調整限制值,但不可超過硬限制。
tiger soft nofile 4096
tiger hard nofile 8192
$ ulimit -n
4096
$ ulimit -n 8192
$ ulimit -n
8192
$ ulimit -n 10240
-bash: ulimit: open files: cannot modify limit: 不允許的操作
3. 修改限制后什么時候生效
修改/etc/security/limits.conf后,用戶開啟一個新的shell時生效。一般是用戶exit退出登錄,再次login。應用程序要使用更改后的配置,應用管理員需要在新shell中重啟應用。
有時候修改/etc/security/limits.conf后,配置沒有生效。很多都是在重新編譯安裝了ssh服務后出現的。原因只有一個,就是用戶會話是否使用了pam_limits.so模塊。
在/etc/pam.d目錄,存放了pam配置文件,常見如下:
login:用戶通過終端登錄時使用的pam配置文件
sshd:用戶通過ssh遠程登錄時使用的pam配置文件
su:用戶通過su切換用戶時使用的pam配置文件
sudo:用戶通過sudo,以其他用戶身份執行命令時的配置文件
limits.conf修改后不生效時,管理員應該首先確認用戶是以哪種方式打開會話的,然后在對應的pam配置文件中查找是否有“session required pam_limits.so”這項配置。如果沒有,則limits.conf配置不會生效。“session required pam_limits.so”配置經常放在password-auth和system-auth,然后被其他配置文件include進來。
# grep pam_limits.so /etc/pam.d/sshd
# grep include /etc/pam.d/sshd
auth include system-auth
account include system-auth
password include system-auth
session include system-auth
# grep pam_limits.so /etc/pam.d/system-auth
session required pam_limits.so
4. 是對用戶單個進程打開的文件數限制
(1)修改/etc/security/limits.conf,添加
tiger - nofile 100 //限制用戶每個進程打開的文件數為100
(2)寫一個程序,每秒打開一個文件(此處我引用一段朋友寫的C代碼)
$ vi file.c
#include
#include
#include
#include
main()
{
int fs;
int i=0;
char *filename;
while(i
fs=open(UTMP_FILE,O_RDONLY);
printf("open %d files,the filedescriptor is %d\n",i,fs);
i++;
sleep(1);
}
}
# gcc file.c –o file
# chmod 755 file
(3)多打開幾個終端,同時運行該程序
$ ./file
并行運行多個file程序,你會發現每個file程序都可以打開100個文件,然后報打開文件失敗。
共享同一進程號的所有線程,打開的文件總數不能超過單個進程限制值。
總結
以上是生活随笔為你收集整理的linux普通用户句柄数上限,linux系统下的用户文件句柄数限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IIS6 + Resin3.1.x 的不
- 下一篇: Linux系统文件句柄数