Linux 調優方案,如何修改至大連接數 Ulimit命令 係統限製至大進程數 Max User Processes
Linux對於每個用戶,係統限製其至大進程數max user processes。爲提髙性能,可以根據設備資源情況,設置各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 用戶權限,可以somewords硬極限。任何用戶均可減少硬極限
-l 可以鎖住的物理内存的至大值
-m 可以使用的常駐内存的至大值,單位:kbytes
-n 每個進程可以同時打開的至大文件數
-p 設置管道的至大值,單位爲block,1block=512bytes
-s 指定堆棧的至大值:單位:kbytes
-S 指定爲給定的資源設置軟極限。軟極限可somewords到硬極限的值。如果 -H 和 -S 標誌均未指定,極限適用於以上二者
-t 指定每個進程所使用的秒數,單位:seconds
-u 可以運行的至大並發進程數
-v Shell可使用的至大的虛擬内存,單位:kbytes
-x
範例1:
[root@localhost 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
[root@localhost 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命令來限製文件的大小,從而導緻拷貝命令的失敗
[root@localhost]ls temp.txt
ls: temp.txt: 沒有那個文件或目錄
[root@localhost]ulimit -f 1 #設置創建文件的至大塊(一塊=512字節)
[root@localhost]cat a.c > temp.txt
文件大小超出限製
文件a.c的大小是5002字節,而我們設定的創建文件的大小是512字節x1塊=512字節