標籤:
轉自:http://blog.csdn.net/liangxiaozhang/article/details/8363435
Linux對於每個使用者,系統限制其最大進程數。為提高效能,可以根據裝置資源情況,設定各linux 使用者的最大進程數
可以用ulimit -a 來顯示當前的各種使用者進程限制。
下面我把某linux使用者的最大進程數設為10000個:
ulimit -u 10240
對於需要做許多 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
儲存後運行#source /etc/profile 使其生效
/**************************************
有時候在程式裡面需要開啟多個檔案,進行分析,系統一般預設數量是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
ulimit 的作用
=======================
ulimit:顯示(或設定)使用者可以使用的資源的限制(limit),這限制分為軟式節流(當前限制)和硬限制(上限),其中硬限制是軟式節流的上限值,應用程式在運行過程中使用的系統資源不超過相應的軟式節流,任何的超越都導致進程的終止。
參數 描述
ulimited 不限制使用者可以使用的資源,但本設定對可開啟的最大檔案數(max open files)
和可同時啟動並執行最大進程數(max user processes)無效
-a 列出所有當前資源極限
-c 設定core檔案的最大值.單位:blocks
-d 設定一個進程的資料區段的最大值.單位:kbytes
-f Shell 建立檔案的檔案大小的最大值,單位:blocks
-h 指定設定某個給定資源的硬極限。如果使用者擁有 root 使用者權限,可以增大硬極限。任何使用者均可減少硬極限
-l 可以鎖住的實體記憶體的最大值
-m 可以使用的常駐記憶體的最大值,單位:kbytes
-n 每個進程可以同時開啟的最大檔案數
-p 設定管道的最大值,單位為block,1block=512bytes
-s 指定堆棧的最大值:單位:kbytes
-S 指定為給定的資源設定軟極限。軟極限可增大到硬極限的值。如果 -H 和 -S 標誌均未指定,極限適用於以上二者
-t 指定每個進程所使用的秒數,單位:seconds
-u 可以啟動並執行最大並發進程數
-v Shell可使用的最大的虛擬記憶體,單位:kbytes
-x
範例1:
[[email protected] proc]# ulimit -a
core file size (blocks, -c) 100
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 2047
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 2047
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[[email protected] proc]#
輸出的每一行由資源名字、(單位,ulimit命令的參數)、軟式節流組成。詳細解釋:
參數 描述
core file size core檔案的最大值為100 blocks,
data seg size 進程的資料區段可以任意大
file size 檔案可以任意大
pending signals 最多有2047個待處理的訊號
max locked memory 一個任務鎖住的實體記憶體的最大值為32kB
max memory size 一個任務的常駐實體記憶體的最大值
open files 一個任務最多可以同時開啟1024的檔案
pipe size 管道的最大空間為4096位元組
POSIX message queues POSIX的訊息佇列的最大值為819200位元組
stack size 進程的棧的最大值為8192位元組
cpu time 進程使用的CPU時間
max user processes 目前使用者同時開啟的進程(包括線程)的最大個數為2047
virtual memory 沒有限制進程的最大地址空間
file locks 所能鎖住的檔案的最大個數沒有限制
範例2:通過ulimit命令來限制檔案的大小,從而導致拷貝命令的失敗
[[email protected]]ls temp.txt
ls: temp.txt: 沒有那個檔案或目錄
[[email protected]]ulimit -f 1 #設定建立檔案的最大塊(一塊=512位元組)
[[email protected]]cat a.c > temp.txt
檔案大小超出限制
檔案a.c的大小是5002位元組,而我們設定的建立檔案的大小是512位元組x1塊=512位元組
Linux 調優方案, 修改最大串連數(ulimit命令)【轉】