Linux ulimit配置

原文鏈接:https://blog.csdn.net/isoleo/article/details/51732687

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

上邊兩行可以用一行代替  * - noproc 11000 

-的意思爲soft 和hard 全部限制 。


        * 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:

[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字節 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章