Linux文件句柄限制总结
文件句柄
tips:
網(wǎng)上說什么的也有,你抄我的我抄你的,也是醉了,故自己綜合查閱的資料,根據(jù)自己的理解和判斷以及部分的實(shí)踐整理下吧,也不敢保證都是對(duì)的,如果有比較大的錯(cuò)誤,希望看到這篇文章的你提出來,大家共同進(jìn)步!
關(guān)于什么是文件句柄,這里不做討論,其實(shí)linux中沒有文件句柄,叫做文件描述符fd
超過最大句柄限制,報(bào)錯(cuò):java.io.IOException: Too many open files。
TCP連接也會(huì)消耗句柄
查看
用戶級(jí)別(nofile)
ulimit -n 當(dāng)前用戶的當(dāng)前session(即當(dāng)前shell窗口)最大限制 (如果多個(gè)shell窗口,每個(gè)都能到達(dá)最大限制,和單個(gè)進(jìn)程無關(guān))
單個(gè)進(jìn)程級(jí)別(nr_open )
cat /proc/sys/fs/nr_open linux系統(tǒng)中規(guī)定每個(gè)進(jìn)程最大限制
系統(tǒng)級(jí)別(file-max)
cat /proc/sys/fs/file-max 系統(tǒng)級(jí)別最大限制(所有進(jìn)程打開的不能超過)
下面的可簡(jiǎn)單看,可忽略
cat /proc/sys/fs/file-nr 當(dāng)前系統(tǒng)已經(jīng)占用的句柄
結(jié)果說明:第一個(gè)數(shù)表示當(dāng)前系統(tǒng)已分配的文件描述符數(shù)(文件句柄數(shù)),第二個(gè)數(shù)為分配后已釋放的文件描述符數(shù)(當(dāng)前不再使用的文件描述符數(shù)),第三個(gè)數(shù)為最大文件描述符數(shù),等于file-max。
lsof -n |grep 1549 -c某個(gè)進(jìn)程已經(jīng)占用的句柄
修改
用戶級(jí)別(nofile)
-
臨時(shí)生效(重啟失效) : ulimit -n 65535
修改當(dāng)前的用戶級(jí)別的,但是生效范圍是當(dāng)前的session(即當(dāng)前的shell窗口),即關(guān)掉這個(gè)窗口,再次打開就不生效了。
-
永久生效
如何每次都生效?
修改環(huán)境變量 將 ulimit -n 65535 加入到 /etc/profile 文件,并source/etc/profile使生效,其實(shí)是障眼法,相當(dāng)于每個(gè)用戶進(jìn)來執(zhí)行一次ulimit -n 65535這個(gè)命令
如何更好的每次都生效(推薦)?
修改/etc/security/limits.conf文件
ulimit -Sn 能查看或設(shè)置soft limit ulimit -Hn能查看或設(shè)置hard limit
ulimit -n默認(rèn)查看的是soft limit
soft limit不能大于hard limit
單個(gè)進(jìn)程級(jí)別(nr_open )
cat /proc/sys/fs/nr_open能夠查看單個(gè)進(jìn)程級(jí)別的
hard limit一定不能大于/proc/sys/fs/nr_open,否則用戶注銷后無法正常登錄。
為什么不能大于?我是這么理解的:當(dāng)前用戶想要操作這個(gè)進(jìn)程的最大文件數(shù),但是你再大也不能超過系統(tǒng)級(jí)別的單個(gè)進(jìn)程的限制,即nr_open
如果想要大于怎么辦?那就提前修改nr_open的值:
-
臨時(shí)生效(重啟失效) :
echo 2000000 > /proc/sys/fs/nr_open -
永久生效:
sysctl -w fs.nr_open=100000000 或者 直接寫入sysctl.conf文件fs.nr_open=100000000
運(yùn)行命令:/sbin/sysctl -p 使配置生效
系統(tǒng)級(jí)別(file-max)
-
臨時(shí)生效(重啟失效):
echo 1000000 > /proc/sys/fs/file-max
-
永久生效:
修改文件/etc/sysctl.conf
fs.file-max=655350 #限制整個(gè)系統(tǒng)最大文件句柄數(shù)
運(yùn)行命令:/sbin/sysctl -p 使配置生效
總結(jié)
-
大小順序、關(guān)系
用戶級(jí)別<單個(gè)進(jìn)程級(jí)別<系統(tǒng)級(jí)別 即 nofile>nr_file<file-max
用戶級(jí)別(nofile)中: safe limit<hard limit 而 hard limit <nr_file
所以完整:
safe limit<hard limit<nr_file<file-max -
誤區(qū)
用戶級(jí)別(nofile)即,ulimit命令,只和當(dāng)前用戶當(dāng)前session(當(dāng)前shell窗口)有關(guān),和單個(gè)進(jìn)程沒有關(guān)系
總結(jié)
以上是生活随笔為你收集整理的Linux文件句柄限制总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Netty事件传播机制
- 下一篇: dubbo-admin构建问题总结