日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux最大文件句柄数量总结

發布時間:2024/2/28 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux最大文件句柄数量总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫這個文章是為了以正視聽,網上的文章人云亦云到簡直令人發指。到底最大文件數被什么限制了?too many open files錯誤到底可以通過什么參數控制?網上的很多文章說的大致步驟是沒有錯的,大致如下:?

shell級限制?
通過ulimit -n修改,如執行命令ulimit -n 1000,則表示將當前shell的當前用戶所有進程能打開的最大文件數量設置為1000.?

用戶級限制??
ulimit -n是設置當前shell的當前用戶所有進程能打開的最大文件數量,但是一個用戶可能會同時通過多個shell連接到系統,所以還有一個針對用戶的限制,通過修改 /etc/security/limits.conf實現,例如,往limits.conf輸入以下內容:?
root soft nofile 1000?
root hard nofile 1200?
soft nofile表示軟限制,hard nofile表示硬限制,軟限制要小于等于硬限制。上面兩行語句表示,root用戶的軟限制為1000,硬限制為1200,即表示root用戶能打開的最大文件數量為1000,不管它開啟多少個shell。?

系統級限制?
修改cat /proc/sys/fs/file-max?

但是呢,有很多很重要的細節,有很多錯誤的描述,一塌糊涂,因此特的在這里做一個說明。

一? ulimit -n

???? 網上很多人說,ulimit -n限制用戶單個進程的文件打開最大數量。嚴格來說,這個說法其實是錯誤的。看看ulimit官方描述:?
Provides control over the resources available to the shell and to processes started by? it,? on? systems that allow such control.?The -H and -S options specify that the hard or soft limit is set for the given resource. A hard limit cannot be increased once it is set; a soft limit may? be? increased? up? to? the value of the hard limit. If neither -H nor -S is specified, both the soft and hard limits are set. The value of limit can be a number in the unit specified for the resource or one of the special values hard, soft,? or? unlimited,? which? stand? for? the? current hard limit, the current soft limit, and no limit,? respectively.?
If limit is omitted, the current value of the soft limit? of? the? resource? is? printed,? unless? the? -H? option is given.? When more than one resource is specified, the limit name and unit are? printed before the value.?
??
人家從來就沒說過是限制用戶的單個進程的最大文件打開數量,看看紅色部分,是限制當前shell以及該shell啟動的進程打開的文件數量。為什么會給人限制單個線程的最大文件數量的錯覺,因為很多情況下,在一個shell環境里,雖然可能會有多個進程,但是非常耗費文件句柄的進程不會很多,只是其中某個進程非常耗費文件句柄,比如服務器上運行著一個tomcat,那么就是java進程要占用大多數文件句柄。此時ulimit設置的最大文件數和java進程耗費的最大文件數基本是對應的,所以會給人這樣的一個錯覺。?

???
還有,很多文章稱ulimit -n 只允許設置得越來越小,比如先執行了ulimit -n 1000,在執行ulimit -n 1001,就會報"cannot modify limit: Operation not permitted"錯誤。這個其實也是不準確的說法。首先要搞清楚,任何用戶都可以執行ulimit,但root用戶和非root用戶是非常不一樣的。?

非root用戶只能越設置越小,不能越設置越大

我在機器上以非root先執行:

[wxx@br162 etc]$ ulimit -n 900
[wxx@br162 etc]$

執行成功,再增大:

[wxx@br162 etc]$ ulimit -n 901
-bash: ulimit: open files: cannot modify limit: Operation not permitted

[wxx@br162 etc]$

增加失敗,如果減少則是OK的:

[wxx@br162 etc]$ ulimit -n 899

[wxx@br162 etc]$

如果再增加到900是不行的:

[wxx@br162 etc]$ ulimit -n 900
-bash: ulimit: open files: cannot modify limit: Operation not permitted

[wxx@br162 etc]$?

root用戶不受限制

首先切換到root:

[wxx@br162 etc]$ sudo su -
[root@br162 ~]#

查看下當前限制:

