天天看點

ulimit -n 修改

通過ulimit -n指令可以檢視linux系統裡打開檔案描述符的最大值,一般預設值是1024,對一台繁忙的伺服器來說,這個值偏小,是以有必要重新設定linux系統裡打開檔案描述符的最大值。那麼應該在哪裡設定呢?

最正确的做法是在/etc/security/limits.conf裡設定:

[root@localhost security]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 30518

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 10240

cpu time               (seconds, -t) unlimited

max user processes              (-u) 1024

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

[root@localhost security]# ulimit -n 10240

open files                      (-n) 10240

[root@localhost security]#

</font></font></font></font>

複制代碼

1. 指令用法

命   令:ulimit

功   能:控制shell程式的資源

語  法:ulimit [-aHS][-c <core檔案上限>][-d <資料節區大小>][-f <檔案大 小>][-m <記憶體大小>][-n <檔案數目>][-p <緩沖區大小>][-s <堆棧大小>][-t <CPU時間>][-u <程式數目>][-v <虛拟記憶體大小>] 

    補充說明:ulimit為shell内建指令,可用來控制shell執行程式的資源。 

    參  數: 

    -a  顯示目前資源限制的設定。  

    -c <core檔案上限>  設定core檔案的最大值,機關為區塊。  

    -d <資料節區大小>  程式資料節區的最大值,機關為KB。  

    -f <檔案大小>  shell所能建立的最大檔案,機關為區塊。  

    -H  設定資源的硬性限制,也就是管理者所設下的限制。  

    -m <記憶體大小>  指定可使用記憶體的上限,機關為KB。  

    -n <檔案數目>  指定同一時間最多可打開的檔案數。  

    -p <緩沖區大小>  指定管道緩沖區的大小,機關512位元組。  

    -s <堆棧大小>  指定堆疊的上限,機關為KB。  

    -S  設定資源的彈性限制。  

    -t <CPU時間>  指定CPU使用時間的上限,機關為秒。  

    -u <程序數目>  使用者最多可啟動的程序數目。 

    -v <虛拟記憶體大小>  指定可使用的虛拟記憶體上限,機關為KB。

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

本文轉自 南非波波 51CTO部落格,原文連結:http://blog.51cto.com/nanfeibobo/1675556,如需轉載請自行聯系原作者