欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Socket報(bào)錯(cuò)打開(kāi)文件過(guò)多的問(wèn)題

 更新時(shí)間:2024年05月31日 15:45:04   作者:古辛  
這篇文章主要介紹了Java Socket報(bào)錯(cuò)打開(kāi)文件過(guò)多的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java Socket報(bào)錯(cuò)打開(kāi)文件過(guò)多

Caused by: java.net.SocketException: Too many open files

at sun.nio.ch.Net.socket0(Native Method)

at sun.nio.ch.Net.serverSocket(Net.java:415)

at sun.nio.ch.ServerSocketChannelImpl.<init>(ServerSocketChannelImpl.java:88)

at sun.nio.ch.SelectorProviderImpl.openServerSocketChannel(SelectorProviderImpl.java:56)

at java.nio.channels.ServerSocketChannel.open(ServerSocketChannel.java:108)

原因有多種

網(wǎng)上有說(shuō)是因?yàn)橄到y(tǒng)允許打開(kāi)的默認(rèn)文件數(shù)設(shè)置太小,對(duì)于網(wǎng)絡(luò)訪(fǎng)問(wèn),高并發(fā)訪(fǎng)問(wèn)的情況,只需修改系統(tǒng)參數(shù)即可解決

先查看當(dāng)前的設(shè)置:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1418
virtual memory          (kbytes, -v) unlimited

可以看出,對(duì)于我的個(gè)人電腦來(lái)說(shuō)“open files”的設(shè)置是256。

可通過(guò)命名-n選項(xiàng)進(jìn)行修改

ulimit -n 4096

但該選項(xiàng)有個(gè)問(wèn)題,就是只是臨時(shí)生效,比如重啟電腦后將失效,為了保證始終有效,有的linux系統(tǒng)通過(guò)修改limits.conf文件設(shè)置:

* soft nofile 65535
* hard nofile 65535

通過(guò)修改/etc/security/limits.conf文件,把所有用戶(hù)的進(jìn)程打開(kāi)文件上限改為65536。

其中,*表示所有用戶(hù),soft/hard表示軟/硬限制,還可以只真對(duì)某個(gè)用戶(hù)或某個(gè)組做修改,具體方法參見(jiàn)文件注釋。修改后需要重新啟動(dòng)系統(tǒng)才能生效。

但是有時(shí)候,不是單靠修改該參數(shù)就能解決問(wèn)題,有的是因?yàn)槌绦虻膯?wèn)題,比如本人曾經(jīng)遇到過(guò)一個(gè)程序任務(wù),由于連接服務(wù)器失敗,有個(gè)策略設(shè)置了失敗嘗試,但是未對(duì)嘗試次數(shù)進(jìn)行限制,導(dǎo)致每過(guò)一秒就嘗試連接socket,結(jié)果很快就導(dǎo)致系統(tǒng)掛掉,拋出此錯(cuò)誤。

其他程序只要讀寫(xiě)文件均無(wú)法完成,

比如:

java.net.SocketException: Too many open files (Accept failed)
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)

Caused by: java.io.FileNotFoundException: /tmp/data_xxxxxx.dat (Too many open files)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)

甚至還出現(xiàn)過(guò)內(nèi)存溢出的錯(cuò)誤:

out of disk space or the JVM running out of memory

為了解決此類(lèi)問(wèn)題

如果已經(jīng)定位了某個(gè)程序的問(wèn)題,可通過(guò)該程序的日志進(jìn)行分析,也可以通過(guò)命令查看某個(gè)線(xiàn)程是否打開(kāi)了過(guò)多文件句柄

  • 首先通過(guò)關(guān)鍵字查詢(xún)線(xiàn)程ID
  • 不然java線(xiàn)程:
ps -ef | grep java
  • 然后執(zhí)行通過(guò)線(xiàn)程ID查看線(xiàn)程所打開(kāi)的文件列表:
lsof -p 1902 
  • 也可先統(tǒng)計(jì)有多少文件被打開(kāi)
lsof -p 1902 | wc -l

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中資源加載的方法及Spring的ResourceLoader應(yīng)用小結(jié)

    Java中資源加載的方法及Spring的ResourceLoader應(yīng)用小結(jié)

    在Java開(kāi)發(fā)中,資源加載是一個(gè)基礎(chǔ)而重要的操作,這篇文章主要介紹了深入理解Java中資源加載的方法及Spring的ResourceLoader應(yīng)用,本文通過(guò)實(shí)例代碼演示了通過(guò)ClassLoader和Class獲取資源的內(nèi)容,以及使用Spring的ResourceLoader加載多個(gè)資源的過(guò)程,需要的朋友可以參考下
    2024-01-01
  • SpringBoot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)

    SpringBoot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java 抽象類(lèi)與接口的對(duì)比

    Java 抽象類(lèi)與接口的對(duì)比

    這篇文章主要介紹了Java 抽象類(lèi)與接口的對(duì)比,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解

    Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解

    這篇文章主要介紹了Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解,需要的朋友可以參考下
    2017-10-10
  • springboot使用自定義注解實(shí)現(xiàn)aop切面日志

    springboot使用自定義注解實(shí)現(xiàn)aop切面日志

    這篇文章主要為大家詳細(xì)介紹了springboot使用自定義注解實(shí)現(xiàn)aop切面日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java線(xiàn)程之間的共享與協(xié)作詳解

    Java線(xiàn)程之間的共享與協(xié)作詳解

    這篇文章主要介紹了Java線(xiàn)程之間的共享與協(xié)作詳解,進(jìn)程是操作系統(tǒng)進(jìn)行資源分配的最小單位,線(xiàn)程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比經(jīng)常更小的、能夠獨(dú)立運(yùn)行的基本單位
    2022-07-07
  • SpringBoot如何對(duì)LocalDateTime進(jìn)行格式化并解析

    SpringBoot如何對(duì)LocalDateTime進(jìn)行格式化并解析

    這篇文章主要介紹了SpringBoot如何對(duì)LocalDateTime進(jìn)行格式化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java中使用阻塞隊(duì)列控制線(xiàn)程集實(shí)例

    Java中使用阻塞隊(duì)列控制線(xiàn)程集實(shí)例

    這篇文章主要介紹了Java控制阻塞隊(duì)列線(xiàn)程集實(shí)例,本文用一個(gè)程序展示了如何使用阻塞隊(duì)列來(lái)控制線(xiàn)程集,程序功能是在一個(gè)目錄及它的所有子目錄下搜索所有文件,打印出包含指定關(guān)鍵字的文件列表,需要的朋友可以參考下
    2015-01-01
  • MyBatis中常見(jiàn)的SQL執(zhí)行方式及其使用方法

    MyBatis中常見(jiàn)的SQL執(zhí)行方式及其使用方法

    MyBatis可能很多人都一直在用,但是MyBatis的SQL執(zhí)行流程可能并不是所有人都清楚了,下面這篇文章主要給大家介紹了關(guān)于MyBatis中常見(jiàn)的SQL執(zhí)行方式及其使用的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • 解決Mybatis?mappe同時(shí)傳遞?List?和其他參數(shù)報(bào)錯(cuò)的問(wèn)題

    解決Mybatis?mappe同時(shí)傳遞?List?和其他參數(shù)報(bào)錯(cuò)的問(wèn)題

    在使用MyBatis時(shí),如果需要傳遞多個(gè)參數(shù)到SQL中,可以遇到參數(shù)綁定問(wèn)題,解決方法包括使用@Param注解和修改mapper.xml配置,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評(píng)論