You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Caused by: java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:460)
at java.net.Socket.getImpl(Socket.java:520)
at java.net.Socket.setSoTimeout(Socket.java:1141)
[root@bb7122794dd0 ~]# vi /etc/sysctl.conf
#添加或修改
fs.file-max = 6553560
修改单个进程允许打开的最大 文件描述符 数:
永久改变
[root@bb7122794dd0 ~]# vi /etc/security/limits.conf
* hard nofile 65535
* soft nofile 65535
仅当前登录shell生效,退出后就失效
[root@bb7122794dd0 ~]# ulimit -n 4096
配置完成后,重启服务器即可生效。
2、java.net.SocketException: Connection reset
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
Caused by: java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
一、遇到的问题 & 解决方法
在项目中,出现下面的几个问题:
1、java.net.SocketException: Too many open files
排查了下,是因为系统的 "Open File" 参数比较低,默认是 1024:
「Open File」 这个参数,限定了 每个进程可以打开的最大文件描述符数(File Descriptors), 创建 Socket、打开文件等操作,都会影响文件描述符的值。
因此,简单的解决方法是,提升操作系统的文件描述符限值:
修改操作系统允许打开的最大 文件描述符 数:
修改单个进程允许打开的最大 文件描述符 数:
配置完成后,重启服务器即可生效。
2、java.net.SocketException: Connection reset
原因: Client 或者 Server, 一方已经关闭Socket连接,另一方还在写数据,就会抛出改异常。也就是说,这个异常是因为Socket连接断开后的读和写操作引起的。
解决方法:目测是因为“Open File”参数低导致,也需要排查下程序,确保在异常的情况下,所有的Socket连接都要断开。
3、java.net.SocketException: Broken pipe
原因:如果程序在报 java.net.SocketException: Connection reset 后,还继续读写,则抛出改异常,解决方法同上。
4、出现大量的
TIME_WAIT & CLOSE_WAIT
CLOSE_WAIT
, 需要检查对应的代码。解决方法:
二、基本概念
1、File Descriptors
Linux 限制每个进程能够打开的文件描述符的数,默认是 1024,文件操作、Socket通讯、TCP通讯操作都会影响Open Files的值。
三、常用命令
四、参考链接
The text was updated successfully, but these errors were encountered: