file-max VS ulimit

    簡單的說, max-file表示系統級別的可以打開的文件句柄的數量, 而ulimit -n控制進程級別可以打開的文件句柄的數量.node

   file-max中指定了系統範圍內全部進程可打開的文件句柄的數量限制(系統級別, kernel-level). (The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate).當收到」Too many open files in system」這樣的錯誤消息時, 就應該曾加這個值了.shell

   # cat /proc/sys/fs/file-max 
    4096 
    # echo 100000 > /proc/sys/fs/file-maxapache

或者bash

    # echo ""fs.file-max=65535" >> /etc/sysctl.conf 
    # sysctl -psession

    對於2.2的內核, 還須要考慮inode-max, 通常inode-max設置爲file-max的4倍. 對於2.4及之後的內核, 沒有inode-max這個文件了.app

    file-nr 能夠查看系統中當前打開的文件句柄的數量. 他裏面包括3個數字: 第一個表示已經分配了的文件描述符數量, 第二個表示空閒的文件句柄數量, 第三個表示可以打開文件句柄的最大值(跟file-max一致). 內核會動態的分配文件句柄, 可是不會再次釋放他們socket

man bash, 找到說明ulimit的那一節: 
提供對shell及其啓動的進程的可用資源(包括文件句柄, 進程數量, core文件大小等)的控制. 這是進程級別的, 也就是說系統中某個session及其啓動的每一個進程能打開多少個文件描述符, 能fork出多少個子進程等… 
當達到上限時, 會報錯」Too many open files」或者趕上Socket/File: Can’t open so many filestcp

     另外須要注意的是, 每種資源都有相關的軟硬限制, 軟限制是內核強加給相應資源的限制值,硬限制是軟限制的最大值. 非受權調用進程只能夠將其軟限制指定爲0~硬限制範圍中的某個值,同時能不可逆轉地下降其硬限制.受權進程能夠任意改變其軟硬限制.RLIM_INFINITY的值表示不對資源限制. 
分別使用-H和-S選項來指定須要對資源是作硬限制/軟限制的設置. 若是都不指定, 硬限制和軟限制同時設置. 
打印資源的限制值, 若是不明確指定-H, 打印的是-Sthis

    要改apache的ulimit, 能夠在 /usr/sbin/apachectl 這個腳本中修改 ULIMIT_MAX_FILES 這個值spa

    可打開文件句柄數設置的太大, 有那些危害:      If the file descriptors are tcp sockets, etc, then you risk using up a large amount of memory for the socket buffers and other kernel objects; this memory is not going to be swappable.  另外要記得的是socket connection也是文件.

相關文章
相關標籤/搜索