linux ulimit 優化系統

㈠、何爲ulimitphp

ulimit爲shell內建指令,可用來控制shell執行程序的資源linux

㈡、ulimitl默認值是多少nginx

[root@mttx ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 8064
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
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8064
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
 shell

㈢、爲什麼要修改ulimit服務器

   對於須要作許多 socket 鏈接並使它們處於打開狀態的 Java 應用程序而言,
最好經過使用 ulimit -n xx 修改每一個進程可打開的文件數,缺省值是 1024,有時候會趕上Socket/File: Can’t open so many files或too many open files的問題.session

㈣怎麼修改ulimitsocket

1在/etc/rc.local中增長
ulimit -SHn 65535ide

2在/etc/profile中增長
ulimit -SHn 65535優化

而後source /etc/profile讓參數即時生效ui

3在/etc/security/limits.conf 中增長

 

*     soft   nproc           65535
*     hard   nproc           65535
*     soft   nofile          65535
*     hard   nofile          65535

說明:* 表明針對全部用戶,nproc是表明最大進程數,nofile 是表明最大文件打開數.修改了limits.conf文件以後,要讓它當即生效,只需關閉當前session,從新鏈接便可

 

㈤、擴展閱讀:

在Linux下面部署應用的時候,,其實Linux是有文件句柄限制的,並且默認不是很高,通常都是1024,做爲一臺生產服務器,其實很容易就達到這個數量,所以咱們需 要把這個值改大一些。

 

  這裏,有不少ulimit的文章都說的很含糊,究竟這個1024 是系統的限制,仍是用戶的限制呢。其實,這個是用戶限制來的,完整的說法,應該是當前用戶準備要運行的程序的限制。

一、這個限制是針對單個程序的限制
二、這個限制不會改變以前已經運行了 的程序的限制
三、對這個值的修改,退出了當前的 shell就會消失

   好比說,我先運行了一個程序A,而後 經過ulimit修改了限制爲 2048,而後運行B,而後退出了shell再登陸,而後運行C。那就只有B能夠打開2048個句柄。

其中一個方法,是想ulimit修改命令放入/etc/profile 裏面,可是這個作法並很差

正確的作法,應該是修改/etc /security/limits.conf

那系統總限制呢

實際上是在這裏,/proc/sys /fs/file-max
能夠經過cat查看目前的 值,echo來馬上修改

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

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

若是你使用squid的話,你要在/etc/init.d/squid的文件加入ulimit -HSn 65535.另外,在squid.conf中也要加入max_filedesc 16384

注:上面這種方式只是改變了用戶登錄系統後的文件打開數,對於/etc/init.d/nginxphp這種的啓動腳本並不起做用,像這種啓動腳本,須要在腳本內加一行:

ulimit -HSn 65535才行。


修改ulimit優化服務器

 

默認linux系統的文件描述符是1024,在大負載的狀況下這點文件描述符是遠遠不夠的,如下兩種方法:

 

一,經過ulimit命令修改  

#顯示當前文件描述符

ulimit -n

 

#修改當前用戶環境下的文件描述符爲65536

ulimit -HSn 65536

只能修改當前登陸用戶環境下的文件描述符,若是此用戶來另外打開一個鏈接,此連接環境的文件描述符依然是沒改前的。若是系統重啓,之前修改都再也不生效

 

二,經過修改limits.conf文件

1.打開/etc/security/limits.conf,裏面有很詳細的註釋,找到以下設置(若是沒有就插入)

* soft nofile 65536

* hard nofile 65536

 

2.編輯/etc/pam.d/common-session,加入一行

session required pam_limits.so

3.編輯/etc/profile,加入

ulimit -SHn 65536

相關文章
相關標籤/搜索