在做linux服務器程序的時候,當流量上來,linux服務器的默認單進程的文件打開數肯定是不夠的,一般非root用戶進程默認只有1024個文件打開權限,所有對文件的操作,對網絡的操作,在linux下都作爲一個文件打開,所以在併發量大的時候,這個限制很快就達到了。一旦達到這個限制,應用程序就會報一個:too many open files的錯誤。解決這個問題就需要增大這個限制,下面是我在網上找到的,而且也已經應用在實際服務器的運維上: linux默認下open files 是1024,首先看下系統現有的設置 [root@lpmaster ~]# ulimit -a core file size (blocks, -c) 0 ##設定core文件的最大值 data seg size (kbytes, -d) unlimited ##程序數據節區的最大值 scheduling priority (-e) 0 ## file size (blocks, -f) unlimited ##shell所能建立的最大文件 pending signals (-i) 71680 max locked memory (kbytes, -l) 32 ##設置在內存中鎖定進程的最大值. max memory size (kbytes, -m) unlimited ##設置可以使用的常駐內存的最大值. open files (-n) 1024 ##設置內核可以同時打開的文件描述符的最大值.單位:n pipe size (512 bytes, -p) 8 ##設置管道緩衝區的最大值 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 ##設置堆棧的最大值.單位:kbytes cpu time (seconds, -t) unlimited ##設置CPU使用時間的最大上限.單位:seconds max user processes (-u) 71680 ##用戶最多可開啓的程序數目。 virtual memory (kbytes, -v) unlimited ##指定可使用的虛擬內存上限,單位爲KB。 file locks (-x) unlimited 參數介紹: -H 設置硬件資源限制. -S 設置軟件資源限制. -a 顯示當前所有的資源限制. -c size:設置core文件的最大值.單位:blocks -d size:設置數據段的最大值.單位:kbytes -f size:設置創建文件的最大值.單位:blocks -l size:設置在內存中鎖定進程的最大值.單位:kbytes -m size:設置可以使用的常駐內存的最大值.單位:kbytes -n size:設置內核可以同時打開的文件描述符的最大值.單位:n -p size:設置管道緩衝區的最大值.單位:kbytes -s size:設置堆棧的最大值.單位:kbytes -t size:設置CPU使用時間的最大上限.單位:seconds -v size:設置虛擬內存的最大值.單位:kbytes 當看到open files 是1024,針對我的應用 是完全不夠用的,現在進行修改 [root@lpmaster ~]# ulimit -n 65535 ##設置 open files 打開的文件數65535 [root@lpmaster ~]# ulimit -n #查看現在系統open files 65535 或者用另一種方法修改 vim 打開 /etc/security/limits.conf,增加: * soft nofile 65535 * hard nofile 65535 這行設置了每個用戶的默認打開文件數爲2048。注意"nofile"項有兩個可能的限制措施。就是項下的hard和soft。要使修改過得最大打開文件數生效,必須對這兩種限制進行設定。 如果使用"-"字符設定, 則hard和soft設定會同時被設定。 硬限制表明soft限制中所能設定的最大值。 soft限制指的是當前系統生效的設置值。 hard限制值可以被普通用戶降低。但是不能增加。 soft限制不能設置的比hard限制更高。 只有root用戶才能夠增加hard限制值。 在對open files 修改最大值是,也可以檢查/proc/sys/fs/file-max文件來確認系統最大打開文件數的限制,另外還有一個,/proc/sys/fs/file-nr只讀,可以看到整個系統目前使用的文件句柄數量 也可以一般在啓動應用的時候先執行ulimit -HSn 65535,省得每個應用啓動都要執行ulimit -HSn 65535 所以我一般寫入到/etc/rc.local ,這樣重啓的時候默認設置