/proc/sys/fs/file-max html
該文件指定了能夠分配的文件句柄的最大數目。linux
查看最大值:vim
[root@localhost home]# cat /proc/sys/fs/file-max 100977 [root@localhost home]#
這 代表這臺Linux系統最多容許同時打開(即包含全部用戶打開文件數總和)100977個文件,是Linux系統級硬限制,全部用戶級的打開文件數限制都 不該超過這個數值。一般這個系統級硬限制是Linux系統在啓動時根據系統硬件資源情況計算出來的最佳的最大同時打開文件數限制,若是沒有特殊須要,不該 該修改此限制,除非想爲用戶級打開文件數限制設置超過此限制的值。這個參數的默認值是跟內存大小有關係的,增長物理內存之後重啓機器,這個值會增大。大約1G內存10萬個句柄的線性關係。bash
修改值:服務器
若是用戶獲得的錯誤消息聲明,相似」too many open files」,這是因爲打開文件數已經達到了最大值,從而他們不能打開更多文件,則可能須要增長該值。session
[root@localhost home]# vim /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don‘t # want to do the full Sys V style init stuff. echo 222158 > /proc/sys/fs/file-max ;添加此項,修改file-max值 touch /var/lock/subsys/local [root@localhost home]# reboot [root@localhost ~]# cat /proc/sys/fs/file-max 222158 [root@localhost ~]#
修改此硬限制的方法是修改/etc/rc.local腳本,在腳本中添加以下行:
echo 22158 > /proc/sys/fs/file-max
這是讓Linux在啓動完成後強行將系統級打開文件數硬限制設置爲22158。修改完後保存此文件。
dom
/proc/sys/fs/file-nr socket
該文件與 file-max 相關,它有三個值:
已分配文件句柄的數目 已使用文件句柄的數目 文件句柄的最大數目
該文件是隻讀的,僅用於顯示信息。ide
[root@localhost ~]# cat /proc/sys/fs/file-nr 2112 0 222158 [root@localhost ~]#
/etc/security/limits.conf工具
limits.conf的格式以下:
<domain> <type> <item> <value>
<domain> :能夠指定單個用戶名、@組名、全部用戶(*)
type:有 soft(指的是當前系統生效的設置值),hard(代表系統中所能設定的最大值)和 -(代表同時設置了 soft 和 hard 的值)
[root@localhost ~]# vim /etc/security/limits.conf ;文末添加如下兩項 * hard nofile 4096 * soft nofile 4096 :wq
個人是RedHat5.4修改後須要從新登錄,有的系統可能須要重啓生效,
使 limits.conf 文件配置生效,必需要確保 pam_limits.so 文件被加入到啓動文件中。查看 /etc/pam.d/login 文件中是否有如下選項:
[root@localhost ~]# cat /etc/pam.d/login |grep "pam_limits.so" session required /lib/security/pam_limits.so [root@localhost ~]#
這 是告訴Linux在用戶完成系統登陸後,應該調用pam_limits.so模塊來設置系統對該用戶可以使用的各類資源數量的最大限制(包括用戶可打開的最 大文件數限制),而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設置這些限制值。
linux下面部署應用的時候,有時候會趕上socket/file: can‘t open so many files的問題,其實linux是有文件句柄限制的(就像winxp?),並且默認不是很高,通常都是1024,做爲一臺生產服務器,其實很容易就達到這個數量,所以咱們須要修改上述文件把這個值改大一些。
[root@localhost ~]# cat /proc/sys/fs/file-max 100977 [root@localhost ~]# cat /proc/sys/fs/file-nr 2112 0 100977 [root@localhost ~]# 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) 7922 max locked memory (kbytes, -l) 64 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) 7922 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited [root@localhost ~]# ulimit -n 1024 [root@localhost ~]#
若是須要臨時修改文件句柄數可使用如下操做:
[root@localhost ~]# ulimit -HSn 4096 [root@localhost ~]# ulimit -n 4096 [root@localhost ~]#
H指定了硬性大小,S指定了軟性大小,n表示設定單個進程最大的打開文件句柄數量
如何查看當前系統打開文件數最多的程序:
lsof(list open files)是一個列出當前系統打開文件的工具。在終端下輸入lsof便可顯示系統打開的文件,由於 lsof 須要訪問核心內存和各類文件,因此必須以 root 用戶的身份運行它纔可以充分地發揮其功能。 每行顯示一個打開的文件,若不指定條件默認將顯示全部進程打開的全部文件
lsof -n 不將IP轉換爲hostname,缺省是不加上-n參數 eg:# lsof /GTES11/
lsof -i 用以顯示符合條件的進程狀況 eg:# lsof -i :22
[root@localhost ~]# lsof -n|awk ‘{print $2}‘|sort -nr|uniq -c|sort -nr|head -5 162 1812 149 1827 126 1591 107 1823 100 1826 [root@localhost ~]#
如何查看某一程序打開文件數:lsof -p pid
[root@localhost ~]# lsof -p 1812|wc -l 163 [root@localhost ~]# lsof -p 1827|wc -l 150 [root@localhost ~]#轉載來源:http://www.bubuko.com/infodetail-382459.html