1. 程式人生 > >ulimit詳解

ulimit詳解

ulimit詳解

通過ulimit -n命令可以查看linux系統裏打開文件描述符的最大值,一般缺省值是1024,對一臺繁忙的服務器來說,這個值偏小,所以有必要重新設置linux系統裏打開文件描述符的最大值。

設置個Linux用戶的最大進程數,一些需要設置為無限制:

數據段長度:ulimit -d unlimited

最大內存大小:ulimit -m unlimited

堆棧大小:ulimit -s unlimited

句柄數: ulimit -SHn 102400

這些都是臨時的,要永久有效,需要寫入文件內profile


最正確的做法是在/etc/security/limits.conf裏設置:


[root@master zabbix]# ulimit -a

core file size (blocks, -c) unlimited

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 15751

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 102400

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) 15751

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited


[root@master zabbix]# ulimit -n 65535

[root@master zabbix]# ulimit -a

core file size (blocks, -c) unlimited

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 15751

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 65535

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) 15751

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited




1. 命令用法


命 令:ulimit

功 能:控制shell程序的資源

語  法:ulimit [-aHS][-c <core文件上限>][-d <數據節區大小>][-f <文件大 小>][-m <內存大小>][-n <文件數目>][-p <緩沖區大小>][-s <堆棧大小>][-t <CPU時間>][-u <程序數目>][-v <虛擬內存大小>]

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

參  數:

-H 設置硬件資源限制,是管理員所設下的限制.

-S 設置軟件資源限制,是管理員所設下的限制.

-a 顯示當前所有的資源限制.

-u 進程數目:用戶最多可啟動的進程數目.

-c size:設置core文件的最大值.單位:blocks

-d size:設置程序數據段的最大值.單位:kbytes

-f size:設置shell創建文件的最大值.單位:blocks

-l size:設置在內存中鎖定進程的最大值.單位:kbytes

-m size:設置可以使用的常駐內存的最大值.單位:kbytes

-n size:設置內核可以同時打開的文件描述符的最大值.單位:n

-p size:設置管道緩沖區的最大值.單位:kbytes

-s size:設置堆棧的最大值.單位:kbytes

-t size:設置CPU使用時間的最大上限.單位:seconds

-v size:設置虛擬內存的最大值.單位:kbytes

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 是代表最大文件打開數


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


ulimit詳解