ulimit的功能描述:
假設一臺機器現在有10人登陸,在系統資源沒有限制的情況下,一個人又打開500個文件,每個文件有10m,那這個時候系統內存的資源就收到嚴重的挑戰
而實際應用的環境要比這種假設複雜的多,例如在一個嵌入式開發環境中,各方面的資源都是非常緊缺的,對於開啓文件描述符的數量,分配堆棧的大小,CPU 時間,虛擬內存大小,等等,都有非常嚴格的要求。資源的合理限制和分配,不僅僅是保證系統可用性的必要條件,也與系統上軟件運行的性能有着密不可分的聯繫。這時,ulimit 可以起到很大的作用,它是一種簡單並且有效的實現資源限制的方式。
在大型公司,有時候打的集羣個訪問量,有時候需要跑很多程序,有時候程序會莫名奇怪的掛掉,這個時候就需要看看你的ulimit的設置了
工作中最長用的參數:
ulimit -a 列出所有的參數選項
ulimit -H 設置硬件資源限制
ulimit -S 設置軟件資源限制
ulimit -n 設置應許打開文件數
修改ulimit參數,配置文件是:/etc/security/limits.conf
格式:<domain> <type> <item> <value>
domain:可以是用戶或者用戶組 *代表所有
type:可以有兩個值,soft 和 hard
item:表示要限定的資源 可以有很多候選值,如 stack(最大堆棧大小),cpu(佔用cpu的時間),nofile(最大打開文件數) 等等
例:* hard nofile 100 該行配置語句限定了任意用戶所能創建的最大文件數是 100。
默認都是用的是soft
使用 ulimit 限制程序所能創建的 socket 數量
考慮到現實生活中的需求,在c/s模式中,一個服務器可能有多個客戶端進行訪問,如果socket數量過多,這是server就需要創建大量的socket端口,系統中往往是限制一個程序創建socket端口的個數的。那如何實現呢,當然是通過ulimit限制,細心的同學可能發現,並沒有socket的參數選項,但是在linux系統中,一切皆文件,1.我們是通過設置nofile的個數來顯示socket的個數的(ulimit -n),2.設置linux的最大進程數來控制(ulimit -u)
linux的系統默認是1024,但是在實際情況下往往是不夠用的,可以根據自己的需要進行設置,我們單位平時設置的是196605
還有一個參數就是max user processes 最大進程數 ulimit -u 設置成196605