日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

普通java跑到linux上,JAVA在linux下open too many files

發(fā)布時間:2025/3/20 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 普通java跑到linux上,JAVA在linux下open too many files 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。