LINUX中的limits.conf配置文件


為何需要文件描述符?

原因1 – 資源問題:節約內存資源。服務器上,每個打開的文件都需要消耗內存來管理。

原因2 – 安全問題:如果不限制的話,如果發生情況為,啟動一個進程只是無限的創建和打開新的文件,會讓服務器崩潰。

所以限制文件描述符的數量對於linux系統的穩定性是非常重要的。

配置文件

inux資源限制配置文件是/etc/security/limits.conf;
限制用戶進程的數量對於linux系統的穩定性非常重要。
limits.conf文件限制着用戶可以使用的最大文件數,最大線程,最大內存等資源使用量。

除了 

/etc/security/limits.conf

/etc/security/limits.d/目錄下,里面配置會覆蓋/etc/security/limits.conf的配置

可以限制的資源類型如下:

所創建的內核文件的大小、進程數據塊的大小、Shell 進程創建文件的大小、內存鎖住的大小、常駐內存集的大小、打開文件描述符的數量、分配堆棧的最大大小、CPU 時間、單個用戶的最大線程數、Shell 進程所能使用的最大虛擬內存。同時,它支持硬資源和軟資源的限制。

  • 第一列表示用戶和組(@開頭)。第二列表示軟限制還是硬限制,第三列表示限制的資源類型,第四列表示限制的最大值

  • hard和soft的區別: soft是一個警告值,而hard則是一個真正意義的閥值,超過就會報錯,一般情況下都是設為同一個值。

  • core是內核文件,nofile是文件描述符,noproc是進程,一般情況下只限制文件描述符數和進程數就夠了

#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# End of file

-----------分割線,上面是配置文件的模板,下面是自己添加的------------------------

*                 soft     nofile         655350      #表示任何一個用戶可以打開的最大的文件描述符數量
*                 hard    nofile         655350

*                 soft    nproc          655350      #表示任何一個用戶可以打開的最大的進程數
*                hard    nproc          655350


@student        hard    nofile          65535       #student組中的任何人最多能打開文件描述符數量是65535,並且會在打開65000個時發出警告
@student        soft    nofile          65000

@student        hard    nproc           50            #student組中的任何人不能擁有超過50個進程,並且會在擁有30個進程時發出警告
@student        soft    nproc           30

 系統級別設置

1、查看系統最大文件描述符

$ cat /proc/sys/fs/file-max
186405

 

 2、設置系統最大文件描述符

臨時性設置

$ echo 1000000 > /proc/sys/fs/file-max

永久性設置

在/etc/sysctl.conf中設置,應該設什么值是最佳實踐?比如8G的內存,設為8192/2 * 256 = 524288

fs.file-max = 1000000

 

用戶級別設置

1、查看 ulimit命令,-n默認查看的是soft limit,這個值是從/etc/security/limits.conf文件的* soft nofile 655350來的

$ ulimit -n
170000

 

查看hard limit

$ ulimit -Hn
170000

2、設置

臨時性:

通過ulimit -Sn設置最soft limit,注意soft limit必須小於hard limit

$ ulimit -Sn 160000

 

通過ulimit -Hn設置最Hard limit

$ ulimit -Hn 160000

 

同時設置soft limit和hard limit。對於非root用戶只能設置比原來小的hard limit。

$ ulimit -n 180000

 

永久性:

root權限下,在/etc/security/limits.conf中添加如下兩行,*表示所有用戶,重啟生效

* soft nofile 102400

* hard nofile 104800

 

注意:設置nofile的hard limit還有一點要注意的就是hard limit不能大於/proc/sys/fs/nr_open,假如hard limit大於nr_open,注銷后將無法正常登錄。

查看當前系統使用的打開文件描述符數

$ cat /proc/sys/fs/file-nr 
2176    0    2048000

 

其中第一個數表示當前系統已分配使用的打開文件描述符數,第二個數為分配后已釋放的(目前已不再使用),第三個數等於file-max。

總結

知道了/etc/security/limits.conf中的參數含義之后,那么如何配置nofile,確定nofile的最大值呢

解答:使用ulimt -n命令進行測試,如果小於系統允許的最大值,設置成功,大於最大值,系統會報錯提示。

$ ulimit -n 1100000
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 1048576
$ ulimit -n 1048577
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 1048575
$ ulimit -n 1048576

ulimit -a/n/H/S/u 都有什么含義

ulimit -a 顯示當前所有的資源限制
ulimit -H 設置硬件資源限制
ulimit -S 設置軟件資源限制
ulimit -n 設置進程最大打開文件描述符數
ulimit -u <程序數目>  用戶最多可開啟的程序數目

a. 所有進程打開的文件描述符數不能超過/proc/sys/fs/file-max

b. 單個進程打開的文件描述符數不能超過user limit中nofile的soft limit
c. nofile的soft limit不能超過其hard limit
d. nofile的hard limit不能超過/proc/sys/fs/nr_open

鏈接:https://www.jianshu.com/p/47336fcd22da


參考:

https://www.jianshu.com/p/47336fcd22da

https://blog.csdn.net/fanren224/article/details/79971359


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM