1. 程式人生 > >Linux中的ulimit引數修改

Linux中的ulimit引數修改

   當伺服器在使用頻繁時,經常會遇到請求不響應,導致程式執行失敗,主要分兩大類:

       1:系統達到最大程序數,再新建立程序時會爆出,fork程序失敗

       2:當系統開啟檔案達到上限,再新開啟檔案時就會爆出 open files failed...xxxx

 

在系統中主要通過修改ulimit -n和-u引數,分別代表linux的最大程序數和最大檔案開啟數。

 

永久生效的方法:

修改/etc/security/limits.conf檔案

在檔案末尾新增

* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800
 
*             代表針對所有使用者 
noproc     是代表最大程序數 
nofile     是代表最大檔案開啟數

2. 系統調優

        如前所述, ulimit -a 用來顯示當前的各種使用者程序限制。 
        Linux對於每個使用者,系統限制其最大程序數。為提高效能,可以根據裝置資源情況,
        設定各linux 使用者的最大程序數,下面我把某linux使用者的最大程序數設為10000個: 
        ulimit -u 10000 
        對於需要做許多 socket 連線並使它們處於開啟狀態的 Java 應用程式而言,
        最好通過使用 ulimit -n xx 修改每個程序可開啟的檔案數,預設值是 1024。 
        ulimit -n 4096 將每個程序可以開啟的檔案數目加大到4096,預設為1024 
         其他建議設定成無限制(unlimited)的一些重要設定是: 

        資料段長度:ulimit -d unlimited 
         最大記憶體大小:ulimit -m unlimited 
        堆疊大小:ulimit -s unlimited 
        CPU 時間:ulimit -t unlimited 
        虛擬記憶體:ulimit -v unlimited 
  
        暫時地,適用於通過 ulimit 命令登入 shell 會話期間。
        永久地,通過將一個相應的 ulimit 語句新增到由登入 shell 讀取的檔案中, 即特定於 shell 的使用者資原始檔,如: 

  1) 解除 Linux 系統的最大程序數和最大檔案開啟數限制:
        vi /etc/security/limits.conf
        # 新增如下的行
        * soft noproc 11000
        * hard noproc 11000
        * soft nofile 4100
        * hard nofile 4100 
       說明:* 代表針對所有使用者
            noproc 是代表最大程序數
            nofile 是代表最大檔案開啟數 
  2) 讓 SSH 接受 Login 程式的登入,方便在 ssh 客戶端檢視 ulimit -a 資源限制:
        a、vi /etc/ssh/sshd_config 
             把 UserLogin 的值改為 yes,並把 # 註釋去掉
        b、重啟 sshd 服務:
              /etc/init.d/sshd restart
  3) 修改所有 linux 使用者的環境變數檔案:
        vi /etc/profile 
        ulimit -u 10000
        ulimit -n 4096
        ulimit -d unlimited 
        ulimit -m unlimited 
        ulimit -s unlimited 
        ulimit -t unlimited 
        ulimit -v unlimited 

/**************************************

有時候在程式裡面需要開啟多個檔案,進行分析,系統一般預設數量是1024,(用ulimit -a可以看到)對於正常使用是夠了,但是對於程式來講,就太少了。
修改2個檔案。
  1) /etc/security/limits.conf
        vi /etc/security/limits.conf
        加上:
        * soft nofile 8192
        * hard nofile 20480
  2) /etc/pam.d/login
        session required /lib/security/pam_limits.so
        **********
        另外確保/etc/pam.d/system-auth檔案有下面內容
        session required /lib/security/$ISA/pam_limits.so
        這一行確保系統會執行這個限制。
        ***********
  3) 一般使用者的.bash_profile
        #ulimit -n 1024
        重新登陸ok

3. /proc目錄:
  1)/proc目錄裡面包括很多系統當前狀態的引數,例如:引用
        /proc/sys/fs/file-max
        /proc/sys/fs/inode-max


  是對整個系統的限制,並不是針對使用者的;
  2)proc目錄中的值可以進行動態的設定,若希望永久生效,可以修改/etc/sysctl.conf檔案,並使用下面的命令確認:
        # sysctl -p

        例如增加:
        引用
        fs.file-max=xxx
        fs.inode-max=xxx