【轉】在Linux中打開了太多文件(Too many open files)的解決方法

回答一 node

文件系統容許打開的最大文件句柄數 nginx

[root@lxadmin nginx]# cat /proc/sys/fs/file-max
8192


每一個進程能打開的最大文件句柄數
[root@lxadmin nginx]# ulimit -n
1024



能夠在啓動某個進程前,使用[root@lxadmin nginx]# ulimit -n 8192調整一下
若是須要永久調整文件系統容許打開的文件句柄數, 在/etc/sysctl.conf末尾添加fs.file-max=xxx

回答二

Linux內核有時會報告「Too many open files」,原由是file-max默認值(如8096)過小。要解決這個問題,能夠root身份執行下列命令

# echo "65536"  > /proc/sys/fs/file-max  # 適用於2.2和2.4版內核
# echo "131072" > /proc/sys/fs/inode-max # 僅適用於2.2版內核d

或將它們加入/etc/rcS.d/*下的init腳本。

回答三

辦法是修改操做系統的打開文件數量限制,方法以下:

1.  在/etc/sysctl.conf末尾添加fs.file-max=xxx

2.  在/etc/security/limits.conf文件中設置每一個進程能最大打開的文件句柄數 : 

* - nofile 8192


* hard nofile 8192
* soft nofile 8192


上述設置了每一個用戶每一個進程的默認打開文件數爲8192。 注意"nofile"項有兩個軟限制(soft)和硬限制(hard)之分。 要使修改過的最大打開文件數生效,必須對這兩種限制進行設定。 若是使用"-"字符設定, 則hard和soft設定會同時被設定。 硬限制代表soft限制中所能設定的最大值。 soft限制是當前系統生效的設置值。 hard限制值能夠被普通用戶下降。可是不能增長。 soft限制不能設置的比hard限制更高。 只有root用戶纔可以增長hard限制值。 當增長文件限制描述,能夠簡單的把當前值雙倍。 例子以下, 若是你要提升默認值1024, 最好提升到2048, 若是還要繼續增長, 就須要設置成4096。

另一種狀況是在建立索引的時候,也有兩種可能,一種是合併因子過小,致使建立文件數量超過操做系統限制,這時能夠修改合併因子,也能夠修改操做系統的打開文件數限制;另外一種是合併因子受虛擬機內存的限制,沒法調整得更大,而須要索引的doc 數量又很是的大,這個時候就只能經過修改操做系統的打開文件數限制來解決了。

在此基礎上,我還修改了配置文件/etc/sysctl.conf ,  對TCP sockets進行了一些優化,例如:
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
#Turn off tcp_timestamps
net.ipv4.tcp_timestamps = 0


 注:一個socket鏈接也被看做一個文件
相關文章
相關標籤/搜索