使用ulimit 命令、/etc/security/limits.conf、proc 調(diào)整系統(tǒng)參數(shù)

使用ulimit 命令、/etc/security/limits.conf、proc 調(diào)整系統(tǒng)參數(shù)

Linux是有文件句柄限制的,而且Linux默認(rèn)不是很高,一般都是1024,生產(chǎn)服務(wù)器用其實(shí)很容易就達(dá)到這個(gè)數(shù)量

系統(tǒng)總限制是在這里,/proc/sys/fs/file-max.可以通過cat查看目前的值,修改/etc/sysctl.conf 中也可以控制.
/proc/sys/fs/file-nr,可以看到整個(gè)系統(tǒng)目前使用的文件句柄數(shù)量

在Linux下面部署應(yīng)用的時(shí)候,有時(shí)候會遇上Socket/File: Can’t open so many files的問題
在使用linux做為關(guān)鍵應(yīng)用的過程中,特別是大壓力負(fù)載的時(shí)候,經(jīng)常會遇到一些諸如“too many open files”,“系統(tǒng)默認(rèn)最大線程數(shù)是多少?如何調(diào)整?”等問題。此時(shí),我們就必須使用ulimit或proc去調(diào)整系統(tǒng)的某些參數(shù)。

查找文件句柄問題的時(shí)候,還有一個(gè)很實(shí)用的程序lsof.可以很方便看到某個(gè)進(jìn)程開了那些句柄.也可以看到某個(gè)文件/目錄被什么進(jìn)程占用了.
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more

修改完重新登錄就可以見到,使用 ulimit -a 查看確認(rèn)

  • ulimit 命令

1.只對當(dāng)前tty(終端有效),若要每次都生效的話,可以把ulimit參數(shù)放到對應(yīng)用戶的.bash_profile里面;
2.ulimit命令本身就有分軟硬設(shè)置,加-H就是硬,加-S就是軟;
3.默認(rèn)顯示的是軟限制,如果運(yùn)行ulimit命令修改的時(shí)候沒有加上的話,就是兩個(gè)參數(shù)一起改變.生效;
+ 命令參數(shù)
-H 設(shè)置硬件資源限制.
-S 設(shè)置軟件資源限制.
-a 顯示當(dāng)前所有的資源限制.
-c size:設(shè)置core文件的最大值.單位:blocks
-d size:設(shè)置數(shù)據(jù)段的最大值.單位:kbytes
-f size:設(shè)置創(chuàng)建文件的最大值.單位:blocks
-l size:設(shè)置在內(nèi)存中鎖定進(jìn)程的最大值.單位:kbytes
-m size:設(shè)置可以使用的常駐內(nèi)存的最大值.單位:kbytes
-n size:設(shè)置內(nèi)核可以同時(shí)打開的文件描述符的最大值.單位:n
-p size:設(shè)置管道緩沖區(qū)的最大值.單位:kbytes
-s size:設(shè)置堆棧的最大值.單位:kbytes
-t size:設(shè)置CPU使用時(shí)間的最大上限.單位:seconds
-v size:設(shè)置虛擬內(nèi)存的最大值.單位:kbytes
unlimited 是一個(gè)特殊值,用于表示不限制

+ 設(shè)置    
    - 針對所有用戶的設(shè)置,在/etc/security/limits.conf文件,其是可以對系統(tǒng)用戶、組進(jìn)行cpu、文件數(shù)等限制的,通過它可以針對某個(gè)用戶或全部進(jìn)行限制。但不能超越系統(tǒng)的限制;

        (*表示所有用戶、soft表示可以超出,但只是警告;hard表示絕對不能超出,unlimited用于表示不限制)
    
    - 如果想對所有用戶設(shè)置,也可以放在/etc/profile文件里面,下面是該文件里面的默認(rèn)參數(shù):   
    ulimit -S -c 0 > /dev/null 2>&1
  • /proc 目錄

    • /proc 目錄包括很多系統(tǒng)當(dāng)前狀態(tài)的參數(shù)

      /proc/meminfo
      /proc/cpuinfo
      /proc/sys/fs/file-max #系統(tǒng)總限制
      /proc/sys/fs/file-nr #整個(gè)系統(tǒng)目前使用的文件句柄數(shù)量

    • proc目錄中的值可以進(jìn)行動(dòng)態(tài)的設(shè)置,若希望永久生效,可以修改/etc/sysctl.conf文件,并使用下面的命令確認(rèn): #sysctl -p

  • /etc/security/limit.conf

