linux ulimit設定

longqidong發表於2013-02-21

ulimit用於shell啟動程式所佔用的資源.
2,類別:
shell內建命令
3,語法格式:
ulimit [-acdfHlmnpsStvw] [size]
4,引數介紹:
-H 設定硬體資源限制.
-S 設定軟體資源限制.
-a 顯示當前所有的資源限制.
-c size:設定core檔案的最大值.單位:blocks
-d size:設定資料段的最大值.單位:kbytes
-f size:設定建立檔案的最大值.單位:blocks
-l size:設定在記憶體中鎖定程式的最大值.單位:kbytes
-m size:設定可以使用的常駐記憶體的最大值.單位:kbytes
-n size:設定核心可以同時開啟的檔案描述符的最大值.單位:n
-p size:設定管道緩衝區的最大值.單位:kbytes
-s size:設定堆疊的最大值.單位:kbytes
-t size:設定CPU使用時間的最大上限.單位:seconds
-v size:設定虛擬記憶體的最大值.單位:kbytes

-u number:設定使用者最大程式數 (max user processes)
5.舉例
在Linux下寫程式的時候,如果程式比較大,經常會遇到“段錯誤” (segmentation fault)這樣的問題,這主要就是由於Linux系統初始的堆疊大小(stack size)太小的緣故,一般為10M。我一般把stack size設定成256M,這樣就沒有段錯誤了!命令為:
ulimit   -s 262140
如果要系統自動記住這個配置,就編輯/etc/profile檔案,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,新增“ulimit   -s 262140”,儲存重啟系統就可以了

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的stack size 引數調整為unlimited 無限,使用ulimit -s unlimited時只能在當時的shell見效,重開一個shell就失效了。。於是得在/etc/profile 的最後面新增ulimit -s unlimited 就可以了,source /etc/profile使修改檔案生效。

PS:如果你碰到類似的錯誤提示
ulimit: max user processes: cannot modify limit: 不允許的操作
ulimit: open files: cannot modify limit: 不允許的操作

為啥root使用者是可以的?普通使用者又會遇到這樣的問題?
看一下/etc/security/limits.conf大概就會明白。
linux對使用者有預設的ulimit限制,而這個檔案可以配置使用者的硬配置和軟配置,硬配置是個上限。
超出上限的修改就會出“不允許的操作”這樣的錯誤。

在limits.conf加上
*        soft    noproc  10240
*        hard    noproc  10240
*        soft    nofile  10240
*        hard    nofile  10240
就是限制了任意使用者的最大執行緒數和檔案數為10240。

 

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22418990/viewspace-754455/,如需轉載,請註明出處,否則將追究法律責任。

相關文章