[root@br162 ~]# ulimit -n
1000000

[root@br162 ~]#

增大:

?[root@br162 ~]# ulimit -n 1000001

[root@br162 ~]#

可以成功增大,再減小:

[root@br162 ~]# ulimit -n 999999

[root@br162 ~]#

減小也是成功的,再增大:

?[root@br162 ~]# ulimit -n 1000002

[root@br162 ~]#

也是ok的,可見root是不受限制的。?

ulimit里的最大文件打開數量的默認值

如果在limits.conf里沒有設置,則默認值是1024,如果limits.con有設置,則默認值以limits.conf為準。例如我換了一臺機器,登錄進去,ulimit -n顯示如下:

[root@zk203 ~]# ulimit -n
2000

這是因為我的limits.conf里的文件打開數是2000,如下:

[root@zk203 ~]# cat /etc/security/limits.conf

root soft nofile 2000

root hard nofile 2001

如果limits.conf里不做任何限制,則重新登錄進來后,ulimit -n顯示為1024。

?[root@zk203 ~]# ulimit -n

1024

ulimit修改后生效周期

修改后立即生效,重新登錄進來后失效,因為被重置為limits.conf里的設定值

二? /etc/security/limits.conf

網上還有繆傳,ulimit -n設定的值不能超過limits.conf里設定的文件打開數(即soft nofile)

好吧,其實這要分兩種情況,root用戶是可以超過的,比如當前limits.conf設定如下:

root soft nofile 2000

root hard nofile 2001

但是我用root將最大文件數設定到5000是成功的:

[root@zk203 ~]# ulimit -n 5000
[root@zk203 ~]# ulimit -n?
5000
[root@zk203 ~]#

但是非root用戶是不能超出limits.conf的設定,我切換到wxx,執行命令如下:

[wxx@zk203 ~]# ulimit -n 5000

-bash: ulimit: open files: cannot modify limit: Operation not permitted

[wxx@zk203 etc]$?

所以網上的說法是錯誤的,即使非root用戶的最大文件數設置不能超過limits.conf的設置,這也只是一個表象,實際上是因為,每個用戶登錄進來,ulimit -n的默認值是limits.conf的?soft nofile指定的,但是對于非root用戶,ulimit -n只能越來越小,不能越來越大,其實這個才是真正的原因,但是結果是一樣的。

修改了limits.conf需要重啟系統?

這個說法非常搞笑,修改了limits.conf,重新登錄進來就生效了。在機器上試試就知道了,好多人真的很懶,寧愿到處問也不愿意花一分鐘時間實際操作一下。

三? /proc/sys/fs/file-max

網上說,ulimit -n 和limits.conf里最大文件數設定不能超過/proc/sys/fs/file-max的值,這也是搞笑了,/proc/sys/fs/file-max是系統給出的建議值,系統會計算資源給出一個和合理值,一般跟內存有關系,內存越大,改值越大,但是僅僅是一個建議值,limits.conf的設定完全可以超過/proc/sys/fs/file-max。

[root@zk203 ~]# cat /proc/sys/fs/file-max?
1610495

我將limits.conf里文件最大數量設定為1610496,保存后,打印出來:

[root@zk203 ~]# cat /etc/security/limits.conf

root soft nofile1610496

root hard nofile1610496

四? 總結一下

  • /proc/sys/fs/file-max限制不了/etc/security/limits.conf
  • 只有root用戶才有權限修改/etc/security/limits.conf
  • 對于非root用戶,?/etc/security/limits.conf會限制ulimit -n,但是限制不了root用戶
  • 對于非root用戶,ulimit -n只能越設置越小,root用戶則無限制
  • 任何用戶對ulimit -n的修改只在當前環境有效,退出后失效,重新登錄新來后,ulimit -n由limits.conf決定
  • 如果limits.conf沒有做設定,則默認值是1024
  • 當前環境的用戶所有進程能打開的最大文件數量由ulimit -n決定

總結

以上是生活随笔為你收集整理的linux最大文件句柄数量总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。