普通java跑到linux上,JAVA在linux下open too many files
Too?many?open?files問題出現有兩種情況:一種是在搜索的時候出現,多半是由于索引創建完畢之后被移動過,如果創建索引的時候不出現該錯誤,搜索的時候也一般是不會出現的。如果出現了,有兩種處理辦法,一種是修改合并因子和最小合并因子,并且使用IndexWriter.Optimize()優化索引,這樣會將索引文件數量減少到文件系統限制之內;另外一種辦法是修改操作系統的打開文件數量限制。方法如下:1.按照最大打開文件數量的需求設置系統,并且通過檢查/proc/sys/fs/file-max文件來確認最大打開文件數已經被正確設置。#?cat?/proc/sys/fs/file-max如果設置值太小,修改文件/etc/sysctl.conf的變量到合適的值。這樣會在每次重啟之后生效。如果設置值夠大,跳過下步。#?echo?2048?>?/proc/sys/fs/file-max編輯文件/etc/sysctl.conf,插入下行。fs.file-max?=?8192
2.在/etc/security/limits.conf文件中設置最大打開文件數,下面是一行提示:#添加如下這行。*?-?nofile?8192這行設置了每個用戶的默認打開文件數為2048。注意"nofile"項有兩個可能的限制措施。就是項下的hard和soft。要使修改過得最大打開文件數生效,必須對這兩種限制進行設定。如果使用"-"字符設定,則hard和soft設定會同時被設定。硬限制表明soft限制中所能設定的最大值。soft限制指的是當前系統生效的設置值。hard限制值可以被普通用戶降低。但是不能增加。soft限制不能設置的比hard限制更高。只有root用戶才能夠增加hard限制值。當增加文件限制描述,可以簡單的把當前值雙倍。例子如下,如果你要提高默認值1024,最好提高到2048,如果還要繼續增加,就需要設置成4096。另外一種情況是在創建索引的時候,也有兩種可能,一種是合并因子太小,導致創建文件數量超過操作系統限制,這時可以修改合并因子,也可以修改操作系統的打開文件數限制;另外一種是合并因子受虛擬機內存的限制,無法調整到更大,而需要索引的doc數量又非常的大,這個時候就只能通過修改操作系統的打開文件數限制來解決了。在此基礎上,我還修改了以下一個配置文件vi?/etc/sysctl.conf添加:#?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然后service?network?restart,這些都和TCP?sockets有關的優化。另外需要在/etc/rc.d/rc.local里添加已使得重啟的時候生效。echo?"30">/proc/sys/net/ipv4/tcp_fin_timeout
echo?"1800">/proc/sys/net/ipv4/tcp_keepalive_time
echo?"0">/proc/sys/net/ipv4/tcp_window_scaling
echo?"0">/proc/sys/net/ipv4/tcp_sack
echo?"0">/proc/sys/net/ipv4/tcp_timestamps因為不是所有的程序都在root下跑的,所有linux有對hard與soft?open?files的區分,普通用戶受hard的限制,無論ulimit?-n?$數值調到多高,都跑不到/etc/security/limits.conf里nofile的值.這樣的優化后lsof?-p?$java_pid|wc?-l可以跑到4千以上都不會拋出too?many?open?files。但是我們通過以上的文章詳細介紹知道,這樣也是治標不治本,找到java哪個文件不關閉文件描述符或者被請求過多的原因才是最重要的!
總結
以上是生活随笔為你收集整理的普通java跑到linux上,JAVA在linux下open too many files的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux线程创建 类函数吗,linux
- 下一篇: linux boot空间分多少,/boo