java 句柄数 设置_技术文档(2)--Linux 句柄数设置情况,问题:java.io.IOException: Too many open files...
打開(kāi)的文件過(guò)多,一般來(lái)說(shuō)是由于應(yīng)用程序?qū)Y源使用不當(dāng)造成,比如沒(méi)有及時(shí)關(guān)閉Socket或數(shù)據(jù)庫(kù)連接等。但也可能應(yīng)用確實(shí)需要打開(kāi)比較多的文件句柄,而系統(tǒng)本身的設(shè)置限制了這一數(shù)量。
第一個(gè)異常在錯(cuò)誤影響到基礎(chǔ) TCP 協(xié)議時(shí)拋出,而第二個(gè)異常則在錯(cuò)誤影響到 I/O 操作時(shí)拋出。
文件打開(kāi)數(shù)過(guò)多最壞的情況可以使系統(tǒng)崩潰,到時(shí)候只能是重起服務(wù)器了。
原因:
操作系統(tǒng)的中打開(kāi)文件的最大句柄數(shù)受限所致,常常發(fā)生在很多個(gè)并發(fā)用戶訪問(wèn)服務(wù)器的時(shí)候.因?yàn)闉榱藞?zhí)行每個(gè)用戶的應(yīng)用服務(wù)器都要加載很多文件(new一個(gè)socket就需要一個(gè)文件句柄),這就會(huì)導(dǎo)致打開(kāi)文件的句柄的缺乏.
解決:
盡量把類打成jar包,因?yàn)橐粋€(gè)jar包只消耗一個(gè)文件句柄,如果不打包,一個(gè)類就消耗一個(gè)文件句柄.
java的垃圾回收不能關(guān)閉網(wǎng)絡(luò)連接打開(kāi)的文件句柄,如果沒(méi)有執(zhí)行close()(例如:java.net.Socket.close())則文件句柄將一直存在,而不能被關(guān)閉.你也可以考慮設(shè)置socket的最大打開(kāi)數(shù)來(lái)控制這個(gè)問(wèn)題.
對(duì)操作系統(tǒng)做相關(guān)的設(shè)置,增加最大文件句柄數(shù)量。
Linux
在
Linux內(nèi)核2.4.x中需要修改源代碼,然后重新編譯內(nèi)核才生效。編輯Linux內(nèi)核源代碼中的 include/linux/fs.h文件,將
NR_FILE 由8192改為65536,將NR_RESERVED_FILES 由10 改為 128。編輯fs/inode.c
文件將MAX_INODE 由16384改為262144?;蛘呔庉?/etc/sysctl.conf? 文件增加兩行
fs.file-max =?65536 和 fs.inode-max =?262144
。一般情況下,系統(tǒng)最大打開(kāi)文件數(shù)比較合理的設(shè)置為每4M物理內(nèi)存256,比如256M.可以用lsof -p
process>看打開(kāi)的文件句柄數(shù).
Windows
最大文件句柄是16,384,你在任務(wù)管理器的性能這一項(xiàng)中可以看到當(dāng)前打開(kāi)的句柄數(shù).
服務(wù)器端修改:
查看系統(tǒng)允許打開(kāi)的最大文件數(shù)
#cat /proc/sys/fs/file-max
查看每個(gè)用戶允許打開(kāi)的最大文件數(shù)
ulimit -a
發(fā)現(xiàn)系統(tǒng)默認(rèn)的是open files (-n) 1024,問(wèn)題就出現(xiàn)在這里。
在系統(tǒng)文件/etc/security/limits.conf中修改這個(gè)數(shù)量限制,
在文件中加入內(nèi)容:
* soft nofile 65536
* hard nofile 65536
另外方法:
1.使用ps -ef |grep java?? (java代表你程序,查看你程序進(jìn)程) 查看你的進(jìn)程ID,記錄ID號(hào),假設(shè)進(jìn)程ID為12
2.使用:lsof -p 12 | wc -l??? 查看當(dāng)前進(jìn)程id為12的 文件操作狀況
執(zhí)行該命令出現(xiàn)文件使用情況為 1052
3.使用命令:ulimit -a?? 查看每個(gè)用戶允許打開(kāi)的最大文件數(shù)
發(fā)現(xiàn)系統(tǒng)默認(rèn)的是open files (-n) 1024,問(wèn)題就出現(xiàn)在這里。
4.然后執(zhí)行:ulimit -n 4096
將open files (-n) 1024 設(shè)置成open files (-n) 4096
這樣就增大了用戶允許打開(kāi)的最大文件數(shù)
遇到實(shí)際問(wèn)題:
兩臺(tái)服務(wù)器句柄數(shù)分別為:
解決方案:
1、查看每臺(tái)服務(wù)器允許每個(gè)用戶打開(kāi)的文件數(shù)
ulimit -a
2、修改每臺(tái)服務(wù)器對(duì)應(yīng)的 limits.conf文件 句柄數(shù)
/etc/security/limits.conf?? 這個(gè)文件
3、修改完之后 使用命令使其生效
sysctl -p
4、重啟對(duì)應(yīng)服務(wù)
總結(jié)
以上是生活随笔為你收集整理的java 句柄数 设置_技术文档(2)--Linux 句柄数设置情况,问题:java.io.IOException: Too many open files...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 针对P2P终结者4.0版本的研究
- 下一篇: linux 时区 0900是哪,解析表