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