ulimit詳解

 網上的ulimit設置,只是簡單說明了如何設置ulimit,方法各類各樣讓人一頭霧水,這裏整理一下。web

目錄
shell

1、ulimit簡介bash

2、ulimit命令使用服務器

3、ulimit使用方式及做用範圍app

4、ulimit相關配置文件dom

5、ulimit -n與file-max的關係和區別 socket


1、ulimit簡介ide

  ulimit是bash內鍵命令,它具備一套參數集,用於爲由它生成的shell進程及其子進程的資源使用設置限制。能夠用help ulimit 查詢手冊。spa

2、ulimit命令使用線程

一、選項詳解

[root@BriefServer ~]# help ulimit
ulimit: ulimit [-SHacdefilmnpqrstuvx] [limit]
    Modify shell resource limits.
     
    Provides control over the resources available to the shell and processes
    it creates, on systems that allow such control.
     
    Options:
      -S  use the `soft' resource limit
      -H  use the `hard' resource limit
      -a  all current limits are reported
      -b  the socket buffer size
      -c  the maximum size of core files created
      -d  the maximum size of a process's data segment
      -e  the maximum scheduling priority (`nice')
      -f  the maximum size of files written by the shell and its children
      -i  the maximum number of pending signals
      -l  the maximum size a process may lock into memory
      -m  the maximum resident set size
      -n  the maximum number of open file descriptors
      -p  the pipe buffer size
      -q  the maximum number of bytes in POSIX message queues
      -r  the maximum real-time scheduling priority
      -s  the maximum stack size
      -t  the maximum amount of cpu time in seconds
      -u  the maximum number of user processes
      -v  the size of virtual memory
      -x  the maximum number of file locks

選項     例子

Hulimit -Hs 64 限制資源,線程棧大小爲64K

Sulimit -Sn 32 限制資源,32個文件描述符

aulimit -a 顯示當前全部limit信息

culimit -c unlimited 對生成的core文件大小不進行限制

dulimit -d unlimited 對生成的數據段大小不進行限制

fulimit -f 2048 限制進程可建立的最大文件大小爲2048 blocks

lulimit -l 32 限制最大可加鎖內存大小爲 kbytes

mulimit -m unlimited 對最大內存不進行限制

nulimit -n 128 限制最大可以使用128個文件描述符

pulimit -p 512 限制管道緩衝區的大小爲512 kbytes

sulimit -s 512 限制線程棧的大小爲512 kbytes

tulimit -t unlimited 對最大的cpu佔用時間不進行限制

uulimit -u 64 限制用戶最多可使用64個進程

vulimit -v 200000 限制最大可用的虛擬內存爲 200000 kbytes 

注意:這個當中的硬限制是實際的限制,而軟限制,是warnning限制,只會作出warning;其實ulimit命令自己就有分軟硬設置,加-H就是硬,加-S就是軟

默認顯示的是軟限制,若是運行ulimit命令修改的時候沒有加上的話,就是兩個參數一塊兒改變。

3、ulimit的使用方式及做用範圍

一、在用戶的啓動腳本里

     若是用戶使用的是 bash,就能夠在用戶的目錄下的 .bashrc 文件中,加入 ulimit – u 64,來限制用戶最多可使用 64 個進程。此外,能夠在與 .bashrc 功能至關的啓動腳本中加入 ulimt。

2.  應用程序的啓動腳本中

  編寫個簡單的啓動腳本,startmyapp

#/bin/sh
ulimit -n 512
myapp.sh

以這個startmyapp啓動myapp.sh時,myapp.sh這個腳本打開的文件句柄數不超過512個。

3. 直接控制檯輸入

[root@web ~]# ulimit -p 256

限制管道緩衝區爲256k

       ulimit 做爲對資源使用限制的一種工做,是有其做用範圍的。那麼,它限制的對象是單個用戶,單個進程,仍是整個系統呢?事實上,ulimit 限制的是當前shell進程以及其派生的子進程。

舉例來講,若是用戶同時運行了兩個 shell 終端進程,只在其中一個環境中執行了 ulimit – s 100,則該 shell 進程裏建立文件的大小收到相應的限制,而同時另外一個 shell 終端包括其上運行的子程序都不會受其影響。

4、ulimit相關配置文件

主配置文件:/etc/security/limits.conf

分段配置文件:/etc/secutity/limits.d/*.conf

      經過修改系統的 /etc/security/limits.conf配置文件。該文件不只能限制指定用戶的資源使用,還能限制指定組的資源使用。該文件的每一行都是對限定的一個描述,

格式以下:

#<domain>      <type>  <item>         <value>
#
 
#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

名稱             含義

domain     表示用戶或者組的名字,還可使用 * 做爲通配符表明全部用戶

username|@groupname:設置須要被限制的用戶名,組名前面加@和用戶名區別。

type          能夠有兩個值,soft 和 hard。type:有 soft,hard 和 -,soft 指的是當前系統生效的設置值。hard 代表系統中所能設定的最大值。soft 的限制不能比har 限制高。用 - 就代表同時設置了 soft 和 hard 的值。

item         則表示須要限定的資源,能夠有不少候選值,如 stack,cpu 等等,分別表示最大的堆棧大小,佔用的 cpu 時間,noproc 是表明進程數、nofile 是表明文件打開數

value  對應相應的值

編輯保存以後,須要從新登陸一次才能生效

5、ulimit -n與file-max的關係和區別    

查看Linux系統級的最大打開文件數限制,使用以下命令:

[root@www ~]# cat /proc/sys/fs/file-max 
97938

     這代表這臺Linux系統最多允許同時打開(即包含全部用戶打開文件數總和)97938個文件,是Linux系統級硬限制,全部用戶級的打開文件數限制都不應超過這個數值。一般這個系統級硬限制是Linux系統在啟動時根據系統硬件資源狀況計算出來的最佳的最大同時打開文件數限制,若是沒有特殊須要,不應該修改此限制,除非想為用戶級打開文件數限制設置超過此限制的值。

這是讓Linux在啟動完成後強行將系統級打開文件數硬限制設置為1024000,修改完後保存此文件。

     file-max是設置 系統全部進程一共能夠打開的文件數量 。同時一些程序能夠經過setrlimit調用,設置每一個進程的限制。若是獲得大量使用完文件句柄的錯誤信息,是應該增長這個值。

也就是說,這項參數是系統級別的。


echo  6553560 > /proc/sys/fs/file-max

或修改 /etc/sysctl.conf, 加入

fs.file-max = 6553560 

執行以下命令生效:sysctl -p

      另外還有一個,/proc/sys/fs/file-nr,能夠看到整個系統目前使用的文件句柄數量。

查找文件句柄問題的時候,還有一個很實用的程序lsof。能夠很方便看到某個進程開了那些句柄,也能夠看到某個文件/目錄被什麼進程佔用了。

顯然,對服務器來講,file-max, ulimit都須要設置,不然就可能出現文件描述符用盡的問題,爲了讓機器在重啓以後仍然有效,強烈創建做如下配置,以確保file-max, ulimit的值正確無誤:

1. 修改/etc/sysctl.conf, 加入

fs.file-max = 6553560

2.系統默認的ulimit對文件打開數量的限制是1024,修改/etc/security/limits.conf並加入如下配置,永久生效

* soft nofile 65535 
* hard nofile 65535


轉自:xiexiaojun

http://xiexiaojun.blog.51cto.com/2305291/1730332

相關文章
相關標籤/搜索