注意:要使 limits.conf 文件配置生效,必須要確保 pam_limits.so 文件被加入到啟動(dòng)文件中。查看 /etc/pam.d/login 文件中有:session required /lib/security/pam_limits.so
+ 描述
limits.conf文件實(shí)際是Linux PAM(插入式認(rèn)證模塊,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,突破系統(tǒng)的默認(rèn)限制,對系統(tǒng)訪問資源有一定保護(hù)作用。 limits.conf 和sysctl.conf區(qū)別在于limits.conf是針對用戶,而sysctl.conf是針對整個(gè)系統(tǒng)參數(shù)配置。
+ 工作原理
limits.conf是 pam_limits.so的 配置文件,然后/etc/pam.d/下的應(yīng)用程序調(diào)用pam_***.so模塊。譬如說,當(dāng)用戶 訪問服務(wù)器,服務(wù)程序?qū)⒄埱蟀l(fā)送到PAM模塊,PAM模塊根據(jù)服務(wù)名稱在/etc/pam.d目 錄下選擇一個(gè)對應(yīng)的服務(wù)文件,然后根據(jù)服務(wù)文件的內(nèi)容選擇具體的PAM模塊進(jìn)行處理

    example:限制admin用戶登錄到sshd的服務(wù)不能超 過2個(gè)  
        在/etc/pam.d/sshd中添加:session required pam_limits.so  
        echo "session required pam_limits.so" >> /etc/pam.d/sshd  
        在/etc/security/limits.conf中添加:admin - maxlogins 2  
        注意:     
        查看應(yīng)用程序能否被PAM支持,用ldd
        同理limits.conf要使用就必須保證/etc/pam.d/login 中有下面:session    required   pam_limits.so

+ 文件格式  username|@groupname   type  resource  limit
    1. username|@groupname  
    設(shè)置需要被限制的用戶名,組名前面加@和用戶名區(qū)別。也可用通配符*來做所有用戶的限制
    2. type  soft、hard、-    
    soft 指的是當(dāng)前系統(tǒng)生效的設(shè)置值。hard 表明系統(tǒng)中所能設(shè)定的最大值。soft 的限制不能比har 限制高。用 - 就表明同時(shí)設(shè)置了soft 和hard的值
    3. resource: 表示要限制的資源
    
        * core - 限制內(nèi)核文件的大小
        core file : 當(dāng)一個(gè)程序崩潰時(shí),在進(jìn)程當(dāng)前工作目錄的core文件中復(fù)制了該進(jìn)程的存儲圖像。core文件僅僅是一個(gè)內(nèi)存映象(同時(shí)加上調(diào)試信息),主要是用來調(diào)試的。core文件是個(gè)二進(jìn)制文件,需要用相應(yīng)的工具來分析程序崩潰時(shí)的內(nèi)存映像,系統(tǒng)默認(rèn)core文件的大小為0,所以沒有被創(chuàng)建??梢杂胾limit命令查看和修改core文件的大小。 
        #ulimit -c 0  #ulimit -c 1000 #ulimit -c unlimited  
        注意:如果想讓修改永久生效,則需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf 
        * date - 最大數(shù)據(jù)大小
        * fsize - 最大文件大小
        * memlock - 最大鎖定內(nèi)存地址空間
        * nofile - 打開文件的最大數(shù)目  
        對于需要做許多套接字連接并使它們處于打開狀態(tài)的應(yīng)用程序而言,最好通過使用ulimit -n,或者通過設(shè)置nofile參數(shù),為用戶把文件描述符的數(shù)量設(shè)置得比默認(rèn)值高一些
        * rss - 最大持久設(shè)置大小
        * stack - 最大棧大小
        * cpu - 以分鐘為單位的最多 CPU 時(shí)間 
        * noproc - 進(jìn)程的最大數(shù)目 
        * as - 地址空間限制
        * maxlogins - 此用戶允許登錄的最大數(shù)目
    
    4. 設(shè)置
        * 暫時(shí)生效,ulimit 命令
        * 永久生效,通過將一個(gè)相應(yīng)的 ulimit 語句添加到由登錄 shell 讀取的文件之一(例如 ~/.profile),即特定于 shell 的用戶資源文件;或者通過編輯 /etc/security/limits.conf
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容