linux中/etc/security/limits.conf配置文件說明


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

 https://blog.csdn.net/weixin_33978044/article/details/90591334

查看tomcat打開數

lsof -p $pid|wc -l

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

* soft nofile 655350 #任何用戶可以打開的最大的文件描述符數量,默認1024,這里的數值會限制tcp連接 * hard nofile 655350 * soft nproc 655350 #任何用戶可以打開的最大進程數 * hard nproc 650000 @student hard nofile 65535 @student soft nofile 4096 @student hard nproc 50 #學生組中的任何人不能擁有超過50個進程,並且會在擁有30個進程時發出警告 @student soft nproc 30 
  • hard和soft兩個值都代表什么意思呢?
    soft是一個警告值,而hard則是一個真正意義的閥值,超過就會報錯

一、所有用戶創建的進程數:

$ ps h -Led -o user | sort | uniq -c | sort -n 2 shtermuser 11 zabbix 206 elasticsearch 490 root 

二、系統最大打開文件描述符數:

  1. 查看
$ cat /proc/sys/fs/file-max 6553600 
  1. 設置
$ vim /etc/sysctl.conf fs.file-max = 6553600 

三、進程最大打開文件描述符數

  1. 查看
    ulimit -n默認查看的是soft limit
$ ulimit -n
170000
  • 查看hard limit
$ ulimit -Hn
170000
  1. 設置
  • 臨時設置
#通過ulimit -Sn設置最大打開文件描述符數的soft limit,注意soft limit必須小於hard limit
$ ulimit -Sn 160000

#同時設置soft limit和hard limit。對於非root用戶只能設置比原來小的hard limit。
$ ulimit -n 180000
  • 永久設置
#root權限下,在/etc/security/limits.conf中添加如下兩行,表示所有用戶最大打開文件描述符數的soft limit為102400,hard limit為104800。重啟生效
* 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 5664 0 186405 

其中第一個數表示當前系統已分配使用的打開文件描述符數,第二個數為分配后已釋放的(目前已不再使用),第三個數等於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 都有什么含義

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

參考:修改linux 最大文件限制數 ulimit



我就寫了個小腳本來統計一下所有進程的文件打開數量,從而可以得知到底是哪個進程出現問題,再作進一步的處理,腳本的具體內容如下

 

  1.  
    #!/bin/bash
  2.  
     
  3.  
    # psof.sh
  4.  
    # Author:
  5.  
    # # ####### # # #######
  6.  
    # # # ## # #
  7.  
    # # # # # # #
  8.  
    ### ##### # # # #
  9.  
    # # # # # # #
  10.  
    # # # # ## #
  11.  
    # # ####### # # #
  12.  
    # DATE: 2016-10-09
  13.  
    # DESCRIPTION: 計算每個進程的Openfiles
  14.  
     
  15.  
    tmpfile=/dev/shm/psof.txt
  16.  
    echo "" > $tmpfile
  17.  
    for pid in $(ps -eo pid | grep -v PID)
  18.  
    do echo $pid":"$(lsof -p $pid|wc -l) >> $tmpfile ;
  19.  
    done
  20.  
    echo "PID : Openfiles"
  21.  
    sort -nrk 2 -t: $tmpfile


免責聲明!

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



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