linux普通用户句柄数上限,linux系统下的用户文件句柄数限制
為什么要修改用戶打開的文件數(shù)
系統(tǒng)默認(rèn)單個(gè)進(jìn)程可以打開1024個(gè)文件,對于一些應(yīng)用如tomcat、oracle等,運(yùn)行時(shí)經(jīng)常open成千上萬個(gè)文件,系統(tǒng)管理員需根據(jù)系統(tǒng)上運(yùn)行的應(yīng)用需求,修改系統(tǒng)文件數(shù)限制值。
系統(tǒng)中除了有限制單個(gè)進(jìn)程打開的文件數(shù),還有全部進(jìn)程打開的文件總數(shù)限制。打開的文件總數(shù)限制是系統(tǒng)跟據(jù)硬件配置推算出來的,所以不同系統(tǒng)上,總數(shù)限制值可能不相同,系統(tǒng)管理員也可以手動修改總數(shù)限制。
在系統(tǒng)日志或終端上看到“resource temporarily unavaliable”報(bào)錯(cuò)信息時(shí),一般是出現(xiàn)了單個(gè)進(jìn)程打開的文件數(shù)達(dá)最大值、系統(tǒng)中打開文件總數(shù)達(dá)最大值、用戶使用的進(jìn)程(包括線程)數(shù)達(dá)最大值、文件系統(tǒng)滿這四種情況中的一種。
查看系統(tǒng)打開文件總數(shù)限制:
# cat /proc/sys/fs/file-max
1517258
或
# sysctl -a | grep fs.file-max
fs.file-max = 1517258
查看系統(tǒng)當(dāng)前打開文件總數(shù):(粗略計(jì)算,此值略低于實(shí)際值)
# lsof -n | wc -l
13077
臨時(shí)修改系統(tǒng)打開文件總數(shù)限制:(立即生效,重啟無效)
# echo 1600000 > /proc/sys/fs/file-max
永久修改系統(tǒng)打開文件最大值限制:
# echo fs.file-max = 1600000 >> /etc/sysctl.conf
# sysctl -w
(sysctl -w命令,使/etc/sysct.conf配置內(nèi)容立即生效)
2. 修改用戶文件句柄數(shù)
(root用戶不受限制)
通過/etc/security/limits.conf修改用戶的資源限制,包括文件數(shù)限制。例如:
tiger soft nofile 4096 //設(shè)置tiger用戶每個(gè)進(jìn)程可以打開4096個(gè)文件(軟限制)
tiger hard nofile 4096 //設(shè)置tiger用戶每個(gè)進(jìn)程可以打開4096個(gè)文件(硬限制)
tiger - nofile 4096 //設(shè)置tiger用戶每個(gè)進(jìn)程可以打開4096個(gè)文件(軟硬限制)
@sale - nofile 4096 //設(shè)置sale組用戶每個(gè)進(jìn)程可以打開4096個(gè)文件(軟硬限制)
* - nofile 4096 //默認(rèn)值,如果用戶與其他條目不匹配,則使用此設(shè)置
說明:
(1)如果軟限制和硬限制的值不相同,則較小的那個(gè)值生效。
(2)用戶可以自行調(diào)整限制值,但不可超過硬限制。
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. 修改限制后什么時(shí)候生效
修改/etc/security/limits.conf后,用戶開啟一個(gè)新的shell時(shí)生效。一般是用戶exit退出登錄,再次login。應(yīng)用程序要使用更改后的配置,應(yīng)用管理員需要在新shell中重啟應(yīng)用。
有時(shí)候修改/etc/security/limits.conf后,配置沒有生效。很多都是在重新編譯安裝了ssh服務(wù)后出現(xiàn)的。原因只有一個(gè),就是用戶會話是否使用了pam_limits.so模塊。
在/etc/pam.d目錄,存放了pam配置文件,常見如下:
login:用戶通過終端登錄時(shí)使用的pam配置文件
sshd:用戶通過ssh遠(yuǎn)程登錄時(shí)使用的pam配置文件
su:用戶通過su切換用戶時(shí)使用的pam配置文件
sudo:用戶通過sudo,以其他用戶身份執(zhí)行命令時(shí)的配置文件
limits.conf修改后不生效時(shí),管理員應(yīng)該首先確認(rèn)用戶是以哪種方式打開會話的,然后在對應(yīng)的pam配置文件中查找是否有“session required pam_limits.so”這項(xiàng)配置。如果沒有,則limits.conf配置不會生效?!皊ession required pam_limits.so”配置經(jīng)常放在password-auth和system-auth,然后被其他配置文件include進(jìn)來。
# 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. 是對用戶單個(gè)進(jìn)程打開的文件數(shù)限制
(1)修改/etc/security/limits.conf,添加
tiger - nofile 100 //限制用戶每個(gè)進(jìn)程打開的文件數(shù)為100
(2)寫一個(gè)程序,每秒打開一個(gè)文件(此處我引用一段朋友寫的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)多打開幾個(gè)終端,同時(shí)運(yùn)行該程序
$ ./file
并行運(yùn)行多個(gè)file程序,你會發(fā)現(xiàn)每個(gè)file程序都可以打開100個(gè)文件,然后報(bào)打開文件失敗。
共享同一進(jìn)程號的所有線程,打開的文件總數(shù)不能超過單個(gè)進(jìn)程限制值。
總結(jié)
以上是生活随笔為你收集整理的linux普通用户句柄数上限,linux系统下的用户文件句柄数限制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IIS6 + Resin3.1.x 的不
- 下一篇: 嵌入式系统设计有哪几个方向